質問編集履歴

1

学校で配布されたプログラムを自分が今回解決したい問題のみを質問出来る形にしてプログラムを新規に作成しました。

2020/04/07 04:59

投稿

mash_arrow
mash_arrow

スコア5

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,28 @@
1
+ コード
2
+
1
3
  ### 前提・実現したいこと
2
4
 
3
5
  メインのゲームループでsetしたクラスを別のクラスで使う方法。
4
6
 
7
+ このプログラムの場合 enemy.cppのattack関数を使えるようにしたい
8
+
5
9
 
6
10
 
7
11
 
8
12
 
9
13
  ### 発生している問題・エラーメッセージ
10
14
 
15
+
16
+
17
+ 変更後
18
+
11
- setplayerに値を渡すことは出来ていると思うのですが、関数が終わるとメンバ変数のplayerの中身は空に戻ってしまうようなので、playerのX座標を条件に敵キャラクターが動くプログラムを組むことが出来な(今は左に動くだだが、条件を使分けて敵AIを作予定)
19
+ targetsetの部分が上手くいっていないのでどうやって解決いけいか悩んでい
20
+
21
+
22
+
23
+ エラーメッセージ targetsetの行にて
24
+
25
+ 一致するトークンが見つかりませんでした。
12
26
 
13
27
 
14
28
 
@@ -18,63 +32,187 @@
18
32
 
19
33
 
20
34
 
35
+ **player.h**
36
+
37
+
38
+
39
+ class player
40
+
41
+ {
42
+
43
+
44
+
45
+ public:
46
+
47
+ void setplayer(float x, float y);
48
+
49
+
50
+
51
+ float player_x;
52
+
53
+ float player_y;
54
+
55
+
56
+
57
+ };
58
+
59
+
60
+
61
+ **player.cpp**
62
+
63
+
64
+
65
+ include "player.h"
66
+
67
+
68
+
69
+ void player::setplayer(float x, float y) {
70
+
71
+
72
+
73
+ player_x = x;
74
+
75
+ player_y = y;
76
+
77
+
78
+
79
+ }
80
+
81
+
82
+
83
+ **enemy.h**
84
+
85
+
86
+
87
+ include "enemy.h"
88
+
89
+ include "player.h"
90
+
91
+ class enemy
92
+
93
+ {
94
+
95
+ public:
96
+
97
+ void setenemy(float x, float y);
98
+
99
+
100
+
101
+ void targetset(player p);
102
+
103
+ void attack();
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+ private:
114
+
115
+
116
+
117
+ float enemy_x;
118
+
119
+ float enemy_y;
120
+
121
+ player eplayer;
122
+
123
+
124
+
125
+ **enemy.cpp**
126
+
127
+
128
+
129
+ include "enemy.h"
130
+
131
+ include <iostream>
132
+
133
+
134
+
135
+ using namespace std;
136
+
137
+
138
+
139
+ void enemy::setenemy(float x, float y){
140
+
21
- enemyクラスのプログラム
141
+ enemy_x = x;
142
+
22
-
143
+ enemy_y = y;
144
+
23
-
145
+ }
24
-
146
+
147
+
148
+
25
- void cEnemy::execute() {
149
+ void enemy::attack() {
26
-
27
-
28
-
150
+
151
+
152
+
29
- if (player->posX < posX)
153
+ if (eplayer.player_x < enemy_x) {
154
+
155
+ cout << "左に向かって攻撃";
156
+
157
+ }
158
+
159
+
160
+
161
+ if (eplayer.player_x > enemy_x) {
162
+
163
+ cout << "右に向かって攻撃";
164
+
165
+ }
166
+
167
+ }
168
+
169
+
170
+
171
+ void enemy::targetset(player p) {
30
172
 
31
173
  {
32
174
 
33
- posX -= 10.0f;
175
+ eplayer = p;
34
176
 
35
177
  }
36
178
 
37
179
 
38
180
 
39
- Velocity += Gravity;
40
-
41
- posY += Velocity;
181
+ **source.cpp**
182
+
183
+
184
+
42
-
185
+ include <iostream>
186
+
43
-
187
+ include "player.h"
188
+
44
-
189
+ include "enemy.h"
190
+
191
+
192
+
193
+ int main() {
194
+
195
+
196
+
197
+ player p;
198
+
199
+ enemy e;
200
+
201
+
202
+
203
+ p.setplayer(100.0f,100.0f);
204
+
205
+ e.setenemy(200.0f, 200.0f);
206
+
207
+
208
+
209
+ e.targetset(p);
210
+
211
+
212
+
213
+ return 0;
214
+
45
- }
215
+ }
46
-
47
-
48
-
49
- void cEnemy::setplayer(cPlayer* p) //
50
-
51
- {
52
-
53
- player = p;
54
-
55
- }
56
-
57
-
58
-
59
-
60
-
61
- メインのゲームループ
62
-
63
-
64
-
65
- pPlayer = new cPlayer(CLIENT_WIDTH/2 - 200.0f, CLIENT_HEIGHT /2, 64.0f, 64.0f, L"data/ghost.png");
66
-
67
-
68
-
69
- pEnemy = new cEnemy(CLIENT_WIDTH - 500.0f, CLIENT_HEIGHT / 2, 128.0f, 128.0f, L"data/ghost.png",1.0f,0.0f,0.0f,1.0f);
70
-
71
-
72
-
73
- //このような形でインスタンス化
74
-
75
-
76
-
77
- pEnemy->setplayer(pPlayer);//ここでpPlayerをsetplayerの引数に渡している
78
216
 
79
217
 
80
218
 
@@ -82,10 +220,8 @@
82
220
 
83
221
 
84
222
 
85
- 戻り値のところでcPlayerクラスを返そうとも考えたが、この関数にcPlayerクラスを引数として渡すのはメインゲームループであるので、解決になってないと考えた。
86
-
87
223
 
88
224
 
89
225
  ### 補足情報(FW/ツールのバージョンなど)
90
226
 
91
- visual studio 2019 学校で配布されたフレームワークを使用してプログラムをしています。
227
+ visual studio 2019