回答編集履歴

1

追記

2022/12/16 01:59

投稿

fana
fana

スコア11658

test CHANGED
@@ -9,3 +9,60 @@
9
9
  (わかりやすく言えば,`DrawGraph`を用いた的の表示を一切行わなければ「見えない透明な的を撃て!」というゲームになるわけですね)
10
10
 
11
11
  …というわけで,[質問へのコメント]欄に述べられているように,しっかりと **データとして/処理として** 「今現在のデータの状態ではこの処理を実施して良いのかどうか? 実施して良い状態であれば実施する」というのを実装することを考えてください.
12
+
13
+ ---
14
+
15
+ ```C++
16
+ //「的が存在しているか否か」を表すためのデータを用意する.
17
+ //ここでは,ゲームらしく(?) 「的のHP」という変数を用意して,
18
+ //「この値が1以上の場合には的は存在していて,そうでない(:0以下の)の場合には的は既に破壊されていて存在しない」
19
+ //のだということにする.
20
+ int TargetHP = 1;
21
+
22
+ /* この辺は省略 */
23
+
24
+ while( ProcessMessage() == 0 )
25
+ {
26
+ /* この辺は省略 */
27
+
28
+ //入力情報を取得
29
+ MI = GetMouseInput(); // マウスのボタンの押下状態を取得する
30
+ int CLK = (int)(MI & MOUSE_INPUT_LEFT); // マウスクリックの取得
31
+ GetMousePoint(&XPos, &YPos); // マウス座標の取得
32
+
33
+ //
34
+ //的に関する処理は,的が存在している状況でのみ実施すればよい
35
+ //
36
+ if( TargetHP >= 1 ) //今現在,的が存在しているなら
37
+ {
38
+ //的を表示
39
+ DrawGraph(X, Y, targetGraph, FALSE);
40
+
41
+ //撃たれたかどうか判定
42
+ int HIT = (int)(CLK && (XPos<X + W && XPos>X - W + SIZE) && (YPos<Y + H && YPos>Y - H + SIZE)); // 当たり判定
43
+
44
+ if( HIT ) //的が撃たれた時
45
+ {
46
+ //的のHPを減らす
47
+ --TargetHP;
48
+
49
+ //破壊された際にはスコア増加等を行う
50
+ if( TargetHP <= 0 )
51
+ {
52
+ score += 100;
53
+ breakNum += 1;
54
+ }
55
+ }
56
+
57
+ //的の移動
58
+ X++;
59
+ if( X > 500 )X = 0;
60
+ }
61
+
62
+ //
63
+ ScreenFlip(); // 裏画面の内容を表画面に反映
64
+ }
65
+
66
+ //※これは↑のwhileの後でやればいいんじゃないかな
67
+ DeleteGraph(targetGraph, FALSE); //※これの第二引数はリファレンスには書かれていない様子?
68
+ ```