コード:
#include <DxLib.h>
enum STATUS
{
STATUS_GAME_START,
STATUS_MENU,
STATUS_BATTLE_START_1,
STATUS_BATTLE_1,
STATUS_BATTLE_START_2,
STATUS_BATTLE_2,
STATUS_BATTLE_START_3,
STATUS_BATTLE_3,
STATUS_BATTLE_START_FINAL,
STATUS_BATTLE_FINAL,
STATUS_WIN,
STATUS_LOSE,
};
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}redball;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}bluecube;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}yellowpyramid;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkball;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkcube;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkpyramid;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}darkstar;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}p1_t;
typedef struct
{
int model_normal;
float x;
float y;
float speed;
float width;
float height;
int model_attack;
}enemy_t;
typedef struct
{
int model;
float x;
float y;
float z;
int back;
int BGM;
}stage_1_t;
typedef struct
{
int attack;
int special;
int shield;
int grab;
int appeal;
int up;
int down;
int right;
int left;
int jump;
int pause;
}key_t;
typedef struct
{
float x;
float y;
float z;
}camera_t;
typedef struct
{
float x;
float y;
float width;
float height;
float center_x;
float center_y;
}screen_t;
typedef struct
{
int frame_1_x;
int frame_1_y;
int frame_1_graph;
int frame_2_x;
int frame_2_y;
int frame_2_graph;
int back;
int keyflag;
int selectsound;
int chosesound;
}menu_t;
STATUS Status=STATUS_MENU;
redball rb;
bluecube bc;
yellowpyramid yp;
darkball db;
darkcube dc;
darkpyramid dp;
darkstar ds;
p1_t p1;
enemy_t enemy;
stage_1_t stage_1;
key_t key;
camera_t camera;
screen_t screen;
menu_t menu;
int bright;
float jumppower;
int moveflag;
int keyflag;
int battle_start_1;
int lose_x;
int lose_y;
int lose;
int black;
int alpha;
int counter_battle_start;
int counter_bright;
int counter_combo;
int BGM_volume;
int attack(float attack_x,float attack_y,int attack_model)
{
MV1SetPosition(attack_model,VGet(attack_x,attack_y,0.0f));
MV1DrawModel(attack_model);
return 0;
}
int attack_side(float attack_side_x,float attack_side_y,int attack_side_model)
{
MV1SetPosition(attack_side_model,VGet(attack_side_x,attack_side_y,0.0f));
MV1DrawModel(attack_side_model);
return 0;
}
void MENU()
{
DrawGraph(0,0,menu.back,FALSE);
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_1_graph,TRUE);
if(menu.keyflag==0)
{
if(menu.frame_1_x==32&&CheckHitKey(key.right))
{
menu.frame_1_x=352;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
else if(menu.frame_1_x==352&&CheckHitKey(key.right))
{
menu.frame_1_x=672;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
else if(menu.frame_1_x==352&&CheckHitKey(key.left))
{
menu.frame_1_x=32;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
else if(menu.frame_1_x==672&&CheckHitKey(key.left))
{
menu.frame_1_x=352;
PlaySoundMem(menu.selectsound,DX_PLAYTYPE_BACK);
}
if(menu.frame_1_x==32&&CheckHitKey(key.pause))
{
menu.frame_1_graph=menu.frame_2_graph;
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
PlaySoundMem(menu.chosesound,DX_PLAYTYPE_NORMAL);
p1.model_normal=rb.model_normal;
p1.x=rb.x;
p1.y=rb.y;
p1.speed=rb.speed;
p1.height=rb.height;
p1.model_attack=rb.model_attack;
Status=STATUS_BATTLE_START_1;
for(bright=255;bright>0;bright-=5)
{
SetDrawBright(bright,bright,bright);
}
}
if(menu.frame_1_x==352&&CheckHitKey(key.pause))
{
menu.frame_1_graph=menu.frame_2_graph;
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
PlaySoundMem(menu.chosesound,DX_PLAYTYPE_NORMAL);
p1.model_normal=bc.model_normal;
p1.x=bc.x;
p1.y=bc.y;
p1.speed=bc.speed;
p1.height=bc.height;
p1.model_attack=bc.model_attack;
Status=STATUS_BATTLE_START_1;
for(bright=255;bright>0;bright-=5)
{
SetDrawBright(bright,bright,bright);
}
}
if(menu.frame_1_x==672&&CheckHitKey(key.pause))
{
menu.frame_1_graph=menu.frame_2_graph;
DrawGraph(menu.frame_1_x,menu.frame_1_y,menu.frame_2_graph,TRUE);
PlaySoundMem(menu.chosesound,DX_PLAYTYPE_NORMAL);
p1.model_normal=yp.model_normal;
p1.x=yp.x;
p1.y=yp.y;
p1.speed=yp.speed;
p1.height=yp.height;
p1.model_attack=yp.model_attack;
Status=STATUS_BATTLE_START_1;
for(bright=255;bright>0;bright-=5)
{
SetDrawBright(bright,bright,bright);
}
}
}
if(CheckHitKeyAll()) menu.keyflag=1;
if(!CheckHitKeyAll()) menu.keyflag=0;
}
void BATTLE_START_1()
{
counter_battle_start++;
if(counter_battle_start<300)
{
DrawGraph(0,0,battle_start_1,FALSE);
}
else
{
Status=STATUS_BATTLE_1;
}
}
void BATTLE_1()
{
ChangeVolumeSoundMem(BGM_volume,stage_1.BGM);
SetCameraPositionAndTargetAndUpVec(VGet(camera.x,camera.y,camera.z),VGet(stage_1.x,stage_1.y,0.0f),VGet(0.0f,1.0f,0.0f));
SetLightDirection(VGet(-1.0f,-10.0f,1.0f));
if(CheckHitKey(key.right)&&CheckHitKey(key.special))
{
counter_combo++;
}
if(CheckHitKey(key.right)&&moveflag==0)
{
p1.x+=p1.speed;
}
if(CheckHitKey(key.left)&&moveflag==0)
{
p1.x-=p1.speed;
}
p1.y+=jumppower;
jumppower-=1.0f;
if(p1.y==-5400.0f&&p1.x>-1100.0f&&p1.x<1100.0f)
{
p1.y=-5400.0f;
jumppower=0.0f;
}
if(CheckHitKey(key.jump))
{
if(moveflag==0)
{
if(p1.y==-5400.0f)
{
if(keyflag==0)
{
jumppower=25.0f;
}
}
keyflag=1;
}
}
else
{
keyflag=0;
}
DrawGraph(0,0,stage_1.back,FALSE);
//DrawFormatString(0,0,GetColor(255,0,0),"%g,%g",p1.x,p1.y);
MV1SetPosition(p1.model_normal,VGet(p1.x,p1.y,0.0f));
MV1DrawModel(p1.model_normal);
//MV1SetPosition(p1.model_attack,VGet(p1.x,p1.y,0.0f));
MV1SetPosition(enemy.model_normal,VGet(enemy.x,enemy.y,0.0f));
MV1DrawModel(enemy.model_normal);
MV1SetPosition(stage_1.model,VGet(stage_1.x,stage_1.y,0.0f));
MV1DrawModel(stage_1.model);
DrawGraph(lose_x,lose_y,lose,TRUE);
if(p1.y<=-8000.0f)
{
counter_bright++;
p1.x=-1100.0f;
p1.y=-8000.0f;
if(lose_y!=0)
{
lose_y+=6;
}
if(counter_bright>=300)
{
SetDrawBlendMode(DX_BLENDMODE_ALPHA,alpha);
DrawGraph(0,0,black,FALSE);
alpha++;
BGM_volume--;
if(alpha>=255)
{
if(counter_bright>=600)
{
Status=STATUS_LOSE;
}
}
}
}
if(CheckHitKey(key.special))
{
attack(p1.x,p1.y,p1.model_attack);
moveflag=1;
}
else
{
moveflag=0;
}
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
SetGraphMode(1024,768,16);
SetWindowIconID(100);
SetMainWindowText("SolidFighters");
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
//REDBALL構造体
rb.model_normal=MV1LoadModel("data\\characters\\redball\\redball.mqo");
rb.x=-500.0f;
rb.y=-5400.0f;
rb.speed=25.0f;
rb.width=200.0f;
rb.height=200.0f;
rb.model_attack=MV1LoadModel("data\\characters\\redball\\redball_attack.mqo");
MV1SetPosition(rb.model_attack,VGet(rb.x,rb.y,0.0f));
//BLUECUBE構造体
bc.model_normal=MV1LoadModel("data\\characters\\bluecube\\bluecube.mqo");
bc.x=-500.0f;
bc.y=-5400.0f;
bc.speed=10.0f;
bc.width=200.0f;
bc.height=200.0f;
bc.model_attack=MV1LoadModel("data\\characters\\bluecube\\bluecube_attack.mqo");
MV1SetPosition(bc.model_attack,VGet(bc.x,bc.y,0.0f));
//YELLOWPYRAMID構造体
yp.model_normal=MV1LoadModel("data\\characters\\yellowpyramid\\yellowpyramid.mqo");
yp.x=-500.0f;
yp.y=-5400.0f;
yp.speed=50.0f;
yp.width=200.0f;
yp.height=200.0f;
yp.model_attack=MV1LoadModel("data\\characters\\yellowpyramid\\yellowpyramid_attack.mqo");
MV1SetPosition(yp.model_attack,VGet(yp.x,yp.y,0.0f));
//DARKBALL構造体
db.model_normal=MV1LoadModel("data\\characters\\darkball\\darkball.mqo");
db.x=500.0f;
db.y=-5400.0f;
db.speed=50.0f;
db.width=200.0f;
db.height=200.0f;
db.model_attack=MV1LoadModel("data\\characters\\darkball\\darkball_attack.mqo");
MV1SetPosition(db.model_attack,VGet(db.x,db.y,0.0f));
//DARKCUBE構造体
dc.model_normal=MV1LoadModel("data\\characters\\darkcube\\darkcube.mqo");
dc.x=500.0f;
dc.y=-5400.0f;
dc.speed=50.0f;
dc.width=200.0f;
dc.height=200.0f;
dc.model_attack=MV1LoadModel("data\\characters\\darkcube\\darkcube_attack.mqo");
MV1SetPosition(dc.model_attack,VGet(dc.x,dc.y,0.0f));
//DARKPYRAMID構造体
dp.model_normal=MV1LoadModel("data\\characters\\darkpyramid\\darkpyramid.mqo");
dp.x=500.0f;
dp.y=-5400.0f;
dp.speed=50.0f;
dp.width=200.0f;
dp.height=200.0f;
dp.model_attack=MV1LoadModel("data\\characters\\darkpyramid\\darkpyramid_attack.mqo");
MV1SetPosition(dp.model_attack,VGet(dp.x,dp.y,0.0f));
//DARKSTAR構造体
ds.model_normal=MV1LoadModel("data\\characters\\darkstar\\darkstar.mqo");
ds.x=500.0f;
ds.y=-5400.0f;
ds.speed=50.0f;
ds.width=200.0f;
ds.height=200.0f;
ds.model_attack=MV1LoadModel("data\\characters\\darkstar\\darkpyramid_star.mqo");
MV1SetPosition(ds.model_attack,VGet(ds.x,ds.y,0.0f));
//STAGE_1構造体
stage_1.model=MV1LoadModel("data\\stages\\stage_1\\stage_1.mqo");
stage_1.x=0.0f;
stage_1.y=-5500.0f;
stage_1.back=LoadGraph("data\\stages\\stage_1\\stage_1_back.png",TRUE);
stage_1.BGM=LoadSoundMem("data\\stages\\stage_1\\stage_1.mp3");
//KEY構造体
key.attack=(KEY_INPUT_Z);
key.special=(KEY_INPUT_X);
key.shield=(KEY_INPUT_C);
key.grab=(KEY_INPUT_D);
key.appeal=(KEY_INPUT_S);
key.up=(KEY_INPUT_UP);
key.down=(KEY_INPUT_DOWN);
key.right=(KEY_INPUT_RIGHT);
key.left=(KEY_INPUT_LEFT);
key.jump=(KEY_INPUT_UP);
key.pause=(KEY_INPUT_RETURN);
//CAMERA構造体
camera.x=0.0f;
camera.y=-5000.0f;
camera.z=-2000.0f;
//SCREEN構造体
screen.x=0.0f;
screen.y=0.0f;
screen.width=1024.0f;
screen.height=768.0f;
screen.center_x=(screen.x+screen.width)/2.0f;
screen.center_y=(screen.y+screen.height)/2.0f-250.0f;
//MENU構造体
menu.frame_1_x=32;
menu.frame_1_y=32;
menu.frame_1_graph=LoadGraph("data\\menu\\frame_1.bmp");
menu.frame_2_graph=LoadGraph("data\\menu\\frame_2.bmp");
menu.back=LoadGraph("data\\menu\\back.bmp");
menu.keyflag=0;
menu.selectsound=LoadSoundMem("data\\menu\\select.wav");
menu.chosesound=LoadSoundMem("data\\menu\\chose.wav");
bright=255;
jumppower=0.0f;
moveflag=0;
keyflag=0;
battle_start_1=LoadGraph("data\\menu\\BATTLE_START_1.bmp");
lose_x=0;
lose_y=-768;
lose=LoadGraph("data\\menu\\lose.bmp");
black=LoadGraph("data\\menu\\black.bmp");
alpha=0;
counter_battle_start=0;
counter_bright=0;
counter_combo=0;
BGM_volume=255;
while(!ProcessMessage()&&!ScreenFlip()&&!ClearDrawScreen()&&!CheckHitKey(KEY_INPUT_ESCAPE))
{
switch(Status)
{
case STATUS_MENU:
MENU();
case STATUS_BATTLE_START_1:
BATTLE_START_1();
case STATUS_BATTLE_1:
BATTLE_1();
case STATUS_LOSE:
break;
}
}
DxLib_End();
return 0;
}