Verse kullanılarak oluşturulmuş iki bulmaca var ve bunlardan birincisi Etiketli Işıklar Bulmacası. Etiketli Işıklar bulmacası, alt bodrumdaki merdivenlerin arkasında bulunan gizli odada kullanılır.

Eğitimin son bölümünden kodu kopyalayıp yapıştırabilirsin ancak Verse dilinin işleyişini anlamak için bulmaca parçalarını tek tek inşa etmeni önemle tavsiye ederiz.
İkinci bulmaca ise doğru anahtarın doğru sekansta tetiklendiğinden emin olmak amacıyla her bir anahtar cihazını kontrol etmek için sabit kodlu bir mantık anahtarı kullanır.
Doğru anahtar tetiklendiğinde anahtara bir başarı sesi eşlik eder. Benzer şekilde, sekans sırasında yanlış anahtar açıldığında bir başarısızlık sesi ve mesajı tetiklenir. Bulmaca çözüldüğünde son bir başarı sesi ve mesajı oynatılır ve dört eşya çıkma yeri etkinleştirilir.
Geçerli ve geçersiz durumları kontrol etmenin yanı sıra bir duruma bağlı herhangi bir cihazı tetiklemek için bir dizi kullanabilirsin. Bu örnekte cevap anahtarı, kodlamaya yeni başlayanlara kodun ne yaptığını anlamalarında yardımcı olmak için sabit kodlanmıştır.
Bulmaca Oluşturma Cihazları
Bu bulmacada aşağıdaki cihazlara ihtiyacın olacak:
-
4 adet Anahtar Cihazı
-
3 adet Ses Çalar Cihazı
-
4 adet Eşya Anahtarı Cihazı
-
1 adet Tetikleyici Cihazı
-
1 adet Verse Cihazı

