回答編集履歴
1
追記
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
|
+
```
|