ステージ情報によってマスの色を変える
大改造はいります。今はまだ実装しませんが、ステージ情報というものは現在進行形でプレイしているステージの情報とメモリに保存されているステージ情報というものがあります。前者はプレイしているのでプレイヤーが移動することでどんどん内部の値が書き換えられます。後者はロードされるだけで書き換えられることはありません。書き換えられてしまったらプレイするたびにステージが別のものになってしまいます。この違いは重要ですのでよく覚えておきましょう。
今回はプレイ中のステージ情報をグローバル指定したマス構造体配列に格納し、その配列の値を書き換えていくものとします。ステージ情報をロードするのはゲームを始めるとき、すなわちタイトルからゲームに移動するときとします。
今回はプレイ中のステージ情報をグローバル指定したマス構造体配列に格納し、その配列の値を書き換えていくものとします。ステージ情報をロードするのはゲームを始めるとき、すなわちタイトルからゲームに移動するときとします。
- main.hにLoadStage関数のプロトタイプ宣言を追加、Bord構造体配列の外部宣言を追加
- struct.hにBord構造体の定義を追加
- game.cppにBord構造体配列の本体の宣言を追加、Game関数のマスの描画の仕方を変更、LoadStage関数の定義を追加
- title.cppにLoadStage関数を呼び出すように追加
main.h
... #include"struct.h" // 構造体定義のヘッダーを読み込む extern SPlayer Player; // プレイヤー構造体 extern SBord Bord[8][8]; // マス構造体配列 void MovePlayer(); // プレイヤーを移動する void InitPlayer(); // プレイヤーを初期化する void LoadStage(); // ステージ情報を読み込む*struct.h
struct.h
struct SPlayer{ int x,y; }; struct SBord{ int Kind; };
game.cpp
... SPlayer Player; // プレイヤー構造体の本体 SBord Bord[8][8]; // マス構造体配列の本体 // ゲームの関数 // 戻り値 なし 引数 なし void Game(){ for(int y=0 ; y<8 ; y++){ for(int x=0 ; x<8 ; x++){ DrawGraph(x*32+50,y*32+100,BordGraphic[ Bord[y][x].Kind ],FALSE); } } ... } ... void MovePlayer(){...} ... void InitPlayer(){...} ... // ステージ情報をロードする void LoadStage(){ int Stage1[8][8] = { {1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,1}, {1,0,0,0,1,0,2,1}, {1,0,0,1,0,0,0,1}, {1,0,0,0,0,1,0,1}, {1,0,0,1,0,0,0,1}, {1,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1}, }; for(int y=0 ; y<8 ; y++){ for(int x=0 ; x<8 ; x++){ Bord[y][x].Kind = Stage1[y][x]; } } }
title.cpp
... void Title(){ ... if( Key[KEY_INPUT_Z] == 1 ){ // Zキーが押されたらゲームを始める GameState = 1; InitPlayer(); // プレイヤーの初期化をする LoadStage(); // ステージ情報を読み込む } ...
これでマスの色が変えられるようになりました。