おめでとう画面からタイトル画面の遷移
クリア画面までは遷移するようになったので、今度はクリア画面から、タイトル画面への遷移を作る。
これは簡単だよね。
クリア画面が出ている間に、画面をクリックしたらタイトル画面へ遷移すればよい。
んで、ついでにゲームのいろんなものを初期化してもう一度ゲームができるようにする。
これは、途中で作ったInitGameがやってくれるから呼び出すといいよ。
んで、InitGameにはボードを渡さなければいけないので、ClearUpdateの引数がvoidだったのを変更してBoard&を渡すようにする。
Listing. 1: クリア画面からタイトルへの遷移
//ボードの初期化を入れるために引数を追加してあるので注意 void ClearUpdate(Board& _board) { if (MouseL.down()) { stateをタイトル画面のステートに変更; ゲームの初期化を呼び出す; } }
ていうかここまで来て気づいたけど、乱数の初期化するの忘れてた。。。
なんかメインの適当なところで、初期化しといてください。
同じ問題しか出なくなっちゃいます。(そもそも、初めに動かせるところ2か所しかないから、10回程度だと同じのが何回も出る可能性が結構高い。。。)
void Main() { //タイトル画面とスタートボタンのフォント(ンでそのままほかのシーンに使いまわし) FontAsset::Register(U"TITLE_FONT", FontMethod::SDF, 40, Typeface::Bold); FontAsset::Register(U"BUTTON_FONT", FontMethod::SDF, 20, Typeface::Mplus_Heavy); FontAsset::Register(U"TILE_FONT", FontMethod::SDF, 80, Typeface::Bold); AudioAsset::Register(U"CLEAR_SND", U"nc245412.wav"); //Window::Resize(WSIZE);->InitGameへ srand(static_cast<unsigned int>(time(nullptr))); Board myboard; InitGame(myboard); //std::swap(myboard.tile[2][2], myboard.tile[3][3]); while (System::Update()) { switch (st
実行結果
これでゲームとして一周することはできたね。
あとは、
まずやってほしいことは、関数とヘッダファイルの分割です。
- Main.cpp—Main,○○Update, ○○Draw
- board.h, board.cpp ボードに関する関数の宣言と定義
追加要素として、
- BGMやSEの追加
- スライドのアニメーション
- タイトル画面や、おめでとう画面のエフェクト追加
- クリア時にすぐに画面が遷移してしまうので、ファンファーレなどを鳴らしてから移行
- クリア画面でマウスをクリックするとすぐに移行してしまうので、少し画面見ないと移行しないように工夫
- レベル設定の追加
- などなど
改良できる点はたくさんあります。
いろいろやってみよう!
まず、小さいゲームをゲームの形になるまで作って、それを改良していく。それを繰り返していくことが大事だよ!