#include"DxLib.h" #include #define WIDTH 640 #define HEIGHT 480 #define ENEMY 20 #define ITEM 30 #define BULLET 200 //自機のstruct struct S_player{ int x,y; //座標 int vx,vy; //座標方向の速度 int hp; //hit point int score; //得点 int size_x;//x軸方向の大きさ int size_y;//y軸方向の大きさ }; //敵のstruct struct S_enemy{ int 【穴埋め】,【穴埋め】; int 【穴埋め】,【穴埋め】; int hp; int t; //その敵が作られてからのフレーム数を格納するメンバ int 【穴埋め】; int 【穴埋め】; }; //弾のstruct struct S_bullet{ double 【穴埋め】,【穴埋め】; double 【穴埋め】,【穴埋め】; int hp; //hp が0なら画面上に存在していない、1なら存在している int atk; //弾の攻撃力 int 【穴埋め】; int 【穴埋め】; }; //背景のstruct struct S_background{ int 【穴埋め】,【穴埋め】; int vy; int size_x; int size_y; }; //画像のstruct struct S_image{ int img_player; //自機の画像を格納 int img_enemy; //敵の画像 int img_bullet; //弾の画像 int img_gameover; //ゲームオーバー画面 int img_title; //タイトル画面 int img_background; //背景 }; enum e_flag{ //列挙型 enum ここでは title, //title=0 gameplay, //gameplay=1 gameover, //gameover=2 }; //の定数を定義していると考える //グローバル変数の宣言 【穴埋め】 player; //自機のstructをインスタンス化   【穴埋め】 enemy[ENEMY]; //敵のstructを 【穴埋め】 playerbullet[BULLET]; //弾のstructを自機の弾用に 【穴埋め】 enemybullet[ENEMY][BULLET]; //弾のstructを敵の弾用に 【穴埋め】 item[ITEM]; //アイテムのstructを 【穴埋め】 background; //背景のstructを 【穴埋め】 imglist; //画像のstructを e_flag flag; //e_flag型の変数(中身がtitle,gameplay,gameoverの3つにしかならない変数) char key[256]; //キーボードの入力状況を格納するための変数 int white=GetColor(255,255,255); //画面に表示する文字の色を格納 //初期化用関数 int initialize(){ //playerの初期化 player.hp=100; player.score=0; player.size_x=50; player.size_y=50; player.x=(WIDTH - player.size_x) / 2; player.y=HEIGHT - player.size_y; player.vx=10; player.vy=10; //playerbulletの初期化 for(int i=0;i WIDTH) player.x = WIDTH - player.size_x; if(player.y<0) player.y=0; if(player.y + player.size_y > HEIGHT) player.y = HEIGHT - player.size_y; } //敵を動かす関数 void move_enemy(){ //すべての敵 for(int i=0;i<【穴埋め】;i++){ //hp0でない、つまり存在しているてき if(【穴埋め】!=0){ //x,y方向の速度を現座標に加える enemy[i].x += enemy[i].vx; enemy[i].y += enemy[i].vy; //y方向で画面からいなくなったら、消す if(enemy[i].y>【穴埋め】){ 【穴埋め】=0; } } } } //背景を動かす関数 void move_background(){ //x,y方向の速度を現座標に加え,背景の大きさでループさせる background.y = (background.y + background.vy) % background.size_y; } //敵を作る関数 void create_enemy(){ //0〜30の乱数で0だったら if(GetRand(30)==0){ //すべての敵から for(int i=1;i<【穴埋め】;i++){ //存在していないものを探し、敵を作る if(enemy[i].hp==0){ enemy[i].hp=3; enemy[i].t=0; //敵が作られた瞬間をt=0 とする enemy[i].x = WIDTH/4+GetRand(WIDTH/2); //敵の出現位置を enemy[i].y = -enemy[i].size_y; //乱数で決める enemy[i].y = -enemy[i].size_y; if(enemy[i].x < WIDTH/2){ //出現位置により速度を変える enemy[i].vx = GetRand(5); }else{ enemy[i].vx = -GetRand(5); } enemy[i].vy=5+GetRand(5); //1フレームで1体しか作りたくないので、1体作ったらbreakで抜ける break; } } } } //数値的な更新をする関数 void update(){ //キーボード入力状況を取得 GetHitKeyStateAll(key); //flagの中に何があるかで処理を変える switch(flag){ case title: //titleのとき //Enterが入力されたら if(key[KEY_INPUT_RETURN]){ flag=gameplay; //flagの中身をgameplayに変更 initialize(); //初期化関数を呼び出す } break; case gameplay: //gameplayのとき //移動の関数 【穴埋め】; //自機を動かす関数 【穴埋め】; //敵を動かす関数 【穴埋め】; //背景を動かす関数 //いろいろと作る関数 【穴埋め】; //敵を作る関数 //自機のhpが0になったら if(【穴埋め】==0){ flag=gameover; //flagの中身をgameoverに変える } break; case gameover: //gameoverのとき //Xが入力されたら if(key[KEY_INPUT_【穴埋め】]) flag=title; //flagの中身をtitleに変える break; } } //描画を行う関数 void draw(){ //画面に描画されているものを消す ClearDrawScreen(); //flagの中に何があるかで処理を変える switch(flag){ case title: //titleのとき DrawGraph(0,0,imglist.img_title,FALSE); //title画像の表示 break; case gameplay: //gameplayのとき //背景の描画、一番奥なので一番最初に描画 DrawGraph(background.x,background.y,imglist.img_background,FALSE); DrawGraph(background.x,background.y - background.size_y,imglist.img_background,FALSE); //hp とscoreの描画 DrawFormatString(540,50,white,"HP %d",player.hp); DrawFormatString(540,70,white,"Score %d",player.score); //自機の描画 DrawGraph(player.x,player.y,imglist.img_player,FALSE); //自機の弾の描画 for(int i=0;i<【穴埋め】;i++){ //存在しているものについて if(playerbullet[i].hp){ //描画する DrawGraph( playerbullet[i].x,playerbullet[i].y,imglist.img_bullet,FALSE); } } //敵と敵の弾の描画 for(int i=0;i<【穴埋め】;i++){ //存在しているものについて if(enemy[i].hp!=0){ //描画する DrawGraph(enemy[i].x,enemy[i].y,imglist.img_enemy,FALSE); } for(int j=0;j