なぜかあたり判定が付かない・・・
Posted: 2015年1月02日(金) 13:48
#include <DxLib.h>
#include <cmath>
void Plminus(void) {
DrawString(10,10,"Plminus",GetColor(255,255,255));
}
char Key[256];
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) {
if(ChangeWindowMode(TRUE)!=DX_CHANGESCREEN_OK || DxLib_Init()==-1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
int sw,sh,cbd;
GetScreenState(&sw,&sh,&cbd);
const int SHOT_MAX = 10000;
double plx = 320;
double ply = 400;
double HIT_W = 20;
double HIT_H = 30;
static double x[SHOT_MAX];
static double y[SHOT_MAX];
static double dx[SHOT_MAX];
static double dy[SHOT_MAX];
static int shot[SHOT_MAX];
double plspeed = 3; // ピクセル毎フレーム
int kankaku = 4; // フレーム
double speed = 0.5; // ピクセル毎フレーム
double syuki =131; // フレーム
int count = 0;
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(Key) && !Key[KEY_INPUT_ESCAPE]) {
// 玉を出す
if(count%kankaku==0) {
for(int i=0;i<SHOT_MAX;i++) {
if(shot[i]==0) {
shot[i]=1;
x[i]=150;
y[i]=150;
dx[i]=speed*cos(2*3.1415926535897932384626433*count/syuki);
dy[i]=speed*sin(2*3.1415926535897932384626433*count/syuki);
break;
}
}
}
count++;
// 自機を移動する
if(plx-HIT_W>plspeed && Key[KEY_INPUT_LEFT])plx-=plspeed;
if(ply-HIT_H>plspeed && Key[KEY_INPUT_UP])ply-=plspeed;
if(plx+HIT_W<sw-plspeed && Key[KEY_INPUT_RIGHT])plx+=plspeed;
if(ply+HIT_H<sh-plspeed && Key[KEY_INPUT_DOWN])ply+=plspeed;
// 自機を描画する
DrawBox(plx-HIT_W,ply-HIT_H,plx+HIT_W,ply+HIT_H,GetColor(255,0,0),FALSE);
// 玉を処理する
for(int i=0;i<SHOT_MAX;i++) {
// 移動と描画
if(shot[i]!=0) {
x[i]+=dx[i];
y[i]+=dy[i];
DrawLine(x[i]-5,y[i]-5,x[i]+5,y[i]+5,GetColor(0,255,0));
DrawLine(x[i]+5,y[i]-5,x[i]-5,y[i]+5,GetColor(0,255,0));
if(x[i]<-10 || x[i]>sw+10 || y[i]<-10 || y[i]>sh+10)shot[i]=0;
}
// 当たり判定
if(shot[i]==1){ //もしi番目のショットが放たれているなら
if(plx+HIT_W>x[i]&&plx-HIT_W<x[i]&&ply+HIT_H>y[i]&&ply-HIT_H<y[i]){ //あたり判定(何でできないwww)
Plminus();
}
}
}
ScreenFlip();
}
DxLib_End();
return 0;
}