ゲームの流れの実現と状態間のメッセージのやり取り

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
moba
記事: 82
登録日時: 9年前

ゲームの流れの実現と状態間のメッセージのやり取り

#1

投稿記事 by moba » 9年前

 お世話になります_(._.)_
 僕は誤解の塊で、手間がかかると思います…。

 ゲームの「流れ」をなるべく状態遷移で実現したいです。そのための状態間のメッセージのやり取りで困っています。C++とVisual C++ Express 2010 Editonを使用しています。
 スタック式のステートマシンを使っています。このステートマシンは、一番最後にPushされた状態のUpdate()を毎フレーム呼びます。
 例えば、ドラクエ式のターン制の実装戦闘を考えています。Actorが全員用意されたとして、TurnProcess状態から始めます。プレイヤ(NeedsInput()の返り値がtrueのActor)の行動順が回ってきたら、CommandSelection状態をPushします。CommandSelection状態では、Commandを選択したら、自身をPopします。このとき、選択したCommandを返す上手い方法が思いつきません。何か定石はないでしょうか。

問題点

・どうやって選択したCommandをTurnProcess状態に伝えるか
・キー入力や数フレーム間の処理が必要になった度に、毎回状態を作らなければならないのか
(Animation状態など また、WaitingSelection状態も、ワールドマップからメニューを開いたときなど、複数必要になると思います)


考えた方法

1.引数で返してもらう

・TurnProcess内の状態を、TurnProcessとWaitingSelectionに分けます。
・毎フレーム、WaitingSelection状態ならば、TurnProcess::Update()からCommandSelection::Update()を呼びます
・引数でActionを返してもらいます

問題点

・CommandSelection状態の中で、さらにItemSelection、ItemCommandSelection状態を積みます。返し値で返すためにUpdate()からUpdate()を呼び、さらにUpdate()を呼ぶことに違和感があります

2.Observerパターンで選択結果を通知してもらう

問題点

・キー入力や数フレーム間の処理が必要な場合、毎回イベントとリスナを作らなければなりません

moba
記事: 82
登録日時: 9年前

Re: ゲームの流れの実現と状態間のメッセージのやり取り

#2

投稿記事 by moba » 9年前

すみません。自分で思いつきました。

3.渡してもらったインタフェイスでActionを返す

確信は持てませんが、これならいい気がしてきました。質問しておいてすみません…一応解決にしました。

閉鎖

“C言語何でも質問掲示板” へ戻る