Sıra tabanlı oyun motoru nasıl uygulanır?


17

Might and Magic Heroes, Orion Master veya sıra tabanlı seçim oyununuzu hayal edelim. Bir sonraki dönüşün arkasındaki oyun mantığı nedir? Konu hakkında okunacak herhangi bir materyal veya kitap var mı? Spesifik olarak, oyun döngüsünü hayal edelim:

void eventsHandler(); //something that responds to input
void gameLogic(); //something that decides whats going to be output on the screen
void render(); //this function outputs stuff on screen

Bunların hepsi saniyede 60 kez derler. Fakat buraya sıra tabanlı nasıl giriyor? GameLogic () 'de, bir oyuncu bu düğmeyi tıklattığında gerçekleşen endTurn () gibi bir işlev olduğunu hayal edebilirim, ancak hepsini nasıl halledebilirim? Bilgi gerekiyor.

Yanıtlar:


21

Sıra tabanlı bir oyun bir devlet makinesi tarafından yönetilecek . Temel olarak, mantıksal sırada oluşabilecek bir dizi durum ortaya koyarsınız.

Yüksek seviyede, bir oyuncunun sırası yeni bir durumun başlangıcı olabilir ve bunu o sırada izin verilen tüm olası eylemler izleyebilir.

Örneğin

  • Durum - oynatıcıyı değiştir
    • şimdi oyuncu 1'in sırası
  • İzin verilen eylemler
    • saldırı
      • saldırmak için düşmanı seç
    • savunmak
      • savunmak için birim seç
    • birimi taşı
      • taşınacak birimi seç
      • harekete izin verilip verilmediğini kontrol et
    • vb

Açıkçası bu oldukça hızlı bir şekilde balonlanacak, çünkü sadece son derece sınırlı bir plan çizdim. Olası durumları erkenden kavramak, uygulamak için iyi bir konumda olmanız gerektiği anlamına gelecektir. Tam olarak oyunun nasıl çalışmasını istediğinizi gösteren stresi çok iyi anlıyorum .... iyi bir sıra tabanlı oyun çok fazla IMO planlama gerektirir.


Final Fantasy Tactics'te 3 aylık bir geliştirme girişimi olan oldukça eski bir okul projem :) Yukarıda açıklandığı gibi bir devlet makinesi (aslında birkaç tanesi) kullanıyor. sourceforge.net/projects/bpfat
James

Hey, sıra tabanlı strateji için Game Engine ne olacak? Bir şey tavsiye eder misiniz? Unreal motoru sığabilir mi?
Rantiev

Herkesinki kendine. Unreal motorundan memnunsanız, bununla ilgili yanlış bir şey yoktur. Sadece hangi mekaniklerden yararlanmak istediğinize bağlıdır. Hızlı bir arama , Unreal motoru için sıra tabanlı strateji oyunları oluşturmaya yardımcı olmak için ücretsiz bir araç kiti akımının mevcut olduğunu gösterir .
the_e

3

Son zamanlarda Master of Orion'a benzer bir sıra tabanlı strateji oyunu inşa ettim (şu anda sadece tek oyuncu, çok oyunculu biraz daha karmaşık, ancak benzer bir fikir olurdu), işte endTurn fonksiyon mantığım şöyle görünüyor (benim main Game Controller class) ile ilişkili olan kısmını dışarı aktarmak suretiyle yedek oluşturmanız gerekir:

//for all computer players:
computerTakeTurn(player)

//for all players
moveShips(player)

//for all players
endTurn(player)//see this function below

//for all planets
planet.repairFleet()

//for all players
resolvePlanetaryConflicts(player)

//check to see if any players were destroyed or if the game is over
checkPlayerDestroyedAndGameOver()

Oynatıcı son dönüş fonksiyonum, oyuncular arasında gerçekleştiği sıradan etkilenmeyen oyuncuya özgü işlevleri gerçekleştirecektir:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

Uygun olduğunda, bu fonksiyonlar durum mesajlarını döndürür ve / veya olayları tetikler, böylece GUI dönüş sırasında ne olduğunu gösterebilir veya oyuncuya bir bilgisayarın yok edildiğini bildirebilir, vb.


Sadece kontrol etmek için lütfen kaynak kodu verebilir misiniz? Çok yardımcı olur. Sadece eğitim amaçlı.
Dvole

@Dvole Şu anda HTML5 tuval etiketini kullanarak Silverlight / C # kodunu JavaScript'e dönüştürme üzerinde çalışıyorum. Ben bittikten sonra açık kaynak kodlamayı planlıyorum ve o zaman tam olarak bu işlevi nasıl uyguladığımı görmek için bekliyoruz. Bağlam elde etmeye yardımcı olursa, Uzay Stratejisi oyunumu
Matt Palmerlee

2
@Dvole Oldukça uzun sürdü, ama sadece Astriarch'ın Silverlight versiyonunu açtım. Eğer hala ilgileniyorsanız github kaynak kodunu buradan indirebilirsiniz: github.com/mpalmerlee/Astriarch/tree/Silverlight
Matt Palmerlee
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.