DXライブラリのデバッグ
Posted: 2017年1月24日(火) 11:42
初めて質問します
今学校の課題でシューティングゲームを作っているんですが文字が表示されるところまではいいんですがキーを押した後に強制終了してしまいます
原因がわからず困っているので教えていただけないでしょうか
ソースコードは以下の通りです
#include"DxLib.h"
#define shot 20
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1)
{
return -1;
}
int ballx,bally,ballgraph;
int sikakux,sikakuy,sikakumuki,sikakugraph;
int shotx[shot],shoty[shot],shotflag[shot],shotgraph;
int sikakuw,sikakuh,shotw,shoth;
int shotbflag;
int i;
unsigned int Crb,Crs,Crsh;
SetGraphMode(640,480,16);
SetDrawScreen(DX_SCREEN_BACK);
Crb=GetColor(0,0,255);
ballgraph=DrawCircle(0,0,30,30,Crb,TRUE);
ballx=288;bally=400;
Crs=GetColor(255,0,0);
sikakugraph=DrawBox(0,0,30,30,Crs,TRUE);
sikakux=288;sikakuy=400;
Crsh=GetColor(255,255,255);
shotgraph=DrawCircle(0,0,10,10,Crsh,TRUE);
DrawString(250,208,"please any key",Crsh);
ScreenFlip();
WaitKey();
for(i=0;i<shot;i++)
{
shotflag=0;
}
shotbflag=0;
sikakumuki=1;
GetGraphSize(shotgraph,&shotw,&shoth);
GetGraphSize(sikakugraph,&sikakuw,&sikakuh);
while(1)
{
ClearDrawScreen();
{
if(CheckHitKey(KEY_INPUT_UP)==1)bally -= 3;
if(CheckHitKey(KEY_INPUT_DOWN)==1)bally += 3;
if(CheckHitKey(KEY_INPUT_LEFT)==1)ballx -= 3;
if(CheckHitKey(KEY_INPUT_RIGHT)==1)ballx += 3;
if(CheckHitKey(KEY_INPUT_SPACE)==1)
{
if(shotbflag==0)
{
for(i=0;i<shot;i++)
{
if(shotflag==0)
{
int bw,bh,sw,sh;
GetGraphSize(ballgraph,&bw,&bh);
GetGraphSize(shotgraph,&sw,&sh);
shotx=(bw-sw)/2+ballx;
shoty=(bh-sh)/2+bally;
shotflag=1;
break;
}
}
}
shotbflag=1;
}
else
{
shotbflag=0;
}
if(ballx<0)ballx=0;
if(ballx>640-64)ballx=640-64;
if(bally<0)bally=0;
if(bally>480-64)bally=480-64;
DrawGraph(ballx,bally,ballgraph,FALSE);
}
for(i=0;i<shot;i++)
{
if(shotflag==1)
{
shoty-=16;
if(shoty<-80)
{
shotflag=0;
}
DrawGraph(shotx,shoty[i],shotgraph,FALSE);
}
}
{
if(sikakumuki==1)sikakux+=3;
if(sikakumuki==0)sikakux-=3;
if(sikakux>576)
{
sikakux=576;
sikakumuki=0;
}
if(sikakux<0)
{
sikakux=0;
sikakumuki=1;
}
DrawGraph(sikakux,sikakuy,sikakugraph,FALSE);
}
for(i=0;i<shot;i++)
{
if(shotflag[i]==1)
{
if( ( ( shotx[i] > sikakux && shotx[i] < sikakux + sikakuw ) ||
( sikakux > shotx[i] && sikakux < shotx[i] + shotw ) ) &&
( ( shoty[i] > sikakuy && shoty[i] < sikakuy + sikakuh ) ||
( sikakuy > shoty[i] && sikakuy < shoty[i] + shoth ) ) )
{
shotflag[i]=0;
}
}
}
ScreenFlip();
if(ProcessMessage()<1)
{
break;
}
if(CheckHitKey(KEY_INPUT_ESCAPE))
{
break;
}
}
DxLib_End();
return 0;
}
今学校の課題でシューティングゲームを作っているんですが文字が表示されるところまではいいんですがキーを押した後に強制終了してしまいます
原因がわからず困っているので教えていただけないでしょうか
ソースコードは以下の通りです
#include"DxLib.h"
#define shot 20
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1)
{
return -1;
}
int ballx,bally,ballgraph;
int sikakux,sikakuy,sikakumuki,sikakugraph;
int shotx[shot],shoty[shot],shotflag[shot],shotgraph;
int sikakuw,sikakuh,shotw,shoth;
int shotbflag;
int i;
unsigned int Crb,Crs,Crsh;
SetGraphMode(640,480,16);
SetDrawScreen(DX_SCREEN_BACK);
Crb=GetColor(0,0,255);
ballgraph=DrawCircle(0,0,30,30,Crb,TRUE);
ballx=288;bally=400;
Crs=GetColor(255,0,0);
sikakugraph=DrawBox(0,0,30,30,Crs,TRUE);
sikakux=288;sikakuy=400;
Crsh=GetColor(255,255,255);
shotgraph=DrawCircle(0,0,10,10,Crsh,TRUE);
DrawString(250,208,"please any key",Crsh);
ScreenFlip();
WaitKey();
for(i=0;i<shot;i++)
{
shotflag=0;
}
shotbflag=0;
sikakumuki=1;
GetGraphSize(shotgraph,&shotw,&shoth);
GetGraphSize(sikakugraph,&sikakuw,&sikakuh);
while(1)
{
ClearDrawScreen();
{
if(CheckHitKey(KEY_INPUT_UP)==1)bally -= 3;
if(CheckHitKey(KEY_INPUT_DOWN)==1)bally += 3;
if(CheckHitKey(KEY_INPUT_LEFT)==1)ballx -= 3;
if(CheckHitKey(KEY_INPUT_RIGHT)==1)ballx += 3;
if(CheckHitKey(KEY_INPUT_SPACE)==1)
{
if(shotbflag==0)
{
for(i=0;i<shot;i++)
{
if(shotflag==0)
{
int bw,bh,sw,sh;
GetGraphSize(ballgraph,&bw,&bh);
GetGraphSize(shotgraph,&sw,&sh);
shotx=(bw-sw)/2+ballx;
shoty=(bh-sh)/2+bally;
shotflag=1;
break;
}
}
}
shotbflag=1;
}
else
{
shotbflag=0;
}
if(ballx<0)ballx=0;
if(ballx>640-64)ballx=640-64;
if(bally<0)bally=0;
if(bally>480-64)bally=480-64;
DrawGraph(ballx,bally,ballgraph,FALSE);
}
for(i=0;i<shot;i++)
{
if(shotflag==1)
{
shoty-=16;
if(shoty<-80)
{
shotflag=0;
}
DrawGraph(shotx,shoty[i],shotgraph,FALSE);
}
}
{
if(sikakumuki==1)sikakux+=3;
if(sikakumuki==0)sikakux-=3;
if(sikakux>576)
{
sikakux=576;
sikakumuki=0;
}
if(sikakux<0)
{
sikakux=0;
sikakumuki=1;
}
DrawGraph(sikakux,sikakuy,sikakugraph,FALSE);
}
for(i=0;i<shot;i++)
{
if(shotflag[i]==1)
{
if( ( ( shotx[i] > sikakux && shotx[i] < sikakux + sikakuw ) ||
( sikakux > shotx[i] && sikakux < shotx[i] + shotw ) ) &&
( ( shoty[i] > sikakuy && shoty[i] < sikakuy + sikakuh ) ||
( sikakuy > shoty[i] && sikakuy < shoty[i] + shoth ) ) )
{
shotflag[i]=0;
}
}
}
ScreenFlip();
if(ProcessMessage()<1)
{
break;
}
if(CheckHitKey(KEY_INPUT_ESCAPE))
{
break;
}
}
DxLib_End();
return 0;
}