ターンベースのゲームエンジンを実装する方法


17

Heroes of Might and Magic、Master of Orion、またはターンベースの選択ゲームのようなゲームを想像してみましょう。次のターンの背後にあるゲームロジックは何ですか?トピックについて読むための資料や本はありますか?具体的には、ゲームループを想像してみましょう。

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

それらはすべて、1秒間に60回呼び出されます。しかし、ターンベースはどのようにここに入りますか?gameLogic()には、プレイヤーがそのボタンをクリックしたときに発生するendTurn()のような関数があると想像するかもしれませんが、どうすればそれをすべて処理できますか?洞察が必要です。

回答:


21

ターンベースのゲームは、ステートマシンによって管理されます。基本的に、論理的な順序で発生する可能性のある一連の状態をレイアウトします。

高レベルでは、プレーヤーのターンは新しい状態の開始であり、そのターン中に許可されるすべての可能なアクションがそれに続く可能性があります。

例えば

  • 状態-プレーヤーの変更
    • プレイヤー1の番です
  • 許可されたアクション
    • 攻撃
      • 攻撃する敵を選択する
    • 守る
      • 防御するユニットを選択
    • 移動ユニット
      • 移動するユニットを選択
      • 移動が許可されていることを確認してください

私は非常に限られた計画をスケッチしただけなので、明らかにこれは非常に急速に膨れ上がります。可能性のある状態を早期に十分に把握することは、実装するのに適切な位置にいる必要があることを意味します。ゲームの実行方法を正確にスケッチすることを非常に強調します。...良いターンベースのゲームには、多くのIMOの計画が必要です。


Final Fantasy Tacticsで3か月間の開発を試みたかなり古い学校のプロジェクト:)上記のように、ステートマシン(実際にはいくつかのem)を使用します。sourceforge.net/projects/bpfat
ジェームズ

ねえ、ターンベースの戦略のためのゲームエンジンはどうですか?何かアドバイスはありますか?アンリアルエンジンが適合する可能性がありますか?
ランティエフ

それぞれ自分自身に。Unrealエンジンに慣れている場合は、それで問題はありません。どのメカニズムを利用するかによって異なります。クイック検索では、無料ではありませんが、ターンベースの戦略ゲームの作成を支援するためのツールキットが現在Unrealエンジンに存在することが示されています
the_e

3

私は最近、オリオンのマスターに似たターンベースの戦略ゲームを構築しました(現在はシングルプレイヤーのみですが、マルチプレイヤーはもう少し複雑ですが、同様のアイデアです)、ここに私のendTurn関数ロジックがメインゲームコントローラクラス):

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

プレイヤーのエンドターン機能は、プレイヤー間で行われる順序の影響を受けない、そのプレイヤーに固有の機能を実行します。

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

必要に応じて、これらの関数はステータスメッセージを返したり、イベントをトリガーしたりして、GUIがターン中に何が起こったかを表示したり、コンピューターが破壊されたことをプレーヤーに知らせたりすることができます。


チェックアウトするためだけにソースコードを提供してもらえますか?大きな助けになるでしょう。教育目的のみ。
-Dvole

@Dvole現在、HTML5キャンバスタグを使用して、Silverlight / C#からJavaScriptにコードを変換しています。完了したら、コードのオープンソース化を計画します。その時点で、この関数をどのように実装したかを正確に確認できます。それはコンテキストを取得するのに役立ちます場合は、ここで私のスペース戦略ゲームをプレイすることができます:Astriarch -スターの支配者
マットPalmerlee

2
@Dvoleかなり時間がかかりましたが、私はAstriarchのSilverlightバージョンをオープンソースにしました。それでも興味がある場合は、githubからソースコードをダウンロードできます:github.com/mpalmerlee/Astriarch/tree/Silverlight
Matt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.