2012年4月25日水曜日

( Game ( C++ ) )状態遷移について

新しくゲームに関するページを作成しました。対象読者は「ゲームプログラマ!?はっ...無理無理。興味もねぇし。でもまぁ技術には興味ある。」というかたを想定しています。わたしもゲームプログラマにはまったく興味がありません。実力的にも無理でしょうしね。公式をプログラムに変換とか、どの公式を利用して画面にでっちあげるかとか、私にはそんな発想力ありません。あの世界では数学、物理にある程度強くないと最前線ではやっていけない感じがします。

まぁでも中で何をやっているのかってすごく興味があるんですよね。このフワッとしたキャラ移動どうやったとか。
また、ゲームの画像移動になれておくと、通常のアプリケーションで臆することなく動的な画面効果をフフンとだせるようにもなるんじゃないかと思うんですよね。んでwindows8とか巣魔ー戸電話とかこういうの多用してるっぽいじゃないですか?あのヌルヌル現在の画面が移動していくみたいなアレね。私自身は「あんなもんただの○ソだろ。意味あんのか?とりあえず○indows8はアンチエ○リアス先かけろ」なんて思っていますが、時代には逆らえません。

...とまぁ長々と書きましたが、とにもかくにもゲーム関連の記事やっていこうと思います。


本日はシューティングゲームを作った際、最もコードが複雑化した部分「状態遷移」について書いていこうと思います。
「状態遷移!?そんなとこで詰まってんの?人生大丈夫?」そう思った方、実際作ってみてください。普段からかなり勉強されているかたは難なくクリアできるでしょう。しかし、そうではない方はかなり苦戦するはずです。

状態遷移の例題を提示します。
・用意する状態はタイトル、ゲームオーバー、エンディング、1Pプレイ、2Pプレイ、ポーズ画面の5つとします。
・タイトルから1Pプレイか2Pプレイに飛べます。
・1Pプレイ、2Pプレイからポーズ、ゲームオーバー 、エンディング、タイトルへ飛べるようにする。
・ゲームオーバー、エンディング後はタイトルに飛びます。
・ポーズ画面からは現在プレイ中の画面(1Por2P)にしか戻れません。 
・必ず画面には現在の状態を表す画像か文字列を表示してください。
※当たり前ですがゲームを意識して作成してください。

図示すると以下のようになります。
状態遷移の数もかなり減らし、ゲームの骨格も丸まる無視しましたので難易度的には通常のゲームよりは簡単であろうかと思いますが...まぁやってみてください。言語はなんでもかまいません。C++でもC#でもQtでもお好きなものを。

とりあえず今日はこのへんで。