teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

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

2020/04/07 04:59

投稿

mash_arrow
mash_arrow

スコア5

title CHANGED
File without changes
body CHANGED
@@ -1,46 +1,114 @@
1
+ コード
1
2
  ### 前提・実現したいこと
2
3
  メインのゲームループでsetしたクラスを別のクラスで使う方法。
4
+ このプログラムの場合 enemy.cppのattack関数を使えるようにしたい
3
5
 
4
6
 
5
7
  ### 発生している問題・エラーメッセージ
6
- setplayerに値を渡すことは出来ていると思うのですが、関数が終わるとメンバ変数のplayerの中身は空に戻ってしまうようなので、playerのX座標を条件に敵キャラクターが動くプログラムを組むことが出来ない(今は左に動くだけだが、条件を使い分けて敵AIを作る予定)
7
8
 
9
+ 変更後
10
+ targetsetの部分が上手くいっていないのでどうやって解決していけばいいか悩んでいる。
11
+
12
+ エラーメッセージ targetsetの行にて
13
+ 一致するトークンが見つかりませんでした。
14
+
8
15
  ### 該当のソースコード
9
16
  C++
10
17
 
11
- enemyクラスのプログラム
18
+ **player.h**
12
19
 
13
- void cEnemy::execute() {
20
+ class player
21
+ {
14
22
 
23
+ public:
15
- if (player->posX < posX)
24
+ void setplayer(float x, float y);
16
- {
17
- posX -= 10.0f;
18
- }
19
25
 
26
+ float player_x;
20
- Velocity += Gravity;
27
+ float player_y;
21
- posY += Velocity;
22
28
 
29
+ };
30
+
31
+ **player.cpp**
32
+
33
+ include "player.h"
34
+
35
+ void player::setplayer(float x, float y) {
36
+
37
+ player_x = x;
38
+ player_y = y;
39
+
23
40
  }
24
41
 
42
+ **enemy.h**
43
+
44
+ include "enemy.h"
25
- void cEnemy::setplayer(cPlayer* p) //
45
+ include "player.h"
46
+ class enemy
26
- {
47
+ {
48
+ public:
49
+ void setenemy(float x, float y);
50
+
51
+ void targetset(player p);
52
+ void attack();
53
+
54
+
55
+
56
+
57
+ private:
58
+
59
+ float enemy_x;
60
+ float enemy_y;
27
- player = p;
61
+ player eplayer;
62
+
63
+ **enemy.cpp**
64
+
65
+ include "enemy.h"
66
+ include <iostream>
67
+
68
+ using namespace std;
69
+
70
+ void enemy::setenemy(float x, float y){
71
+ enemy_x = x;
72
+ enemy_y = y;
28
73
  }
29
74
 
75
+ void enemy::attack() {
30
76
 
77
+ if (eplayer.player_x < enemy_x) {
31
- メインのゲームループ
78
+ cout << "左に向かって攻撃";
79
+ }
32
80
 
81
+ if (eplayer.player_x > enemy_x) {
33
- pPlayer = new cPlayer(CLIENT_WIDTH/2 - 200.0f, CLIENT_HEIGHT /2, 64.0f, 64.0f, L"data/ghost.png");
82
+ cout << "右に向かって攻撃";
83
+ }
84
+ }
34
85
 
35
- 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);
86
+ void enemy::targetset(player p) {
87
+ {
88
+ eplayer = p;
89
+ }
36
90
 
37
- //このような形でインスタンス化
91
+ **source.cpp**
38
92
 
93
+ include <iostream>
39
- pEnemy->setplayer(pPlayer);//ここでpPlayerをsetplayerの引数に渡している
94
+ include "player.h"
95
+ include "enemy.h"
40
96
 
97
+ int main() {
98
+
99
+ player p;
100
+ enemy e;
101
+
102
+ p.setplayer(100.0f,100.0f);
103
+ e.setenemy(200.0f, 200.0f);
104
+
105
+ e.targetset(p);
106
+
107
+ return 0;
108
+ }
109
+
41
110
  ### 試したこと
42
111
 
43
- 戻り値のところでcPlayerクラスを返そうとも考えたが、この関数にcPlayerクラスを引数として渡すのはメインゲームループであるので、解決になってないと考えた。
44
112
 
45
113
  ### 補足情報(FW/ツールのバージョンなど)
46
- visual studio 2019 学校で配布されたフレームワークを使用してプログラムをしています。
114
+ visual studio 2019