Oyun motorumda komut dizilerini nasıl uygulayacağımı düşünüyorum. Sadece birkaç gereksinimim var: Sezgisel olmalı, özel bir dil, ayrıştırıcı ve yorumlayıcı yazmak istemiyorum ve iş parçacığı kullanmak istemiyorum. (Daha basit bir çözüm olduğundan eminim; Birden fazla oyun mantığı iş parçacığının sıkıntısına ihtiyacım yok.) Python'da (aka pseudocode) örnek bir komut dosyası var:
def dramatic_scene(actors):
alice = actors["alice"]
bob = actors["bob"]
alice.walk_to(bob)
if bob.can_see(alice):
bob.say("Hello again!")
else:
alice.say("Excuse me, Bob?")
Bu destansı hikaye anlatımı, uygulama sorunları yaratıyor. Tüm yöntemi bir kerede değerlendiremiyorum, çünkü walk_to
oyun zamanını alıyor. Hemen geri dönerse Alice, Bob'a doğru yürümeye başlar ve (aynı çerçevede) merhaba der (ya da selamlanır). Ama walk_to
Bob'a ulaştığında geri dönen bir engelleme çağrısı varsa , o zaman oyunum sıkışır, çünkü Alice'i yürütebilecek aynı iş parçacığını engeller.
Her bir işlevi bir eylemi enqueue yapmayı düşündüm - alice.walk_to(bob)
bir nesneyi kuyruğa iterdi, ki bu nerede olursa olsun Alice Bob'a ulaştıktan sonra patlardı. Bu daha incelikle kırıldı: if
şube hemen değerlendirildi, bu yüzden Bob sırtını ona dönse bile Alice'i selamlayabilir.
Diğer motorlar / insanlar, iş parçacığı oluşturmadan komut dosyalarını nasıl işler? Fikirler için jQuery animasyon zincirleri gibi oyun dışı alanlara bakmaya başlıyorum. Bu tür bir sorun için iyi kalıplar olması gerektiği anlaşılıyor.