ステージ情報によってマスの色を変える
大改造はいります。今はまだ実装しませんが、ステージ情報というものは現在進行形でプレイしているステージの情報とメモリに保存されているステージ情報というものがあります。前者はプレイしているのでプレイヤーが移動することでどんどん内部の値が書き換えられます。後者はロードされるだけで書き換えられることはありません。書き換えられてしまったらプレイするたびにステージが別のものになってしまいます。この違いは重要ですのでよく覚えておきましょう。
今回はプレイ中のステージ情報をグローバル指定したマス構造体配列に格納し、その配列の値を書き換えていくものとします。ステージ情報をロードするのはゲームを始めるとき、すなわちタイトルからゲームに移動するときとします。
今回はプレイ中のステージ情報をグローバル指定したマス構造体配列に格納し、その配列の値を書き換えていくものとします。ステージ情報をロードするのはゲームを始めるとき、すなわちタイトルからゲームに移動するときとします。
- 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(); // ステージ情報を読み込む
}
...
これでマスの色が変えられるようになりました。