コードのどこがおかしいかわかりません・・・
#include "DxLib.h"
#define XX = 16;
#define YY = 16;
typedef struct//自分
{
//X座標、Y座標、画像、移動向き移動フラグ、ヒットポイント
int posX , posY , img , muki , flag , hp;
}ch_t;
typedef struct //味方
{
//X座標、Y座標、画像、、移動向き移動フラグ、ヒットポイント
int posX , posY , img ,muki , flag , hp;
}mate_t;
typedef struct//障害物
{
//X座標、Y座標、画像
int posX , posY ,img ;
}bar_t;
typedef struct//敵
{
//X座標、Y座標、画像、移動フラグ、移動向き,
int posX , posY , img , flag , muki;
}enem_t;
int stage[40][30] =
{
// ↓ 15 ↓
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//10
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//20
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//30
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},//40
};
/*void CBcalc(int flag)
{
}*/
int AbleToGo(int x,int y,int muki)
{
//進めるかを判定する
if(muki==0)//上向きなら
if(stage[y/16-1][x/16] == 1)//進めるか判定(0ならすすめる、0以上は障害物など)
return 1;//エラー
if(muki==1)//左向きなら
if(stage[y/16][x/16-1] == 1)
return 1;
if(muki==2)//下向きなら
if(stage[y/16+1][x/16] == 1)
return 1;
if(muki==3)//右向きなら
if(stage[y/16][x/16+1] == 1)
return 1;
return 0;//正常
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
char Key[256];//キー
int image[9];//画像配列
int Simg;//ステージ画像(今回は草原)
int bX = GetRand(29);//障害物で使う
int bY = GetRand(39);//障害物で使う
//各構造体
ch_t ch[4];
mate_t mate[2];
enem_t enem;
bar_t bar[2];
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph("obj.png" , 9 , 3 , 3 , 16 , 16 , image);//画像を分割してimage配列に保存
//Simgにステージ画像の保存
Simg = LoadGraph("stage.png");
//自分画像(4体は面倒なのでとりあえず1体でデモ)
ch[0].img = image[0];
ch[1].img = image[1];
ch[2].img = image[2];
ch[3].img = image[3];
//敵画像
mate[0].img = image[5];
mate[1].img = image[6];
//敵画像
enem.img = image[7];
//障害物画像
bar[0].img = image[8];
bar[1].img = image[9];
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
DrawGraph(0 , 0 , Simg , TRUE);//背景画像描画
int cr = GetColor(0 , 0 , 0);//色取得
//線の描画
for(int v = 0 ; v <= 640 ; v+=16)
{
DrawLine(0 , v , 480 , v , cr);
}
for(int v = 0 ; v <= 480 ; v+=16)
{
DrawLine(v , 0 , v , 640 , cr);
}
//自分たち初期位置
for(int i = 1 ; i<=4 ; i++)
{
ch[i-1].posX = 80*i;
ch[i-1].posY = 400;
DrawGraph(ch[i-1].posX , ch[i-1].posY , ch[i-1].img , TRUE);
stage[ch[i-1].posY/16][ch[i-1].posX/16] = 1;//配置された位置を「1」にする。
}
//障害物初期位置
for(int s = 0 ; s <= 3 ; s++)
{
/*if(stage[bY][bX] == 0)
{*/
//障害物をランダムで置く(計算的に必ずすべてがstage上に置かれるわけではないので注意)
DrawGraph(bX*16 , bY*16 , bar[0].img , TRUE);
DrawGraph(bX*16 , bY*16 , bar[1].img , TRUE);
stage[bY][bY] = 1;//その部分を「1」にする
//}
s++;
}
//自分移動
if(ch[0].posX % 16 == 0 && ch[0].posY % 16 == 0 )//座標を16で割り切れたら入力可能
{
ch[0].flag = 1;//移動できるフラグを立てる
if(Key[KEY_INPUT_UP] == 1)
{
//上向きフラグを立てる
ch[0].muki =0;
//自分の居る場所の値を「0」(何もない)にする
stage[ch[0].posY/16][ch[0].posX/16] = 0;
}
else if(Key[KEY_INPUT_LEFT] == 1)
{
//左向きフラグを立てる
ch[0].muki =1;
//自分の居る場所の値を「0」(何もない)にする
stage[ch[0].posY/16][ch[0].posX/16] = 0;
}
else if(Key[KEY_INPUT_DOWN] == 1)
{
//下向きフラグを立てる
ch[0].muki =2;
//自分の居る場所の値を「0」(何もない)にする
stage[ch[0].posY/16][ch[0].posX/16] = 0;
}
else if(Key[KEY_INPUT_RIGHT] == 1)
{
//右向きフラグを立てる
ch[0].muki =3;
//自分の居る場所の値を「0」(何もない)にする
stage[ch[0].posY/16][ch[0].posX/16] = 0;
}
else
ch[0].flag = 0;//上記以外なら歩かないフラグ
if(ch[0].flag == 1)//移動フラグが立っているけど・・
if(AbleToGo(ch[0].posX , ch[0].posY , ch[0].muki) == 1)//行き先が無理なら・・・
ch[0].flag = 0;//歩かないフラグを立てる!!
}
//移動フラグが立っていたら
if(ch[0].flag == 1)
{
if(ch[0].muki == 0)//上向きならY座標を16減らす(1つ上にする)(画像が16x16だから)
{
ch[0].posY = ch[0].posY - 16;
//進んだ位置を「1」(何かある)にする
stage[ch[0].posY/16][ch[0].posX/16] = 1;
}
else if(ch[0].muki == 1)//左向きならX座標を16減らす(1つ左にする)
{
ch[0].posX = ch[0].posX - 16;
//進んだ位置を「1」(何かある)にする
stage[ch[0].posY/16][ch[0].posX/16] = 1;
}
else if(ch[0].muki == 2)//下向きならY座標を16増やす(1つ下にする)
{
ch[0].posY = ch[0].posY + 16;
//進んだ位置を「1」(何かある)にする
stage[ch[0].posY/16][ch[0].posX/16] = 1;
}
else if(ch[0].muki == 3)//右向きならX座標を16増やす(1つ右にする)
{
ch[0].posX = ch[0].posX + 16;
//進んだ位置を「1」(何かある)にする
stage[ch[0].posY/16][ch[0].posX/16] = 1;
}
}
ScreenFlip();
}
DxLib_End();
return 0;
}自キャラ4体の表示
背景の表示
ラインを引いて16x16のマスを作成
現段階でやりたいけどできてないこと
障害物の配置(木と岩の二つをランダムに配置x3回のループで計6個(各3個ずつ)配置したいのですが現段階では0x0(左上)に1つ木(画像)が置いてあるだけです)
また、障害物初期位置のif文をコメントアウトからはずすと描画されなくなります。
自キャラの移動、4体描画していますが対象は今のところ1体です→ch[0]
コードのどこがおかしいかわかりません・・・・
ご指摘お願いします。