Bagaimana cara mengimplementasikan mesin game berbasis giliran?

17

Mari kita bayangkan game seperti Heroes of Might and Magic, atau Master of Orion, atau game pilihan berbasis giliran Anda. Apa logika permainan di balik belokan berikutnya? Apakah ada bahan atau buku untuk dibaca tentang topik ini? Untuk lebih spesifik, mari kita bayangkan lingkaran permainan:

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

Semua yang dipanggil katakan 60 kali per detik. Tapi bagaimana turn-based masuk di sini? Saya mungkin membayangkan bahwa di gameLogic () ada fungsi seperti endTurn () yang terjadi ketika seorang pemain mengklik tombol itu, tetapi bagaimana saya menangani semuanya? Perlu wawasan.

Dvole
sumber

Jawaban:

21

Gim berbasis giliran akan diatur oleh mesin negara . Pada dasarnya, Anda akan meletakkan serangkaian keadaan yang dapat terjadi dalam urutan logis.

Pada level tinggi, giliran pemain bisa menjadi awal dari keadaan baru, diikuti oleh semua tindakan yang dimungkinkan selama giliran itu.

Contohnya

  • Negara - ganti pemain
    • sekarang giliran pemain 1
  • Tindakan diizinkan
    • menyerang
      • pilih musuh untuk diserang
    • membela
      • pilih unit untuk dipertahankan
    • memindahkan unit
      • pilih unit untuk dipindahkan
      • periksa untuk memastikan perpindahan diperbolehkan
    • dll

Jelas ini akan menggelembung cukup cepat, karena saya hanya membuat sketsa rencana yang sangat terbatas. Memiliki pemahaman yang baik tentang kemungkinan keadaan sejak dini akan berarti bahwa Anda harus berada dalam posisi yang baik untuk diterapkan. Saya akan sangat stres membuat sketsa persis bagaimana Anda ingin permainan dijalankan .... permainan berbasis giliran yang baik membutuhkan banyak perencanaan IMO.

engkau
sumber
Proyek sekolah saya yang cukup tua yang merupakan upaya pengembangan 3 bulan di Final Fantasy Tactics :) Menggunakan mesin negara (beberapa dari mereka sebenarnya) seperti dijelaskan di atas. sourceforge.net/projects/bpfat
James
Hei, bagaimana dengan Game Engine untuk strategi berbasis giliran? Bisakah Anda memberi saran? Mungkin mesin Unreal bisa muat?
Rantiev
Untuk masing-masing miliknya. Jika Anda nyaman dengan mesin Unreal tidak ada yang salah dengan itu. Tergantung pada mekanisme mana yang ingin Anda manfaatkan. Pencarian cepat menunjukkan bahwa toolkit saat ini ada untuk mesin Unreal untuk membantu membuat game strategi berbasis giliran, meskipun itu tidak gratis.
the_e
3

Saya baru-baru ini membangun permainan strategi berbasis giliran mirip dengan Master of Orion (itu hanya pemain tunggal sekarang, multi-pemain akan menjadi sedikit lebih kompleks, tetapi ide yang sama), di sini adalah apa yang tampak seperti logika fungsi endTurn saya (di saya kelas Game Controller utama):

//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()

Fungsi putaran pemain saya akan melakukan fungsi-fungsi khusus untuk pemain yang tidak terpengaruh oleh urutan yang terjadi antara pemain:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

Apabila diperlukan, fungsi-fungsi ini mengembalikan pesan status dan / atau memicu peristiwa sehingga GUI dapat menunjukkan apa yang terjadi selama belokan atau membiarkan pemain mengetahui bahwa komputer telah dihancurkan, dll ...

Matt Palmerlee
sumber
bisakah Anda memberikan kode sumber hanya untuk check out? Akan sangat membantu. Hanya untuk tujuan pendidikan.
Dvole
@Dvole Saat ini saya sedang mengerjakan konversi kode dari Silverlight / C # ke JavaScript menggunakan tag kanvas HTML5. Setelah saya selesai, saya berencana untuk membuka sumber kode dan pada saat itu Anda dipersilakan untuk melihat bagaimana saya menerapkan fungsi ini. Jika itu membantu untuk mendapatkan konteks Anda dapat memainkan permainan Strategi Luar Angkasa saya di sini: Astriarch - Ruler of the Stars
Matt Palmerlee
2
@ Dvole Butuh beberapa waktu, tapi saya baru saja membuka versi Silverlight dari Astriarch. Jika Anda masih tertarik, Anda dapat mengunduh kode sumber dari github di sini: github.com/mpalmerlee/Astriarch/tree/Silverlight
Matt Palmerlee