前提
DXライブラリで射的ゲームを作成しています
C++初心者
実現したいこと
お邪魔ブロックをfor文で表示させたい。
発生している問題・エラーメッセージ
for文でお邪魔ブロックを表示させるソースコードを書いて実行したら
一瞬しか表示されませんでした。
自分の推測(間違っているかも)
ClearDrawScreen()で初期化されてしまうから一瞬しか表示されないのかなと考えています。
ですが自分が作成している射的ゲームには制限時間を設けていてClearDrawScreen()をなくしてしまうと、
制限時間が更新されて表示出来なくなってしまったりと他にも様々な問題が発生してしまいます。
なので自分の理想は初期化されずにお邪魔ブロックが制限時間が0秒なるまで表示されるようにしたいです。
該当のソースコード
C++
1//描画 2void Easy_Draw() { 3 4 ChangeWindowMode(TRUE); 5 SetAlwaysRunFlag(TRUE); 6 7 SetDrawScreen(DX_SCREEN_BACK); 8 9 10 score = 0; // 得点の初期化 11 breakNum = 0; 12 rank_flag = 0; 13 14 15 int XPos, YPos; 16 int X = GetRand(640), Y = GetRand(480), X1 = GetRand(640), Y1 = GetRand(480), X2 = GetRand(640), Y2 = GetRand(480); // 的の座標 17 int targetGraph, targetGraph1, targetGraph2; // 的 18 int back; // 背景 19 int W, H, W1, H1, W2, H2; // 的の縦横の長さ 20 bool target_flag = TRUE; // 1個目の的の生存フラグ 21 bool target_flag1 = TRUE; // 2個目の的の生存フラグ 22 bool target_flag2 = TRUE; // 3個目の的の生存フラグ 23 int Appearance_flag = GetRand(1); // 1個目の的のランダム出現フラグ 24 int Appearance_flag1 = GetRand(1); // 2個目の的のランダム出現フラグ 25 int Appearance_flag2 = GetRand(1); // 3個目の的のランダム出現フラグ 26 27 28 int tg1 = LoadGraph("image/tg_anime1.png"); 29 int tg2 = LoadGraph("image/tg_anime2.png"); 30 int tg3 = LoadGraph("image/tg_anime3.png"); 31 int tg4 = LoadGraph("image/tg_anime4.png"); 32 int tg5 = LoadGraph("image/tg_anime5.png"); 33 int tg6 = LoadGraph("image/tg_anime6.png"); 34 int tg7 = LoadGraph("image/tg_anime7.png"); 35 36 int tg_ani[7]; // 的のアニメーション用の配列 37 tg_ani[0] = tg1; 38 tg_ani[1] = tg2; 39 tg_ani[2] = tg3; 40 tg_ani[3] = tg4; 41 tg_ani[4] = tg5; 42 tg_ani[5] = tg6; 43 tg_ani[6] = tg7; 44 45 46 47 48 int timediff; // 制限時間 49 LONGLONG timelimit = GetNowHiPerformanceCount() + 30000000; 50 51 52 53 54 while (ProcessMessage() == 0) { 55 56 // 1個目の的 57 targetGraph = LoadGraph("image\\tar.png"); 58 // 2個目の的 59 targetGraph1 = LoadGraph("image\\tar.png"); 60 // 3個目の的 61 targetGraph2 = LoadGraph("image\\tar.png"); 62 63 // 背景 64 back = LoadGraph("image\\tg_back.png"); 65 66 67 68 69 int tg[3]; 70 tg[0] = targetGraph; 71 tg[1] = targetGraph1; 72 tg[2] = targetGraph2; 73 74 75 76 77 // 1個目の的のグラフィックのサイズを得る 78 GetGraphSize(targetGraph, &W, &H); 79 80 // 2個目の的のグラフィックのサイズを得る 81 GetGraphSize(targetGraph1, &W1, &H1); 82 83 // 3個目の的のグラフィックのサイズを得る 84 GetGraphSize(targetGraph2, &W2, &H2); 85 86 87 88 89 // 時間を減算 90 timediff = int(timelimit - GetNowHiPerformanceCount()); 91 92 ClearDrawScreen(); // 裏画面を初期化 93 94 DrawGraph(0, 0, back, TRUE); // 背景表示 95 96 SetFontSize(10); 97 DrawString(0, 0, "得点:", GetColor(255, 255, 255)); 98 DrawFormatString(50, 0, GetColor(255, 255, 255), "%d", score); // 得点表示 99 DrawString(120, 0, "破壊数:", GetColor(255, 255, 255)); 100 DrawFormatString(200, 0, GetColor(255, 255, 255), "%d", breakNum); // 破壊数表示 101 DrawFormatString(580, 0, GetColor(255, 255, 255), "%01d:%02d", timediff / 60000000, (timediff % 60000000) / 1000000); 102 103 GetMousePoint(&XPos, &YPos); // マウス座標の取得 104 105 Easy_Block(); 106 107 // 的の当たり判定 108 ソースコードが長いので削除してます。 109 110 111 112 // 的が生存しているなら実行する 113 ソースコードが長いので削除してます。 114 115 116 117 118 // 的の生存フラグ記載 119 ソースコードが長いので削除してます。 120 121 // 制限時間が0秒になったら 122 if (timediff <= 0) { 123 break; 124 } 125 126 ScreenFlip(); // 裏画面の内容を表画面に反映 127 128 } 129 130 131 132 ScoreSave(); 133 BreakSave(); 134 135 136 ClearDrawScreen(); 137 SetFontSize(50); 138 DrawString(240, 220, "終了", GetColor(255, 255, 255)); 139 ScreenFlip(); // 裏画面の内容を表画面に反映 140 141 142 Sleep(3000); 143 Scene_ChangeScene(eScene_Result); 144} 145 146 147void Easy_Block() { 148 bool block_flag = TRUE; // お邪魔ブロックのフラグ 149 int i, image[16]; 150 if (block_flag) { 151 LoadDivGraph("image\\block.png", 16, 4, 4, 32, 32, image); //画像を分割してimage配列に保存 152 153 for (i = 0; i < 100; i++) { 154 DrawGraph(GetRand(640), GetRand(480), image[4], TRUE);//ランダムな場所に画像を描写 155 block_flag = FALSE; 156 } 157 158 } 159} 160

あなたの回答
tips
プレビュー