プレイヤーの初期位置をステージに合わせる
青マスの上からゲームを始めようというものです。
ここではfor文でBord構造体配列をしらべ、2(青マス)が見つかったらプレイヤーの初期位置をそこにするというものです。この処理はInitPlayerに書きます。この文章を書いてるときに私が実際に遭遇したバグも紹介します。
ここではfor文でBord構造体配列をしらべ、2(青マス)が見つかったらプレイヤーの初期位置をそこにするというものです。この処理はInitPlayerに書きます。この文章を書いてるときに私が実際に遭遇したバグも紹介します。
- game.cppのInitPlayer関数にステージ情報を調べて初期位置を決める処理を追加
game.cpp
... void InitPlayer(){ for(int y=0 ; y<8 ; y++){ for(int x=0 ; x<8 ; x++){ if( Bord[y][x].Kind == 2 ){ // 開始位置が見つかったら Player.x = x; // 座標を指定 Player.y = y;
printfDx("(%d,%d)からスタートします\n",x,y);
} } } } ...
さて、実行してみましょう。どうですか?初期位置が(0,0)のままだと思います。printfDx関数の文字も表示されません。原因はTitle関数にありました。
title.cpp
... void Title(){ ... if( Key[KEY_INPUT_Z] == 1 ){ // Zキーが押されたらゲームを始める GameState = 1; InitPlayer(); // プレイヤーの初期化をする LoadStage(); // ステージ情報を読み込む } } ...
if文のブロックの関数の呼び出す順番が悪かったのです。先にInitPlayer関数を呼び出してもまだBord構造体配列にはステージ情報が入っていません。つまり、2(青マス)が見つからないのです。そこの順番を書き直してやりましょう。
title.cpp
... void Title(){ ... if( Key[KEY_INPUT_Z] == 1 ){ // Zキーが押されたらゲームを始める GameState = 1; LoadStage(); // ステージ情報を読み込む InitPlayer(); // プレイヤーの初期化をする } } ...
これで解決しました。