コード:
#include "DxLib.h"
#define MAP_SIZE 32 // マップチップ一つのドットサイズ
#define MAP_WIDTH 20 // マップの幅
#define MAP_HEIGHT 15 // マップの縦長さ
int Pls(); //プレイや-の初期化
int Mps(); //マップの初期化
int Chractermove(); //キャラの移動処理
int MapDraw(); //マップの画像
int mapc[MAP_HEIGHT][MAP_WIDTH]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,1,1,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,1,1,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,1,1,1,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
struct MAP
{
int mhandle;
int mscrx,mscry;
};
struct PLAYER
{
int px,py; //キャラの座標
int movex,movey; //移動した距離
int dm; //ダメージ
int hp; //主人公のライフ
int mp; //マジックポイント
int at; //攻撃力
int df; //防御力
int sp; //歩く速さ
int mwalkx,mwalky; //歩く方向
int xflag,yflag; //縦横のいどうのフラグ
float xp; //経験値
int lv; //レベル
int mflag; //歩ける場所か?
int kflag; //攻撃したか?
int handle; //キャラの画像
int state; //キャラの状態
int scrx,scry; //スクロール
int mscrx,mscry;
};
PLAYER pl;
MAP mp;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
Pls();
Mps();
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
while( ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0 )
{
ClearDrawScreen();
switch( pl.state ){
case 0: //移動できる
MapDraw();
Chractermove();
break;
}
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End();
return 0;
}
int Pls()
{
pl.px=300;
pl.py=150;
pl.hp=100;
pl.lv=1;
pl.at=1;
pl.df=1;
pl.sp=2;
pl.handle=LoadGraph( "キャラ.png" ) ;
return 0;
}
int Mps()
{
mp.mhandle=LoadGraph( "マップチップ.png" ) ;
return 0;
}
int MapDraw()
{
int i,j;
for(i=0;i<MAP_WIDTH;i++)
{
for(j=0;j<MAP_HEIGHT;j++)
{
if(mapc[j][i]==0)DrawGraph(pl.scrx+MAP_SIZE*i,pl.scry+MAP_SIZE*j,mp.mhandle,TRUE);
}
}
return 0;
}
int Chractermove()
{
int key;
key=CheckHitKeyAll();
pl.movex=pl.px;
pl.movey=pl.py;
pl.mscrx=pl.scrx;
pl.mscry=pl.scry;
if(CheckHitKey(KEY_INPUT_UP)==1)pl.mwalky=0,pl.yflag=1;//上に移動
if(CheckHitKey(KEY_INPUT_DOWN)==1)pl.mwalky=1,pl.yflag=1;//下に移動
if(CheckHitKey(KEY_INPUT_LEFT)==1)pl.mwalkx=0,pl.xflag=1;//左に移動
if(CheckHitKey(KEY_INPUT_RIGHT)==1)pl.mwalkx=1,pl.xflag=1;//右に移動
if( key != 0)
{
if(pl.yflag==1)
{
if(pl.mwalky==0)/*pl.movey-=pl.sp,*/pl.mscry += pl.sp;//上に移動
if(pl.mwalky==1)/*pl.movey+=pl.sp,*/pl.mscry -= pl.sp;//下に移動
pl.yflag=0;
}
if(pl.xflag==1)
{
if(pl.mwalkx==0)/*pl.movex-=pl.sp,*/pl.mscrx += pl.sp;//左に移動
if(pl.mwalkx==1)/*pl.movex+=pl.sp,*/pl.mscrx -= pl.sp;//右に移動
pl.xflag=0;
}
}
if(mapc[(pl.movey-pl.mscry)/32][(pl.movex-pl.mscrx)/32]==0 && mapc[(pl.movey+32-1-pl.mscry)/32][(pl.movex-pl.mscrx)/32]==0
&& mapc[(pl.movey+32-1-pl.mscry)/32][(pl.movex+25-1-pl.mscrx)/32]==0 && mapc[(pl.movey-pl.mscry)/32][(pl.movex+25-1-pl.mscrx)/32]==0)
{
//pl.px=pl.movex; //x座標の更新
//pl.py=pl.movey; //y座標の更新
pl.scrx=pl.mscrx;
pl.scry=pl.mscry;
}
DrawGraph(pl.px,pl.py,pl.handle,TRUE);
return 0;
}