Eşya Çıkma Yerlerini, çıkardıkları eşya ile adlandır.
Anahtar Cihazı
Kapının yanındaki duvarın üzerinde bir Anahtar cihazı yerleştir ve aşağıdaki seçenekleri ayarla
Seçenek | Değer | Açıklama |
---|---|---|
Cihaz Modeli | Devre Kesici | Bu bulmacada oyuncuların devre kesiciyi çevirmesini istiyoruz. |
Ses | False | Ses cihazları geçerli, geçersiz ve başarılı bulmaca durumları için farklı ses işaretleri çalacak. |
Etkileşim Süresi | 0,1 | Etkileşim hemen olmalıdır. |
Etkileşim Yarıçapı | 1,0 | Oyuncunun anahtarla etkileşime girebilmek için anahtarın önündeki tek karelik alanda durması gerekir. |
Oyun Başlangıcında Durum Kontrol Et | False | Bu kontrolü Verse cihazı gerçekleştirecek. |
Duvara üç Anahtar cihazı daha kopyala ve sırayla yerleştir.
Ses Cihazı
Karenin merkezine bir Ses cihazı yerleştir. Ses seçeneklerini aşağıdaki değerlere ayarla.
Seçenek | Değer | Açıklama |
---|---|---|
Etkinleştirildiğinde Sesi Yeniden Başlat | True | Sesin birden çok kez oynatılabilmesi ve her defasında baştan başlaması gerekir. |
Oyuncu Tarafından Vurulduğunda Çal | False | Ses cihazını Verse cihazı tetikleyecek. |
İki Ses cihazı daha kopyala. Cihazları yeniden adlandır ve her birine bir ses işareti ekle:
-
Geçerli - Geçerli Ses cihazını sesi Match_Round_Change_01_Cue.
-
Geçersiz - Geçersiz ses cihazı sesi Player_Checkpoint_Trigger_Cue.
-
Tamamlandı - Tamamlandı Ses cihazı sesi CTF_Return_Team_Cue
Tetikleyici Cihazı
Anahtarların sağ tarafına Tetikleyici cihazını yerleştir ve aşağıdaki seçenekleri ayarla.
Seçenek | Değer | Açıklama |
---|---|---|
Oyunda Görünür | False | Bu cihazın oyunda görünür olması gerekmez. |
Oyun Başlangıcında Etkin | False | Tetikleyici cihazını Verse cihazı kontrol edecek. |
Oyuncu Tarafından Tetiklenir | False | Tetikleyici cihazını Verse cihazı kontrol edecek. |
Araçlar Tarafından Tetiklenir | False | Tetikleyici cihazını Verse cihazı kontrol edecek. |
Sequencer Tarafından Tetiklenir | False | Tetikleyici cihazını Verse cihazı kontrol edecek. |
Su Tarafından Tetiklenir | False | Tetikleyici cihazını Verse cihazı kontrol edecek. |
Kaç Kez Tetiklenebilir | True, 10 | Bulmacada tetikleyicinin birden çok kez kullanılabilmesi gerekir |
Tetikleyici Görsel Efekti | False | Görsel efektlere gerek yok. |
Tetikleyici Ses Efekti | False | Sesi Ses cihazları kontrol edecek. |
Cihazı Geçersiz Tetikleyici olarak adlandır.
Gösterge Paneli Mesajı Cihazı
Birinci Gösterge Paneli Mesajı cihazını aşağıdaki seçenekleri kullanarak ayarla.
Seçenek | Değer | Açıklama |
---|---|---|
Mesaj | Geçersiz Gösterge Paneli Mesajı:
Eşya Bul Gösterge Paneli Mesajı:
|
Bulmacaya yönelik bu mesajlar başarısızlık ve başarı durumlarını kapsar. |
Görünme Süresi | Geçersiz Gösterge Paneli Mesajı - 3,0 Tamamlandı Gösterge Paneli Mesajı - 5,0 |
Mesajların gösterileceği süre. |
Daha sonra, odada görünür olmaması için Gösterge Paneli Mesajı cihazını bodrum duvarının dışına taşı ve kopyala.
Gösterge Paneli Mesajı cihazlarının her birini yeniden adlandır:
-
Eşya Bul Gösterge Paneli Mesajı
-
Geçersiz Gösterge Paneli Mesajı
Verse Cihazı
Artık bulmacayı kontrol eden Verse programını oluşturmaya hazırsın. Verse Gezgini kullanarak switch_state_puzzle adlı yeni bir Verse cihazı oluştur ve cihazı bölüme sürükle. (Yeni bir Verse cihazı oluşturma adımları için Verse Kullanarak Kendi Cihazını Oluşturma bölümüne bakabilirsin.)
Bulmaca Tasarımı
Anahtarları doğru sırayla açmak, oyuncuların kaçış odasındaki bu noktayı geçmesine olanak tanır.
Oyuncu bir anahtarı doğru sekansta açtığında zil çalar. Yanlış anahtar açıldığında bir zil çalar ve anahtarlar sıfırlanır. Geçersiz durumlarda bir mesaj açılır ve bulmaca başarıyla tamamlandığında başarı sesi çalınır, yardımcı bir mesaj görünür ve eşyalar oluşturulur.
Bulmacanın mantığını aşağıdaki akış şemasını kullanarak görselleştirebilirsin.
Büyütmek için görsele tıkla.
Bulmacanın doğru çözümü aşağıdaki tabloda gösterilmiştir.
Bulmaca Çözüm Matrisi | ||||
---|---|---|---|---|
Anahtarlar | 2 | 3 | 1 | 4 |
1 | X | |||
2 | X | X | ||
3 | X | X | X | |
4 | X | X | X | X |
Kullanılan Verse Dili Özellikleri
-
if
,then
,else
:if
,then
veelse
ifadeleriyle her anahtar cihazı ve durumlara bağımlı olan diğer cihazlar için geçerli ve geçersiz durumları bulabilirsin. -
failure
: Başarısızlık bağlamları bulmacanın geçerli durumuna ve çözümüne karar vermek için kullanılır. -
for
:for
ifadesi, bulmacadaki her anahtarı yinelemek ve üzerinde işlemler yapmak için kullanılır.
Kullanılan API’ler
-
Düzenlenebilir özellikler: Verse kullanılarak yazılan birden fazla cihaz özelliği UEFN’de kullanıma sunulur, böylece bu özellikleri editörde özelleştirebilirsin. Bu özellikleri değiştirerek yeni bulmaca yapılandırmaları oluşturabileceksin.
-
Cihaz Olayları: Oyun durumunu kontrol etmek için düğmelerin
InteractedWithEvent
olayı kullanılır.
Anahtar Ekileşimi
Bulmacayı yürütmek için gerekli adımları düşün. İlk olarak bir oyuncu kutuyu işaretlediğinde Verse cihazının bir olay kaydedip kaydetmediğini kontrol etmen gerekir. Bunu yapmak için öncelikle sözde kod yazarak etkileşim kavramını kanıtla.
-
switch_state_puzzle sınıf tanımının altına aşağıdaki düzenlenebilir alanları ekle.
-
switch_device
türündeSwitches
adlı düzenlenebilir bir dizi. Bu dizi, bulmacadaki tüm anahtarlarını ifade eder. -
cancelable
türündeSwitchSubscriptions
adlı değişken dizisi. Bu dizi, anahtarları sıfırlamak için kullanabileceğin her bir switch_device bağlanmasına referans içerir.
-
switch_state_puzzle := class(creative_device):
@editable
Switches : []switch_device = array{} #Oyuncuların etkileşime girebileceği anahtarlara referanslar
var SwitchSubscriptions : []cancelable = array{}
-
Aynı dosyada
switch_event_handler
adlı yeni bir sınıf oluştur. Bu sınıfta Verse cihazını ve anahtarları tanımlayacaksın. -
switch_event_handler
sınıfınaOnSwitchPressed()
adlı yeni bir metot ekle. Bu metot,item_switch_puzzle
sınıfındaCheckSequence()
çağrısı yaparak Verse cihazını oyuncu etkileşimine karşı kontrol eder. Ayrıca bir anahtarla her etkileşime geçildiğinde Tıklandı mesajını yazdırır.
## Anahtar etkileşimlerini işleyen bir olay işleyici sınıfı
## Bu olay işleyici, yukarıdaki döngüde yer alan olaylara bağlanır
switch_event_handler := class():
PuzzleDevice : item_switch_puzzle
Switch : switch_device
OnSwitchPressed(InPlayer : agent) : void =
Print(“Tıklandı”)
PuzzleDevice.CheckSequence(InPlayer)
Yazdırma Günlüğü ekle
Kodunun başarılı olup olmadığını kontrol etmenin bir yolu, bir günlüğe yazdırmaktır. Bunu yapmak, mesajlar yazdırarak kodunun hangi kısımlarının planlanan şekilde çalıştığını gözle görmene olanak tanır. Yazdırma günlüğünü kreatif cihazı sınıfının üzerine ekle.
Print<native><public>(Message:[]char, Level:log_level):void
Anahtar Referansları
Şimdi bulmacadaki anahtar cihazlarına referans vermenin bir yolunu bulmalısın. Anahtar cihazlarına referans vermek, tüm anahtarları döngüden geçirmenin ve oyun devam ederken her bir anahtara olay işleyiciler eklemenin bir yolunu sağlar.
-
switch_state_puzzle
sınıfındakiOnBegin()
fonksiyonunda birfor
ifadesi ekleyerekSwitches
dizisindeki her birSwitch
anahtarını yinele. Her birSwitch
anahtarının dizinini al ve birSwitchIndex
değişkeninde depola. -
Çalıştırma süresi sırasında Print komutuna {SwitchIndex} anahtarı eklendi yazarak etkileşime girilen anahtarı tanımlayan for ifadesinin altına bir Print fonksiyonu ekle.
-
Bulmaca çözümü anahtar durumlarının belirli bir sırada oluşuna bağlı olduğundan, herhangi bir anahtarın durumu her değiştiğinde bulmacanın çözülüp çözülmediğini kontrol etmen gerekir. Bunu yapmak için, daha önce anahtar başına iki farklı olayı dinlemek için tanımladığın
switch_event_handler
sınıfını kullanacaksın. Her bir anahtar için biriTurnedOnEvent
anahtarlarına, biri deTurnedOffEvent
anahtarlarına yönelik olmak üzere iki bağlanma oluştur. Her iki olayı daswitch_event_handler
sınıfınınOnSwitchPressed()
fonksiyonuna bağla. Hemswitch_state_puzzle
hem de geçerliSwitch
referansını geçir.
## Sürmekte olan bir oyunda başlatıldığında çalışır
OnBegin<override>()<suspends>:void=
Print(“Anahtar Bulmacası Yükleniyor”)
# Her anahtarı döngüden geçirme ve her anahtara olay işleyici ekleme
for (SwitchIndex -> Switch : Switches):
Print(“{SwitchIndex} anahtarı eklendi”)
Switch.TurnedOnEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
Switch.TurnedOffEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
- Kodu Visual Studio Code’a kaydet ve UEFN’de Verse -> Verse Kodu Oluştur’a tıkla.
Bölümünü test ederken bir anahtarı her açtığında veya kapattığında hem etkileşime girdiğin anahtarın dizininin hem de Tıklandı kelimesinin yazdırıldığını görmelisin.
Bulmaca Durumları
Bulmacadaki her anahtarın geçerli ve geçersiz olmak üzere iki durumu olabilir.
Oyuncunun bulmacayı çözmek için anahtarları belirli bir sırayla açması gerekir. Bu sırayı koda uygulamak için her bir anahtara yönelik bir geçerli durum sekansı tanımlamalı ve oyuncu anahtar durumunu her güncellediğinde bu sekansı kontrol etmelisin.
-
switch_state_puzzle
sınıfınaValidState()
adlı yeni bir metot ekle. Bu metot bir dizeyi alır ve oyuncu bir anahtarı geçerli bir duruma getirdiğinde ses klibi çalarak oyuncuya doğru yolda olduğuna dair bir sesli geribildirim verir. -
ValidState()
metodunda geçirilenState
dizesini yazdır ve daha önce ayarladığındaValidAudioPlayer
cihazındaPlay()
çağrısı yap.
# Durum geçerli olduğunda gerçekleştirilecek eylemler
ValidState(State : string) : void =
# Bir doğrulama sesi çal
Print(“Geçerli {State}”)
ValidAudioPlayer.Play()
switch_state_puzzle
sınıfınaInvalidState()
adlı yeni bir metot ekle. Bu metot, oyuncu geçersiz bir durum tetiklediğinde ses çaldıktan sonra tüm anahtarları sıfırlar.
# Durum geçersiz olduğunda gerçekleştirilecek eylemler
InvalidState(InPlayer : agent) : void =
# Bir zil sesi çal
# Tüm anahtarları temizle
Print(“Geçersiz”)
InvalidState()
durumunda Geçersiz yazarak ve daha önce oluşturduğunInvalidAudioPlayer
cihazındaPlay()
çağrısıyla bir ses klibi çalarak oyuncuya bir geçersiz durum tetiklediğini bildir. AyrıcaInvalidTrigger
üzerindeTrigger()
çağrısı yapıpInvalidHUDMessage
mesajınıShow()
ile göstermen gerekir.
# Durum geçersiz olduğunda gerçekleştirilecek eylemler
InvalidState(InPlayer : agent) : void =
# Bir zil sesi çal
# Tüm anahtarları temizle
Print(“Geçersiz”)
InvalidAudioPlayer.Play()
InvalidTrigger.Trigger()
InvalidHUDMessage.Show()
Anahtar cihazları üzerindeki olaylara bağlanan bir for döngüsü oluştur. Print ifadesi, bir oyuncunun hangi anahtarları çevirdiğini ve anahtarların çevrilme sekansını tanımlar.
# Her anahtarı döngüden geçirme ve her anahtara olay işleyici ekleme
for (SwitchIndex -> Switch : Switches):
Print(“{SwitchIndex} anahtarı eklendi”)
Switch.TurnedOnEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
Switch.TurnedOffEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
Bir for döngüsünde tüm anahtarları döngüden geçir ve her birini kapat. Anahtarın TurnOff()
metodu başlatıcı olarak bir oyuncu gerektirdiğinden, geçersiz durumu tetikleyen oyuncuyu ilet.
## Anahtarları döngüden geçirme ve her birini kapatma
for (SwitchIndex -> Switch : Switches):
Switch.TurnOff(InPlayer)
- Kodunu Kaydet ve UEFN’e geri dönerek Verse > Verse Kodu Oluştur’u seç.
Bundan sonra item_switch_puzzle
sınıfında her bir anahtarı döngüden geçiren ve bulmaca matrisine göre durumunu doğrulayan mantığı oluşturarak anahtar çevirmenin hangi duruma (geçerli veya geçersiz) karşılık geldiğini belirlemen gerekir.
Anahtar Durumlarını Sıralama
Anahtar çevirmenin geçerliliğini kontrol etmek için anahtarın durumunu kontrol etmek üzere for ifadesi kullanan bir CheckSequence metodu oluşturmak gerekir. Bir anahtarın durum değişikliğinin geçerli olup olmadığını tanımlamak için bir if
ifadesi kullanarak sekansta hangi anahtar çevirmesinin geçerli, hangisinin geçersiz olduğunu belirleyebilirsin.
CheckSequence()
adlı yeni bir metot ekle. Bu metot, anahtar durumu değişikliklerinin başlatıcısı olarak oyuncuyu ve anahtar durumlarına karşılık gelen bir mantık değerleri dizisini alır.CheckSequence()
içinde birfor
döngüsü oluşturarakSwitches
dizisindeki her bir anahtarı yinele. Dizideki her bir anahtarın dizinini al ve birSwitchIndex
değişkenine kaydet. for döngüsündeGetCurrentState[]
çağrısı yaparak her bir anahtar durumunu kontrol et. Ardından anahtarın durumunu günlüğe yazdır.
# Anahtar sekansını doğrulayan fonksiyon
CheckSequence(InPlayer : agent) : void =
for (SwitchIndex -> Switch : Switches):
if(Switch.GetCurrentState[]) then Print("{SwitchIndex} Açık") else Print("{SwitchIndex} Kapalı")
Şimdi CheckSequence()
kullanarak kontrol edilecek bir durum sekansı oluşturmalısın. Bunu yapmak için switch_event_handler
işleyicisinin OnSwitchPressed()
metoduna yeni bir fonksiyon ekleyeceksin.
Sekans Durumları
Dizileri kullanarak anahtar durumları için sekansı oluştur. Her dizi, anahtarların çevrildiği sekansın geçerliliğini kontrol eder. Oyuncunun anahtarlar üzerindeki eylemlerinin sekansını, yazdırma günlüğüne kaydederek anahtarların Tıklandı durumunda olup olmadığını ve sekans numarasını (“Bir”, “İki”, “Üç” ve “Dört”) günlüğe yazdırarak sekansın geçerli olup olmadığını kayıt altına al.
OnSwitchPressed()
içindeki birif
ifadesindeCheckSequence()
çağrısını yaparak hem oyuncuyu hem de yeni bir mantık değerleri dizisini geçir.false
değerlerinin kapalı anahtarları,true
değerlerinin ise açık anahtarları temsil ettiği bu yeni dizi, anahtar serine karşılık gelmelidir. Oyuncuların önce basmasını istediğin anahtarlarıtrue
, diğer tüm değerleri ise false olarak ayarla.CheckSequence[]
çağrısı başarılı olursaValidState()
çağrısı yaparak basılan birinci anahtarı temsil etmesi için “Bir” değerini geçir.
OnSwitchPressed(InPlayer : agent) : void =
Print(“Tıklandı”)
PuzzleDevice.CheckSequence(InPlayer)
- Bulmacandaki her bir anahtarın çevirmeleri için, basılmasını istediğin sırayla cevap anahtarını sabit kodla.
if:
# geçerli durumları kontrol et ve durumların doğrulamasını sabit kodla
# [kapalı],[kapalı],[açık],[kapalı] Durum Bir
not Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("One")
else if:
# geçerli durumları kontrol et
#[Açık], [Kapalı], [Açık], [Kapalı] Durum İki
Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Two")
else if:
# geçerli durumları kontrol et
#[Açık], [Açık], [Açık], [Kapalı] Durum Üç
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Three")
else if:
# geçerli durumları kontrol et
#[Açık], [Açık], [Açık], [Açık] Durum Dört, bulmaca tamamlandı
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
Switches[3].GetCurrentState[]
then:
CompletedState()
- Son olarak en sona
InvalidState()
çağrısı yapan birelse
ifadesi ekle.CheckSequence[]
çağrılarının herhangi biri başarısız olursa bu durum yaşanır.
else:
# Geçerli bir durum değil, bu yüzden geçersiz
InvalidState(InPlayer)
switch_event_handler
kodun şu anda aşağıdaki gibi görünmelidir.
# Anahtar sekansını doğrulayan fonksiyon
CheckSequence(InPlayer : agent) : void =
for (SwitchIndex -> Switch : Switches):
if(Switch.GetCurrentState[]) then Print("{SwitchIndex} Açık") else Print("{SwitchIndex} Kapalı")
if:
# geçerli durumları kontrol et ve durumların doğrulamasını sabit kodla
# [kapalı],[kapalı],[açık],[kapalı] Durum Bir
not Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("One")
else if:
# geçerli durumları kontrol et
#[Açık], [Kapalı], [Açık], [Kapalı] Durum İki
Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Two")
else if:
# geçerli durumları kontrol et
#[Açık], [Açık], [Açık], [Kapalı] Durum Üç
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Three")
else if:
# geçerli durumları kontrol et
#[Açık], [Açık], [Açık], [Açık] Durum Dört, bulmaca tamamlandı
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
Switches[3].GetCurrentState[]
then:
CompletedState()
else:
# Geçerli bir durum değil, bu yüzden geçersiz
InvalidState(InPlayer)
- Kodunu Kaydet ve UEFN’e geri dönerek Verse > Verse Kodu Oluştur’u seç.
Şimdi oyunda anahtarlarını açtıkça günlüğe şunlar yazdırılır:
-
Anahtar Bulmacası Yükleniyor: oyun başladığında
-
{SwitchIndex} anahtarı eklendi: döngüye bir anahtar eklendiğinde
-
Tıklandı: oyuncu bir anahtarı açtığında
-
Geçerli {State}: oyuncu sekans sırasıyla doğru anahtarı açtığında
-
Geçersiz: oyuncu yanlış anahtarı açtığında
Günlükte anahtar çevirmelerin doğru şekilde raporlanıyorsa item_switch_puzzle sınıfına daha fazla düzenlenebilir cihaz eklemeye ve bu durumların her birine bir şey yaptırmaya hazırsın.
Cihaz Ekleme
Bulmaca oyuncu tarafından başarıyla tamamlandıktan ve bulmaca anahtarların ValidStates durumlarından geçip CompletedState durumuna ulaştıktan sonra başarılı sonuç, eşya vermek gibi bir şey yapmalıdır.
Aynı durum InvalidStates için de geçerlidir. Oyuncu bulmacayı yanlış yaparsa kod bunu hesaba katmalı ve oyunculara tekrar denemeleri gerektiğini bildirmelidir. Bunu gerçekleştirmek için item_switch_puzzle sınıfına başka cihazlar eklemen gerekir.
Koduna düzenlenebilir cihazlar eklediğinde cihazlar Verse Cihazının Kullanıcı Seçenekleri’nde gösterilir. Burada cihazları oyunda Verse koduyla yazıldığı gibi çalışmaları için Verse Cihazına bağlayabilirsin.
- item_switch_puzzle altına aşağıdaki @editable cihazları ekle:
@editable
InvalidTrigger : trigger_device = trigger_device{}
@editable
InvalidHUDMessage : hud_message_device = hud_message_device{}
@editable
InvalidAudioPlayer : audio_player_device = audio_player_device{}
@editable
ValidAudioPlayer : audio_player_device = audio_player_device{}
@editable
FindItemsHUDMessage : hud_message_device = hud_message_device{}
@editable
CompletedAudioPlayer : audio_player_device = audio_player_device{}
@editable
ItemSpawners : item_spawner_device = item_spawner_device{} #Bu bulmacayla ilişkili tüm eşya çıkma yerlerini alır
item_switch_puzzle
sınıfınaCompletedState()
adlı yeni bir metot ekle. Bu metot, bulmaca tamamlandığında gerçekleştirilen eylemleri işler.
## Bulmaca tamamlandığında gerçekleştirilecek eylemler
CompletedState() : void =
# Başarı sesi çal
# Tüm anahtarları devre dışı durumuna ayarla
# Bağlı eşya çıkma yerlerinde eşya oluştur
Print(“Tamamlandı”)
1. CompletedState()
metoduna ItemSpawners
içindeki her eşya çıkma yerinde yinelenen bir for ifadesi ekle. Enable()
ile her bir eşya çıkma yerini etkinleştir, ardından SpawnItem()
çağrısı yaparak oyuncuya bulmacayı çözdüğü için ödül ver.
## Eşya Çıkma Yerlerini döngüden geçirmek her bir Eşya Çıkma Yerini çağırarak etkinleştirmeni ve eşyasını çıkarmanı sağlar
for (ItemSpawnerIndex -> ItemSpawner : ItemSpawners):
ItemSpawner.Enable()
ItemSpawner.SpawnItem()
- Bulmaca başarıyla tamamlandıktan sonra daha önce oluşturduğun
CompletedAudioPlayer
üzerindePlay()
çağrısı yapmalı,ItemSpawnerIndex
ile birlikteEnable1
veSpawnItem
çağrılarını kullanarak Eşya Çıkma Yerlerinde metal parçalar çıkarmalısın.FindItemsHUDMessage
üzerindeShow()
çağrısı yaparak oyuncuya yeni çıkan eşyaları araması gerektiğini bildir. Ayrıca oyuncunun anahtarlarınla etkileşime girmeye devam etmemesi gerekir.Switches
içindeki her bir anahtarı döngüden geçirmek için ikinci bir for ifadesi ekle veDisable()
çağrısı yaparak anahtarları devre dışı bırak.
# Bulmaca tamamlandığında gerçekleştirilecek eylemler
CompletedState() : void =
# Başarı sesi çal
# Tüm anahtarları devre dışı durumuna ayarla
# Bağlı eşya çıkma yerlerinde eşya oluştur
Print(“Tamamlandı”)
# Eşya Çıkma Yerlerini döngüden geçirmek her bir Eşya Çıkma Yerini çağırarak etkinleştirmeni ve eşyasını çıkarmanı sağlar
for (ItemSpawnerIndex -> ItemSpawner : ItemSpawners):
ItemSpawner.Enable()
ItemSpawner.SpawnItem()
# Bulmaca sekansı tamamlandığı için özel ses işaretini oynatır
CompletedAudioPlayer.Play()
# Oyunculara yeni çıkan eşyaları aramaları gerektiğini bildirmek için bir Gösterge Paneli Mesajı oynatır
FindItemsHUDMessage.Show()
# Bulmaca başarıyla tamamlandıktan sonra tüm anahtarları devre dışı bırak
for (SwitchIndex -> Switch : Switches):
Switch.Disable()
- Kodunu Kaydet ve UEFN’e geri dönerek Verse > Verse Kodu Oluştur’u seç.
Bu cihazlar artık UEFN’de Eşya Anahtarı Bulmacasına eklendi.
Cihazları Seç
Tüm @editable cihazlar Verse cihazına eklendi. Şimdi bulmacayı oluşturmak için seçtiğin cihazları Verse cihazına eklemen gerekiyor. Bunu yapmak için Anahat Düzenleyicisi’nde item_switch_puzzle sınıfını seç ve tüm cihaz yuvalarını Ayrıntılar panelinde görüntüle. Cihazı yuvayla eşleştirmen gerekir.
-
Bulmacanın Anahtar cihazlarını Eşya Anahtar Bulmacası altındaki 4 dizili Anahtarlar öğesine ekle.
-
Geçersiz Tetikleyiciyi InvalidTrigger yuvasına ekle.
-
Geçersiz Gösterge Paneli Mesajı’nı InvalidHUDMessage yuvasına ekle.
-
Geçersiz Ses Çalar cihazını InvalidAudioPlayer yuvasına ekle.
-
Geçerli Ses Çalar cihazını ValidAudioPlayer yuvasına ekle.
-
Gösterge Paneli Mesajını Bul cihazını FindHUDMessage yuvasına ekle.
-
Tamamlanan Ses Çalar cihazını CompletedAudioPlayer yuvasına ekle.
-
Eşya Çıkma Yeri cihazlarını 4 dizili ItemSpawners öğelerine ekle.
-
Oyun sırasında Verse cihazını gizlemek için Oyunda Görünür seçeneğinin işaretini kaldır.
Artık bölümüne oynanış testi yapmaya ve bulmacanın kaçış odası deneyimini nasıl geliştirdiğini görmeye hazırsın.
Sonraki Bölüm
Anahtar Durumu Bulmacası çalışmaya başladıktan sonra, sinematiğin oynatılması tamamlandığında oyuncuları açılış sinematiğinden kulübenin alt bodrumundaki bekleme odasına götüren otomatik ışınlama Verse kodunu oluşturmaya hazır olursun.