実現したいこと
シューティングゲームで敵が奥からたくさん出てくるようにしたいです
発生している問題・分からないこと
敵を奥のほうからたくさん出てくるようにプログラミングしてみたのですが、現状敵が描画されていません。
該当のソースコード
#include"DxLib.h" //定数 const int WIDTH = 1900; //画面の幅 const int HEIGHT = 1120; //画面の高さ const int cannonstartx1 = 750; //大砲の初期のx1座標 const int cannonstarty1 = 920; //大砲の初期のy1座標 const int cannonstartx2 = 950; //大砲の初期のx2座標 const int cannonstarty2 = 1120; //大砲の初期のy2座標 const int speed = 10; //大砲の移動スピード const int cannonwidth = 200; //大砲の幅 const int ufospeed = 2; //敵のスピード const int ballspeed = 16; //弾速 const int ufowidth = 150; //ufoの幅 const int ufoheight = 100; //ufoの高さ double frameCount = 0; int lastTime = 0, currentTime = 0; double deltaTime = 0; //敵用構造体 typedef struct enemyary { int ufox1; int ufox2; int ufoy2; int ufoy1; bool exsist; }enemyary; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //----------------------------------// //基本設定 //----------------------------------// ChangeWindowMode(TRUE); //ウィンドウモードにする DxLib_Init(); //ライブラリを初期化 Initialise SetMainWindowText("花火シューティング"); SetDrawScreen(DX_SCREEN_BACK); //背景をセットする SetGraphMode(WIDTH, HEIGHT, 32); //ウィンドウのサイズとカラーモードを決める //ライブラリ初期化でエラー起きたら終了 if (DxLib_Init() == -1) { return -1; } //ゲームの進行に関する変数 enum { TITLE, PLAY, OVER }; //シーンのセレクトナンバー int selectScene = TITLE; //タイマー int timer = 0; //乱数の初期化 SRand(0); //変数 int cannonx2 = cannonstartx2; int cannony2 = cannonstarty2; int cannonx1 = cannonstartx1; int cannony1 = cannonstarty1; int cannon; int night; bool flag1 = false; int ballx1 = 0, bally1 = 0; int ballx2 = 0, bally2 = 0; int shot; int ufo; int fireflower; int startScreenImage; enemyary enemy[100]; //構造体配列 int i; for (i = 0; i < 100; i++) { enemy[i].exsist = true; //出現フラグを立てる enemy[i].ufox1 = GetRand(1750); //x1の初期座標 enemy[i].ufox2 = enemy[i].ufox1 + ufowidth; //x2の初期座標 enemy[i].ufoy1 = 0; //y1の初期座標 enemy[i].ufoy2 = enemy[i].ufoy1 + ufoheight; //y2の初期座標 } while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) { currentTime = GetNowCount(); //ゲームフレームカウント double deltaTime = (currentTime - lastTime) / 1000.0; //ゲームフレームカウント currentTime = lastTime - GetNowCount(); frameCount += deltaTime; ClearDrawScreen(); timer++; switch (selectScene) { case TITLE: //背景画像を描画 startScreenImage = LoadGraph("img/hanabi_sky.png"); DrawExtendGraph(0, 0, WIDTH, HEIGHT, startScreenImage, TRUE); //タイトル画面を表示 SetFontSize(100); DrawString(WIDTH / 2 - 150 / 2 * 12 / 2, HEIGHT / 3, "花火シューティング", GetColor(255, 69, 0)); //スタートボタンを点滅させる if (timer % 60 < 30) { SetFontSize(50); DrawString(WIDTH / 2 - 50 / 2 * 21 / 2, HEIGHT * 2 / 3, "Press ENTER to start.", GetColor(238, 130, 238)); } //スペースキーを押してゲームスタート if (CheckHitKey(KEY_INPUT_RETURN) == 1) { selectScene = PLAY; } break; case PLAY: //背景画像を描画 night = LoadGraph("img/yozora.png"); DrawExtendGraph(0, 0, WIDTH, HEIGHT, night, TRUE); //大砲を描画 cannon = LoadGraph("img/taihou.png"); DrawExtendGraph(cannonx1, cannony1, cannonx2, cannony2, cannon, TRUE); //大砲を移動 if (CheckHitKey(KEY_INPUT_RIGHT) == 1) { cannonx1 = cannonx1 + speed; cannonx2 = cannonx2 + speed; if (cannonx2 > WIDTH) { cannonx2 = WIDTH; cannonx1 = WIDTH - cannonwidth; } } if (CheckHitKey(KEY_INPUT_LEFT) == 1) { cannonx1 = cannonx1 - speed; cannonx2 = cannonx2 - speed; if (cannonx1 < 0) { cannonx1 = 0; cannonx2 = cannonwidth; } } //花火玉を発射 if (CheckHitKey(KEY_INPUT_SPACE)) { if (!flag1) { flag1 = true; ballx1 = cannonx1 + 75; bally1 = cannony1; ballx2 = cannonx2 - 75; bally2 = cannony1 + 50; } } //花火玉の移動 if (flag1) { bally1 -= ballspeed; bally2 -= ballspeed; if (bally1 < 0) flag1 = false; } //花火玉を描画 shot = LoadGraph("img/hanabidama.png"); if (flag1) { DrawExtendGraph(ballx1, bally1, ballx2, bally2, shot, TRUE); } //敵の移動 enemy[i].ufoy1 += ufospeed; enemy[i].ufoy2 += ufospeed; //ゲームオーバー条件 if (enemy[i].ufoy1 > cannony1) { selectScene = OVER; break; } //敵の描画 if ((int)deltaTime % 5 == 0) //5フレーム毎に敵が出現 { ufo = LoadGraph("img/ufo.png"); DrawExtendGraph(enemy[i].ufox1, enemy[i].ufoy1, enemy[i].ufox2, enemy[i].ufoy2, ufo, TRUE); } //防衛線を描画 DrawLine(0, cannony1, WIDTH, cannony1, GetColor(255, 0, 0), TRUE); //敵と玉の当たり判定 break; case OVER: SetFontSize(90); DrawString(WIDTH / 3 + 100, HEIGHT / 3, "GAME OVER", GetColor(255, 0, 0)); break; } ScreenFlip(); lastTime = currentTime; } //DXライブラリ使用の終了 DxLib_End(); return 0; }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
少し前までは敵が1体だけ描画されていたのですが敵をたくさん出そうとコードを修正したら敵が描画されなくなってしまいました
補足
特になし
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/08/29 04:17 編集
2024/08/29 04:34 編集
2024/08/29 04:39
2024/08/29 04:52