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

質問編集履歴

4

2019/10/01 23:49

投稿

srp479
srp479

スコア4

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,8 @@
5
5
  今まで敵の処理はrandomを採用してきたので
6
6
  全くわかりません
7
7
  良ければ知恵をお貸しください
8
+ ```
8
- ```class GamePlay : IScene
9
+ class GamePlay : IScene
9
10
  {
10
11
 
11
12
  private bool isEnd;//終了フラグ

3

2019/10/01 23:49

投稿

srp479
srp479

スコア4

title CHANGED
File without changes
body CHANGED
@@ -5,257 +5,246 @@
5
5
  今まで敵の処理はrandomを採用してきたので
6
6
  全くわかりません
7
7
  良ければ知恵をお貸しください
8
- class GamePlay : IScene
8
+ ```class GamePlay : IScene
9
- {
9
+ {
10
10
 
11
+ private bool isEnd;//終了フラグ
11
12
 
12
- private bool isEnd;//終了フラグ
13
-
14
- private InputState input;
13
+ private InputState input;
15
- private CharacterControl characterControl;
14
+ private CharacterControl characterControl;
16
- private Random rand = new Random();
15
+ private Random rand = new Random();
17
- protected bool isDead = false;
16
+ protected bool isDead = false;
18
- public void Update()
17
+ public void Update()
19
- {
18
+ {
20
19
 
21
- if (Enemy.Length == 1)
20
+ if (Enemy.Length == 1)
22
- {
21
+ {
23
- isEnd = true;
22
+ isEnd = true;
24
- }
23
+ }
25
- if(characterControl.IsPlayerDead())
24
+ if(characterControl.IsPlayerDead())
26
- {
25
+ {
27
- isEnd = true;
26
+ isEnd = true;
28
- }
27
+ }
29
28
 
30
- if (rand.Next(60) == 0)
29
+ if (rand.Next(60) == 0)
31
- {
30
+ {
32
- var position = new Vector2((Screen.Width + 32.0f), (float)rand.Next(45 - 40, Screen.Height - 50));
31
+ var position = new Vector2((Screen.Width + 32.0f), (float)rand.Next(45 - 40, Screen.Height - 50));
33
- characterControl.Add(new Enemy(position));
32
+ characterControl.Add(new Enemy(position));
34
- }
33
+ }
35
34
 
36
- if (characterControl.IsPlayerDead())
35
+ if (characterControl.IsPlayerDead())
37
- {
36
+ {
38
- Initialize();
37
+ Initialize();
39
- }
38
+ }
40
39
 
41
- characterControl.Update();
40
+ characterControl.Update();
42
- }
41
+ }
43
- public GamePlay(InputState input)
42
+ public GamePlay(InputState input)
44
- {
43
+ {
45
44
 
46
- this.input = input;
45
+ this.input = input;
47
46
 
47
+ }
48
48
 
49
- }
50
-
51
- public void Draw(Renderer renderer)
49
+ public void Draw(Renderer renderer)
52
- {
50
+ {
53
-
54
- characterControl.Draw(renderer);
55
-
56
-
57
- {
58
-
59
- }
60
- //renderer.End();
61
- }
62
- public void Shutdown()
63
- {
64
51
 
65
- }
66
- public void Initialize()
67
- {
68
- //シーン終了フラグを初期化
69
- this.isEnd = false;
70
- characterControl = new CharacterControl();
71
- characterControl.Initialize();
52
+ characterControl.Draw(renderer);
72
- characterControl.Add(new Player(input));
73
53
 
54
+ {
74
55
 
75
- }
56
+ }
57
+ //renderer.End();
58
+ }
76
- public bool IsEnd()
59
+ public void Shutdown()
77
- {
60
+ {
78
- return this.isEnd;
79
- }
80
- public Scene Next()
81
- {
82
61
 
83
- return Scene.GameOver;
84
- }
62
+ }
85
-
63
+ public void Initialize()
64
+ {
65
+ //シーン終了フラグを初期化
66
+ this.isEnd = false;
67
+ characterControl = new CharacterControl();
68
+ characterControl.Initialize();
69
+ characterControl.Add(new Player(input));
86
70
 
71
+ }
87
- class CharacterControl
72
+ public bool IsEnd()
88
- {
73
+ {
89
- private LinkedList<Character> characters;
74
+ return this.isEnd;
75
+ }
76
+ public Scene Next()
77
+ {
90
78
 
91
- public CharacterControl() { }
92
- public void Initialize()
93
- {
94
- if (characters != null)
95
- {
96
- characters.Clear();
79
+ return Scene.GameOver;
97
- }
80
+ }
98
- characters = new LinkedList<Character>();
99
- }
100
- public bool Add(Character character)
101
- {
102
- characters.AddLast(character);
103
- return true;
104
- }
105
- public void Update()
106
- {
107
- foreach (Character c in characters)
108
- {
109
- c.Update();
110
- }
111
- New();
112
- Hit();
113
- Remove();
114
- }
115
- private void New()
116
- {
117
81
 
118
- var newCharacters = new List<Character>();
119
- foreach (Character c in characters)
82
+ class CharacterControl
120
- {
83
+ {
121
- Character newCharacter = c.New();
122
- if (newCharacter != null)
123
- {
124
- newCharacters.Add(newCharacter);
125
- }
126
- }
127
- foreach (Character c in newCharacters)
128
- {
129
- characters.AddLast(c);
130
- }
131
- }
132
- private void Hit()
133
- {
134
- foreach (Character c1 in characters)
135
- {
136
- foreach (Character c2 in characters)
137
- if (c1.Collision(c2))
138
- {
139
- c1.Hit(c2);
140
- c2.Hit(c1);
141
- }
142
- }
143
- }
144
- private void Remove()
145
- {
146
- LinkedListNode<Character> node = characters.First;
84
+ private LinkedList<Character> characters;
147
- while (node != null)
148
- {
149
- LinkedListNode<Character> next = node.Next;
150
- if (node.Value.IsDead())
151
- {
152
- characters.Remove(node);
153
- }
154
- node = next;
155
- }
156
- }
157
- public bool IsPlayerDead()
158
- {
159
- foreach (Character c in characters)
160
- {
161
- if (c is Player)
162
- {
163
- return false;
164
- }
165
- }
166
- return true;
167
- }
168
- public void Draw(Renderer renderer)
169
- {
170
- foreach (Character c in characters)
171
- {
172
- //renderer.Begin();
173
- c.Draw(renderer);
174
- //renderer.Begin();
175
- }
176
- }
177
85
 
86
+ public CharacterControl() { }
87
+ public void Initialize()
88
+ {
89
+ if (characters != null)
90
+ {
91
+ characters.Clear();
92
+ }
93
+ characters = new LinkedList<Character>();
94
+ }
95
+ public bool Add(Character character)
96
+ {
97
+ characters.AddLast(character);
98
+ return true;
99
+ }
100
+ public void Update()
101
+ {
102
+ foreach (Character c in characters)
103
+ {
104
+ c.Update();
105
+ }
106
+ New();
107
+ Hit();
108
+ Remove();
109
+ }
110
+ private void New()
111
+ {
178
112
 
113
+ var newCharacters = new List<Character>();
114
+ foreach (Character c in characters)
115
+ {
116
+ Character newCharacter = c.New();
117
+ if (newCharacter != null)
118
+ {
119
+ newCharacters.Add(newCharacter);
179
- }
120
+ }
121
+ }
122
+ foreach (Character c in newCharacters)
123
+ {
124
+ characters.AddLast(c);
125
+ }
126
+ }
127
+ private void Hit()
128
+ {
129
+ foreach (Character c1 in characters)
130
+ {
131
+ foreach (Character c2 in characters)
132
+ if (c1.Collision(c2))
133
+ {
134
+ c1.Hit(c2);
135
+ c2.Hit(c1);
136
+ }
137
+ }
138
+ }
139
+ private void Remove()
140
+ {
141
+ LinkedListNode<Character> node = characters.First;
142
+ while (node != null)
143
+ {
144
+ LinkedListNode<Character> next = node.Next;
145
+ if (node.Value.IsDead())
146
+ {
147
+ characters.Remove(node);
148
+ }
149
+ node = next;
150
+ }
151
+ }
152
+ public bool IsPlayerDead()
153
+ {
154
+ foreach (Character c in characters)
155
+ {
156
+ if (c is Player)
157
+ {
158
+ return false;
159
+ }
160
+ }
161
+ return true;
162
+ }
163
+ public void Draw(Renderer renderer)
164
+ {
165
+ foreach (Character c in characters)
166
+ {
167
+ //renderer.Begin();
168
+ c.Draw(renderer);
169
+ //renderer.Begin();
170
+ }
171
+ }
180
172
 
181
-
182
- class Enemy : Character
183
- {
173
+ }
184
-
185
-
186
174
 
187
- public Enemy(Vector2 position)
175
+ class Enemy : Character
188
- : base("敵", new Vector2(350f, 50.0f), 32.0f)
189
- {
176
+ {
190
-
191
- }
192
- public override void Update()
193
- {
194
- position = position + new Vector2(-9.0f, 0.0f);
195
- if (position.X < (-9.0f - 55.0f))
196
- {
197
- isDead = true;
198
- }
199
177
 
178
+ public Enemy(Vector2 position)
179
+ : base("敵", new Vector2(350f, 50.0f), 32.0f)
180
+ {
200
181
 
201
- }
182
+ }
202
- public override void Hit(Character character)
183
+ public override void Update()
203
- {
184
+ {
185
+ position = position + new Vector2(-9.0f, 0.0f);
204
- if (character is Bullet || character is Player)
186
+ if (position.X < (-9.0f - 55.0f))
205
- {
187
+ {
206
- isDead = true;
188
+ isDead = true;
207
- }
189
+ }
208
190
 
209
- }
191
+ }
210
- public override Character New()
192
+ public override void Hit(Character character)
211
- {
193
+ {
194
+ if (character is Bullet || character is Player)
195
+ {
212
- return null;
196
+ isDead = true;
213
- }
197
+ }
214
- }
215
-
216
-
217
- abstract class Character
218
- {
219
- protected string name;
220
- protected Vector2 position;
221
- protected float radius;
222
- protected bool isDead = false;
223
198
 
199
+ }
200
+ public override Character New()
201
+ {
202
+ return null;
203
+ }
204
+ }
224
205
 
225
- public abstract void Update();
206
+ abstract class Character
207
+ {
208
+ protected string name;
209
+ protected Vector2 position;
210
+ protected float radius;
226
- public abstract void Hit(Character character);
211
+ protected bool isDead = false;
227
212
 
228
- public abstract Character New();
213
+ public abstract void Update();
214
+ public abstract void Hit(Character character);
229
215
 
230
- public Character(string name, Vector2 position, float radius)
216
+ public abstract Character New();
231
- {
232
- this.name = name;
233
- this.position = position;
234
- this.radius = radius;
235
217
 
236
- }
237
- public void Draw(Renderer renderer)
218
+ public Character(string name, Vector2 position, float radius)
238
- {
219
+ {
220
+ this.name = name;
239
- //renderer.Begin();
221
+ this.position = position;
222
+ this.radius = radius;
240
223
 
241
- renderer.DrawTexture(name, position - new Vector2(radius, radius));
242
-
243
- //renderer.End();
244
- }
224
+ }
245
- public bool IsDead()
225
+ public void Draw(Renderer renderer)
246
- {
226
+ {
247
- return isDead;
248
- }
249
- public bool Collision(Character character)
227
+ //renderer.Begin();
250
- {
251
- if (Vector2.Distance(this.position, character.position) <= (this.radius + character.radius))
252
- {
253
- return true;
254
- }
255
- return false;
256
- }
257
228
 
258
- }
229
+ renderer.DrawTexture(name, position - new Vector2(radius, radius));
259
230
 
231
+ //renderer.End();
232
+ }
233
+ public bool IsDead()
234
+ {
235
+ return isDead;
236
+ }
237
+ public bool Collision(Character character)
238
+ {
239
+ if (Vector2.Distance(this.position, character.position) <= (this.radius + character.radius))
240
+ {
241
+ return true;
242
+ }
243
+ return false;
244
+ }
260
245
 
261
- }
246
+ }
247
+
248
+ }
249
+ コード
250
+ ```

2

コードはりました

2019/10/01 23:48

投稿

srp479
srp479

スコア4

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,261 @@
1
1
  c#で
2
2
  画面端にとどけば次の弾が撃てる
3
3
  敵は横に移動して画面端で折り返す
4
-
5
4
  この2つの処理をしたくて1日考えていたのですが
6
5
  今まで敵の処理はrandomを採用してきたので
7
6
  全くわかりません
8
- 良ければ知恵をお貸しください
7
+ 良ければ知恵をお貸しください
8
+ class GamePlay : IScene
9
+ {
10
+
11
+
12
+ private bool isEnd;//終了フラグ
13
+
14
+ private InputState input;
15
+ private CharacterControl characterControl;
16
+ private Random rand = new Random();
17
+ protected bool isDead = false;
18
+ public void Update()
19
+ {
20
+
21
+ if (Enemy.Length == 1)
22
+ {
23
+ isEnd = true;
24
+ }
25
+ if(characterControl.IsPlayerDead())
26
+ {
27
+ isEnd = true;
28
+ }
29
+
30
+ if (rand.Next(60) == 0)
31
+ {
32
+ var position = new Vector2((Screen.Width + 32.0f), (float)rand.Next(45 - 40, Screen.Height - 50));
33
+ characterControl.Add(new Enemy(position));
34
+ }
35
+
36
+ if (characterControl.IsPlayerDead())
37
+ {
38
+ Initialize();
39
+ }
40
+
41
+ characterControl.Update();
42
+ }
43
+ public GamePlay(InputState input)
44
+ {
45
+
46
+ this.input = input;
47
+
48
+
49
+ }
50
+
51
+ public void Draw(Renderer renderer)
52
+ {
53
+
54
+ characterControl.Draw(renderer);
55
+
56
+
57
+ {
58
+
59
+ }
60
+ //renderer.End();
61
+ }
62
+ public void Shutdown()
63
+ {
64
+
65
+ }
66
+ public void Initialize()
67
+ {
68
+ //シーン終了フラグを初期化
69
+ this.isEnd = false;
70
+ characterControl = new CharacterControl();
71
+ characterControl.Initialize();
72
+ characterControl.Add(new Player(input));
73
+
74
+
75
+ }
76
+ public bool IsEnd()
77
+ {
78
+ return this.isEnd;
79
+ }
80
+ public Scene Next()
81
+ {
82
+
83
+ return Scene.GameOver;
84
+ }
85
+
86
+
87
+ class CharacterControl
88
+ {
89
+ private LinkedList<Character> characters;
90
+
91
+ public CharacterControl() { }
92
+ public void Initialize()
93
+ {
94
+ if (characters != null)
95
+ {
96
+ characters.Clear();
97
+ }
98
+ characters = new LinkedList<Character>();
99
+ }
100
+ public bool Add(Character character)
101
+ {
102
+ characters.AddLast(character);
103
+ return true;
104
+ }
105
+ public void Update()
106
+ {
107
+ foreach (Character c in characters)
108
+ {
109
+ c.Update();
110
+ }
111
+ New();
112
+ Hit();
113
+ Remove();
114
+ }
115
+ private void New()
116
+ {
117
+
118
+ var newCharacters = new List<Character>();
119
+ foreach (Character c in characters)
120
+ {
121
+ Character newCharacter = c.New();
122
+ if (newCharacter != null)
123
+ {
124
+ newCharacters.Add(newCharacter);
125
+ }
126
+ }
127
+ foreach (Character c in newCharacters)
128
+ {
129
+ characters.AddLast(c);
130
+ }
131
+ }
132
+ private void Hit()
133
+ {
134
+ foreach (Character c1 in characters)
135
+ {
136
+ foreach (Character c2 in characters)
137
+ if (c1.Collision(c2))
138
+ {
139
+ c1.Hit(c2);
140
+ c2.Hit(c1);
141
+ }
142
+ }
143
+ }
144
+ private void Remove()
145
+ {
146
+ LinkedListNode<Character> node = characters.First;
147
+ while (node != null)
148
+ {
149
+ LinkedListNode<Character> next = node.Next;
150
+ if (node.Value.IsDead())
151
+ {
152
+ characters.Remove(node);
153
+ }
154
+ node = next;
155
+ }
156
+ }
157
+ public bool IsPlayerDead()
158
+ {
159
+ foreach (Character c in characters)
160
+ {
161
+ if (c is Player)
162
+ {
163
+ return false;
164
+ }
165
+ }
166
+ return true;
167
+ }
168
+ public void Draw(Renderer renderer)
169
+ {
170
+ foreach (Character c in characters)
171
+ {
172
+ //renderer.Begin();
173
+ c.Draw(renderer);
174
+ //renderer.Begin();
175
+ }
176
+ }
177
+
178
+
179
+ }
180
+
181
+
182
+ class Enemy : Character
183
+ {
184
+
185
+
186
+
187
+ public Enemy(Vector2 position)
188
+ : base("敵", new Vector2(350f, 50.0f), 32.0f)
189
+ {
190
+
191
+ }
192
+ public override void Update()
193
+ {
194
+ position = position + new Vector2(-9.0f, 0.0f);
195
+ if (position.X < (-9.0f - 55.0f))
196
+ {
197
+ isDead = true;
198
+ }
199
+
200
+
201
+ }
202
+ public override void Hit(Character character)
203
+ {
204
+ if (character is Bullet || character is Player)
205
+ {
206
+ isDead = true;
207
+ }
208
+
209
+ }
210
+ public override Character New()
211
+ {
212
+ return null;
213
+ }
214
+ }
215
+
216
+
217
+ abstract class Character
218
+ {
219
+ protected string name;
220
+ protected Vector2 position;
221
+ protected float radius;
222
+ protected bool isDead = false;
223
+
224
+
225
+ public abstract void Update();
226
+ public abstract void Hit(Character character);
227
+
228
+ public abstract Character New();
229
+
230
+ public Character(string name, Vector2 position, float radius)
231
+ {
232
+ this.name = name;
233
+ this.position = position;
234
+ this.radius = radius;
235
+
236
+ }
237
+ public void Draw(Renderer renderer)
238
+ {
239
+ //renderer.Begin();
240
+
241
+ renderer.DrawTexture(name, position - new Vector2(radius, radius));
242
+
243
+ //renderer.End();
244
+ }
245
+ public bool IsDead()
246
+ {
247
+ return isDead;
248
+ }
249
+ public bool Collision(Character character)
250
+ {
251
+ if (Vector2.Distance(this.position, character.position) <= (this.radius + character.radius))
252
+ {
253
+ return true;
254
+ }
255
+ return false;
256
+ }
257
+
258
+ }
259
+
260
+
261
+ }

1

2019/10/01 23:11

投稿

srp479
srp479

スコア4

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- ~~打ち消し線~~c#で
1
+ c#で
2
2
  画面端にとどけば次の弾が撃てる
3
3
  敵は横に移動して画面端で折り返す
4
4