一度通ったマスを通れないようにする
赤マスでやったときと同じような条件をつけ、黄マスには移動できないようにすれば良いです。今回は記述を書き足すだけでなく、if文をまとめています。
- game.cppのMovePlayerに黄マスを通れないように記述を追加
void MovePlayer(){ if( Key[KEY_INPUT_RIGHT] == 1 ){ // 右が押されたら Player.x++; // x座標を増やす if( Player.x == 8 || Bord[Player.y][Player.x].Kind==1 || Bord[Player.y][Player.x].Kind==3 ) Player.x--; // 戻す Bord[Player.y][Player.x].Kind = 3; // 識別番号を書き換え } if( Key[KEY_INPUT_LEFT] == 1 ){ // 左が押されたら Player.x--; // x座標を減らす if( Player.x==-1 || Bord[Player.y][Player.x].Kind==1 || Bord[Player.y][Player.x].Kind==3 ) Player.x++; // 戻す Bord[Player.y][Player.x].Kind = 3; // 識別番号を書き換え } if( Key[KEY_INPUT_DOWN] == 1 ){ // 下が押されたら Player.y++; // y座標を減らす if( Player.y==8 || Bord[Player.y][Player.x].Kind==1 || Bord[Player.y][Player.x].Kind==3 ) Player.y--; // 戻す Bord[Player.y][Player.x].Kind = 3; // 識別番号を書き換え } if( Key[KEY_INPUT_UP] == 1 ){ // 上が押されたら Player.y--; // y座標を増やす if( Player.y==-1 || Bord[Player.y][Player.x].Kind==1 || Bord[Player.y][Player.x].Kind==3) Player.y++; // 戻す Bord[Player.y][Player.x].Kind = 3; // 識別番号を書き換え } }
で、問題に気づきました。最初に移動したとき、初期位置である青マスが黄マスに上書きされません。移動でそのマスに乗ることが黄マスになる条件であるためです。そこで、青マスは移動して乗ることが出来ないマスとして扱いことにしました。全ての薄緑のマスを黄色にすることをクリア条件とします。
では、青マスに乗れないようにする処理を書き足したいと思います。ここで考えてみましょう。移動して乗ることが出来るマスは薄緑だけだということが分かります。つまり、移動しようとしたマスが薄緑以外なら戻すという処理にすればいいということが分かります。では書き換えてみましょう。
では、青マスに乗れないようにする処理を書き足したいと思います。ここで考えてみましょう。移動して乗ることが出来るマスは薄緑だけだということが分かります。つまり、移動しようとしたマスが薄緑以外なら戻すという処理にすればいいということが分かります。では書き換えてみましょう。
game.cpp
... void MovePlayer(){ if( Key[KEY_INPUT_RIGHT] == 1 ){ // 右が押されたら Player.x++; // x座標を増やす if( Player.x == 8 || Bord[Player.y][Player.x].Kind!=0) Player.x--; // 戻す Bord[Player.y][Player.x].Kind = 3; // 識別番号を書き換え } if( Key[KEY_INPUT_LEFT] == 1 ){ // 左が押されたら Player.x--; // x座標を減らす if( Player.x==-1 || Bord[Player.y][Player.x].Kind!=0) Player.x++; // 戻す Bord[Player.y][Player.x].Kind = 3; // 識別番号を書き換え } if( Key[KEY_INPUT_DOWN] == 1 ){ // 下が押されたら Player.y++; // y座標を減らす if( Player.y==8 || Bord[Player.y][Player.x].Kind!=0) Player.y--; // 戻す Bord[Player.y][Player.x].Kind = 3; // 識別番号を書き換え } if( Key[KEY_INPUT_UP] == 1 ){ // 上が押されたら Player.y--; // y座標を増やす if( Player.y==-1 || Bord[Player.y][Player.x].Kind!=0) Player.y++; // 戻す Bord[Player.y][Player.x].Kind = 3; // 識別番号を書き換え } } ...
バグを直すために書き換えたのに、すっきりしましたね。