右上に行くとゲームが始まるようになっています。
描画は移動不可能な場所を白い四角で、自キャラの位置を緑の四角で表示します。
ちゃんとした描画にはチップ素材が必要となります。 今回の内容はゲームプログラミングの館19~24章を参考にして作っています。
mura.cppを追加。
#include "../include/GV.h"
int mura_count;//初期化とオープニング、村人の移動などに使用する
//判定用データ 0:通過可能 1:通過不可 2:ノーマルスタート
int mura_map_data[17][20]={
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1},
{1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1},
{1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1},
{1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1},
{1,0,0,0,1,1,1,1,0,0,0,1,0,1,1,0,0,0,0,1},
{1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1},
{1,0,0,0,1,0,1,1,0,0,0,0,1,1,1,1,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};
//村での自キャラデータ
struct{
int x,y;
int muki;
int shift;
}m_ch;
//初期化
void mura_ini(){
m_ch.muki=0;
m_ch.x=32*9;
m_ch.y=32*8;
}
//自キャラ移動制御
void m_ch_move(){
if(m_ch.x%32==0 && m_ch.y%32==0){
if(mura_map_data[m_ch.y/32][m_ch.x/32]==2){
mura_count=-1;
practice=0;
stage=0;
boss.boss_num=0;
boss.knd=-1;//enter_bossで1足されるため
func_state=GAME_INI;
return;
}
if(CheckStatePad(configpad.slow)){
m_ch.shift=2;
}
else m_ch.shift=1;
if(CheckStatePad(configpad.right)){
if(mura_map_data[m_ch.y/32][m_ch.x/32+1]!=1){
m_ch.x+=2*m_ch.shift;
m_ch.muki=0;
}
}
else if(CheckStatePad(configpad.down)){
if(mura_map_data[m_ch.y/32+1][m_ch.x/32]!=1){
m_ch.y+=2*m_ch.shift;
m_ch.muki=1;
}
}
else if(CheckStatePad(configpad.left)){
if(mura_map_data[m_ch.y/32][m_ch.x/32-1]!=1){
m_ch.x-=2*m_ch.shift;
m_ch.muki=2;
}
}
else if(CheckStatePad(configpad.up)){
if(mura_map_data[m_ch.y/32-1][m_ch.x/32]!=1){
m_ch.y-=2*m_ch.shift;
m_ch.muki=3;
}
}
}
else{
switch(m_ch.muki){
case 0:
m_ch.x+=2*m_ch.shift;
break;
case 1:
m_ch.y+=2*m_ch.shift;
break;
case 2:
m_ch.x-=2*m_ch.shift;
break;
case 3:
m_ch.y-=2*m_ch.shift;
break;
}
}
}
//村の描画
void mura_graph(){
int i,j;
for(i=0;i<17;i++){
for(j=0;j<20;j++){
if(mura_map_data[i][j]==1){
DrawBox(32*j,32*(i-1),32*(j+1),32*i,color[0],TRUE);
}
}
}
DrawBox(m_ch.x,m_ch.y-32,m_ch.x+32,m_ch.y,color[3],TRUE);
}
void mura_main(){
if(mura_count==0) mura_ini();
m_ch_move();
mura_graph();
mura_count++;
}