質問編集履歴

7

コードの削除

2021/01/01 15:34

投稿

A_sio
A_sio

スコア1

test CHANGED
File without changes
test CHANGED
@@ -10,9 +10,9 @@
10
10
 
11
11
  ご質問したいのは、以下の処理についてです。
12
12
 
13
- ・ゲームクリア、ゲームオーバーと表示した3秒後にゲームを終了させる
13
+ ・ゲームクリア、ゲームオーバーと表示したx秒後にゲームを終了させる
14
14
 
15
- ・ゲーム開始時点から一定時間経過したら「タイムアップ」と表示し、表示した3秒後にゲームを終了する
15
+ ・ゲーム開始時点からy分経過したら「タイムアップ」と表示し、表示したx秒後にゲームを終了する
16
16
 
17
17
 
18
18
 
@@ -22,224 +22,6 @@
22
22
 
23
23
 
24
24
 
25
- #該当のソースコード(回答を踏まえて変更済み)
26
-
27
-
28
-
29
- ```python
30
-
31
- class Timer:
32
-
33
- def __init__(self, fps=20):
34
-
35
- self.fps = fps
36
-
37
- self.scheduler = scheduler(self.tick)
38
-
39
-
40
-
41
- def tick(self):
42
-
43
- return pyxel.frame_count
44
-
45
-
46
-
47
- def update(self):
48
-
49
- self.scheduler.run(blocking=False)
50
-
51
-
52
-
53
- def call_later(self, interval, func, priority=1):
54
-
55
- self.scheduler.enter(
56
-
57
- interval*self.fps,
58
-
59
- priority,
60
-
61
- func
62
-
63
- )
64
-
65
-
66
-
67
- def call_soon(self, func):
68
-
69
- self.call_later(0, func)
70
-
71
-
72
-
73
- def set_interval(self, interval, func):
74
-
75
- def callback():
76
-
77
- if not func():
78
-
79
- self.call_later(interval, callback)
80
-
81
- self.call_later(interval, callback)
82
-
83
-
84
-
85
- def start_generator(self, gen):
86
-
87
- def _next():
88
-
89
- interval = next(gen, None)
90
-
91
- if interval is not None:
92
-
93
- self.call_later(interval, _next)
94
-
95
- self.call_soon(_next)
96
-
97
-
98
-
99
- class App():
100
-
101
- def __init__(self, fps=20):
102
-
103
- pyxel.init(100, 100, fps=fps)
104
-
105
- self.score = 50
106
-
107
- self.balls1 = [Ball1(),Ball1(),Ball1(),Ball1(),Ball1()]
108
-
109
- self.balls2 = [Ball2(),Ball2()]
110
-
111
- self.pad = Pad()
112
-
113
- self.timer = Timer(fps = fps)
114
-
115
- self.timer.call_later(180,pyxel.quit)
116
-
117
-
118
-
119
- def count():
120
-
121
- self.num -= 1
122
-
123
- return self.num >= 150
124
-
125
- self.timer.set_interval(-1,count)
126
-
127
-
128
-
129
- def count_gen():
130
-
131
- yield 150
132
-
133
- for num in range(30,0,-1):
134
-
135
- self.num = 150 + num
136
-
137
- yield 1
138
-
139
- self.timer.start_generator(count_gen())
140
-
141
-
142
-
143
- pyxel.run(self.update, self.draw)
144
-
145
-
146
-
147
- def update(self):
148
-
149
- self.timer.update()
150
-
151
- self.pad.a = pyxel.mouse_a
152
-
153
-
154
-
155
- for a in self.balls1:
156
-
157
- End = a.move()
158
-
159
- if End:
160
-
161
- if self.pad.catch(a):
162
-
163
- self.score += 10
164
-
165
-
166
-
167
- for b in self.balls2:
168
-
169
- End = b.move()
170
-
171
- if End:
172
-
173
- if self.pad.catch(b):
174
-
175
- self.score -= 5
176
-
177
-
178
-
179
- def draw(self):
180
-
181
- pyxel.cls(0)
182
-
183
-
184
-
185
- for a in self.balls1:
186
-
187
- pyxel.circ(a.x, a.y, 5, 10)
188
-
189
- pyxel.rect(self.pad.x-20, 195, 30, 5, 15)
190
-
191
- pyxel.text(10,10,str(self.score),1)
192
-
193
-
194
-
195
- for b in self.balls2:
196
-
197
- pyxel.circ(b.x, b.y, 5, 14)
198
-
199
- pyxel.rect(self.pad.x-20, 195, 30, 5, 15)
200
-
201
- pyxel.text(10,10,str(self.score),1)
202
-
203
-
204
-
205
- if self.score >= 100:
206
-
207
- pyxel.text(50,70,"Game Clear!!",6)
208
-
209
- self.timer.call_later(3,pyxel.quit)
210
-
211
-
212
-
213
- elif self.score <= 0:
214
-
215
- pyxel.text(50,70,"Game Over!",8)
216
-
217
- self.timer.call_later(3,pyxel.quit)
218
-
219
-
220
-
221
- elif self.num = 0:
222
-
223
- pyxel.text(50,80,"Time Over!!",8)
224
-
225
-
226
-
227
-
228
-
229
-
230
-
231
- App()
232
-
233
- ```
234
-
235
-
236
-
237
- ### 試したこと
238
-
239
-
240
-
241
- ここに問題に対して試したことを記載してください。
242
-
243
25
 
244
26
 
245
27
  ### 補足情報(FW/ツールのバージョンなど)

6

ソースコードの変更

2021/01/01 15:34

投稿

A_sio
A_sio

スコア1

test CHANGED
File without changes
test CHANGED
@@ -102,10 +102,6 @@
102
102
 
103
103
  pyxel.init(100, 100, fps=fps)
104
104
 
105
- pyxel.load("bgm.pyxres")
106
-
107
- pyxel.playm(0, loop=True)
108
-
109
105
  self.score = 50
110
106
 
111
107
  self.balls1 = [Ball1(),Ball1(),Ball1(),Ball1(),Ball1()]
@@ -144,8 +140,6 @@
144
140
 
145
141
 
146
142
 
147
-
148
-
149
143
  pyxel.run(self.update, self.draw)
150
144
 
151
145
 
@@ -154,67 +148,63 @@
154
148
 
155
149
  self.timer.update()
156
150
 
157
- self.pad.x = pyxel.mouse_x
151
+ self.pad.a = pyxel.mouse_a
158
-
159
-
160
-
152
+
153
+
154
+
161
- for b in self.balls1:
155
+ for a in self.balls1:
156
+
162
-
157
+ End = a.move()
158
+
159
+ if End:
160
+
161
+ if self.pad.catch(a):
162
+
163
+ self.score += 10
164
+
165
+
166
+
167
+ for b in self.balls2:
168
+
163
- isLowerEnd = b.move()
169
+ End = b.move()
164
-
170
+
165
- if isLowerEnd:
171
+ if End:
166
172
 
167
173
  if self.pad.catch(b):
168
174
 
169
- self.score += 5
175
+ self.score -= 5
170
-
171
- pyxel.play(1,2, loop=False)
172
-
173
-
174
-
175
- for c in self.balls2:
176
-
177
- isLowerEnd = c.move()
178
-
179
- if isLowerEnd:
180
-
181
- if self.pad.catch(c):
182
-
183
- self.score -= 3
184
-
185
- pyxel.play(1,3, loop=False)
186
176
 
187
177
 
188
178
 
189
179
  def draw(self):
190
180
 
191
- pyxel.cls(7)
181
+ pyxel.cls(0)
192
-
193
-
194
-
182
+
183
+
184
+
195
- for b in self.balls1:
185
+ for a in self.balls1:
196
-
186
+
197
- pyxel.circ(b.x, b.y, 10, 8)
187
+ pyxel.circ(a.x, a.y, 5, 10)
198
-
188
+
199
- pyxel.rect(self.pad.x-20, 195, 40, 5, 14)
189
+ pyxel.rect(self.pad.x-20, 195, 30, 5, 15)
200
-
190
+
201
- pyxel.text(5,5,str(self.score),1)
191
+ pyxel.text(10,10,str(self.score),1)
202
-
203
-
204
-
192
+
193
+
194
+
205
- for c in self.balls2:
195
+ for b in self.balls2:
206
-
196
+
207
- pyxel.circ(c.x,c.y,10,6)
197
+ pyxel.circ(b.x, b.y, 5, 14)
208
-
198
+
209
- pyxel.rect(self.pad.x-20, 195, 40, 5, 14)
199
+ pyxel.rect(self.pad.x-20, 195, 30, 5, 15)
210
-
200
+
211
- pyxel.text(5,5,str(self.score),1)
201
+ pyxel.text(10,10,str(self.score),1)
212
202
 
213
203
 
214
204
 
215
205
  if self.score >= 100:
216
206
 
217
- pyxel.blt(50,70,0,0,0,60,30,7)
207
+ pyxel.text(50,70,"Game Clear!!",6)
218
208
 
219
209
  self.timer.call_later(3,pyxel.quit)
220
210
 
@@ -222,7 +212,7 @@
222
212
 
223
213
  elif self.score <= 0:
224
214
 
225
- pyxel.blt(50,70,1,0,0,60,30,7)
215
+ pyxel.text(50,70,"Game Over!",8)
226
216
 
227
217
  self.timer.call_later(3,pyxel.quit)
228
218
 
@@ -230,7 +220,7 @@
230
220
 
231
221
  elif self.num = 0:
232
222
 
233
- pyxel.blt(50,80,2,0,0,60,40,7)
223
+ pyxel.text(50,80,"Time Over!!",8)
234
224
 
235
225
 
236
226
 

5

ソースコードの変更

2021/01/01 15:22

投稿

A_sio
A_sio

スコア1

test CHANGED
File without changes
test CHANGED
@@ -2,209 +2,105 @@
2
2
 
3
3
 
4
4
 
5
- 私は、pyxelを利用して以下のようなゲームを作りたいと考えています。
5
+ 私は、pyxelを利用してゲームを作りたいと考えています。
6
-
7
- (※プログラミングを学び始めて3ヶ月も経っていないため、そこまで難しいものは作れませんでした)
8
-
9
-
10
-
11
- 〜ゲームの内容〜
12
-
13
- 1.青丸と赤丸がランダムに降ってくる。
14
-
15
-
16
-
17
- 2.パッドで青丸を獲得すると+5点(できたら効果音をつける)
18
-
19
-  赤丸に触ってしまうとー3点(できたら効果音をつける)
20
-
21
-
22
-
23
- 3.時間が経つにつれて落ちてくるスピードが上がる。
24
-
25
-
26
-
27
- 4.50点からスタートし、100点でゲームクリア、0点でゲームオーバーとなる。
28
-
29
-  ※ゲームクリア、ゲームオーバーと表示した3秒後にゲームを終了させる
30
-
31
-
32
-
33
- 5.3分経過した時点で「タイムアップ」と表示し、ゲームを終了する
34
6
 
35
7
 
36
8
 
37
9
  ### 発生している問題・エラーメッセージ
38
10
 
39
- ご質問したいのは、4※内と5の処理についてです。
11
+ ご質問したいのは、以下の処理についてです。
40
12
 
41
13
  ・ゲームクリア、ゲームオーバーと表示した3秒後にゲームを終了させる
42
14
 
43
- ・ゲーム開始時点から180秒経過したら「タイムアップ」と表示し、表示した3秒後にゲームを終了する
15
+ ・ゲーム開始時点から一定時間経過したら「タイムアップ」と表示し、表示した3秒後にゲームを終了する
44
16
 
45
17
 
46
18
 
47
19
  以上2点について、datetimeやtimeをインポートする、ということのほかにどのようなことをすれば良いのかがわからず、肝心の文が書けずにいます。
48
20
 
49
- 4※と5の処理を行うためにどのような文を加えると良いのか、お教えいただけるとありがたいです。
21
+ 上記の処理を行うためにどのような文を加えると良いのか、お教えいただけるとありがたいです。
50
-
51
-
52
-
22
+
23
+
24
+
53
- ### 該当のソースコード(変更)
25
+ #該当のソースコード(回答を踏まえて変更済み)
54
26
 
55
27
 
56
28
 
57
29
  ```python
58
30
 
59
- import pyxel
60
-
61
- import math
62
-
63
- import random
64
-
65
- import time
66
-
67
-
68
-
69
- start = time.time()
70
-
71
- timeout = 180
72
-
73
-
74
-
75
- class Ball1:
76
-
77
- speed = 1.1
78
-
79
-
80
-
81
- def __init__(self):
82
-
83
- self.x = random.randint(0, 199)
84
-
85
- self.y = 0
86
-
87
- angle = math.radians(random.randint(30, 150))
88
-
89
- self.vx = math.cos(angle)
90
-
91
- self.vy = math.sin(angle)
92
-
93
-
94
-
95
- def move(self):
96
-
97
- # ボールは下端についたかを示すフラグ
98
-
99
- isLowerEnd = False
100
-
101
- # ボールの位置計算
102
-
103
- self.x += self.vx
104
-
105
- self.y += self.vy
106
-
107
- # 衝突判定と衝突時の処理
108
-
109
- if self.x >= 200 or self.x < 0:
110
-
111
- self.vx *= -1
112
-
113
- if self.y >= 195:
114
-
115
- isLowerEnd = True
116
-
117
- self.y = 0
118
-
119
- self.vx *= Ball1.speed
120
-
121
- self.vy *= Ball1.speed
122
-
123
- # 下端についたか否かを返す
124
-
125
- return isLowerEnd
126
-
127
-
128
-
129
- class Ball2:
130
-
131
- speed = 1.1
132
-
133
-
134
-
135
- def __init__(self):
136
-
137
- self.x = random.randint(0, 199)
138
-
139
- self.y = 0
140
-
141
- angle = math.radians(random.randint(120, 150))
142
-
143
- self.vx = math.cos(angle)
144
-
145
- self.vy = math.sin(angle)
146
-
147
-
148
-
149
- def move(self):
150
-
151
- # ボールは下端についたかを示すフラグ
152
-
153
- isLowerEnd = False
154
-
155
- # ボールの位置計算
156
-
157
- self.x += self.vx
158
-
159
- self.y += self.vy
160
-
161
- # 衝突判定と衝突時の処理
162
-
163
- if self.x >= 200 or self.x < 0:
164
-
165
- self.vx *= -1
166
-
167
- if self.y >= 195:
168
-
169
- isLowerEnd = True
170
-
171
- self.y = 0
172
-
173
- self.vx *= Ball2.speed
174
-
175
- self.vy *= Ball2.speed
176
-
177
- # 下端についたか否かを返す
178
-
179
- return isLowerEnd
180
-
181
-
182
-
183
- class Pad:
184
-
185
- def __init__(self):
186
-
187
- self.x = 100
188
-
189
-
190
-
191
- def catch(self,ball):
192
-
193
- hit = False
194
-
195
- if (self.x-20 <= ball.x < self.x+20):
196
-
197
- hit = True
198
-
199
- return hit
31
+ class Timer:
32
+
33
+ def __init__(self, fps=20):
34
+
35
+ self.fps = fps
36
+
37
+ self.scheduler = scheduler(self.tick)
38
+
39
+
40
+
41
+ def tick(self):
42
+
43
+ return pyxel.frame_count
44
+
45
+
46
+
47
+ def update(self):
48
+
49
+ self.scheduler.run(blocking=False)
50
+
51
+
52
+
53
+ def call_later(self, interval, func, priority=1):
54
+
55
+ self.scheduler.enter(
56
+
57
+ interval*self.fps,
58
+
59
+ priority,
60
+
61
+ func
62
+
63
+ )
64
+
65
+
66
+
67
+ def call_soon(self, func):
68
+
69
+ self.call_later(0, func)
70
+
71
+
72
+
73
+ def set_interval(self, interval, func):
74
+
75
+ def callback():
76
+
77
+ if not func():
78
+
79
+ self.call_later(interval, callback)
80
+
81
+ self.call_later(interval, callback)
82
+
83
+
84
+
85
+ def start_generator(self, gen):
86
+
87
+ def _next():
88
+
89
+ interval = next(gen, None)
90
+
91
+ if interval is not None:
92
+
93
+ self.call_later(interval, _next)
94
+
95
+ self.call_soon(_next)
200
96
 
201
97
 
202
98
 
203
99
  class App():
204
100
 
205
- def __init__(self):
101
+ def __init__(self, fps=20):
206
-
102
+
207
- pyxel.init(200,200)
103
+ pyxel.init(100, 100, fps=fps)
208
104
 
209
105
  pyxel.load("bgm.pyxres")
210
106
 
@@ -212,23 +108,51 @@
212
108
 
213
109
  self.score = 50
214
110
 
215
- self.balls1 = [Ball1(),Ball1(),Ball1()]
111
+ self.balls1 = [Ball1(),Ball1(),Ball1(),Ball1(),Ball1()]
216
112
 
217
113
  self.balls2 = [Ball2(),Ball2()]
218
114
 
219
115
  self.pad = Pad()
220
116
 
117
+ self.timer = Timer(fps = fps)
118
+
119
+ self.timer.call_later(180,pyxel.quit)
120
+
121
+
122
+
123
+ def count():
124
+
125
+ self.num -= 1
126
+
127
+ return self.num >= 150
128
+
129
+ self.timer.set_interval(-1,count)
130
+
131
+
132
+
133
+ def count_gen():
134
+
135
+ yield 150
136
+
137
+ for num in range(30,0,-1):
138
+
139
+ self.num = 150 + num
140
+
141
+ yield 1
142
+
143
+ self.timer.start_generator(count_gen())
144
+
145
+
146
+
147
+
148
+
221
149
  pyxel.run(self.update, self.draw)
222
150
 
223
151
 
224
152
 
225
153
  def update(self):
226
154
 
227
- """フレーム更新時"""
228
-
229
- # ターゲットの位置を変更する
155
+ self.timer.update()
230
-
231
- # 位置計算
232
156
 
233
157
  self.pad.x = pyxel.mouse_x
234
158
 
@@ -236,9 +160,7 @@
236
160
 
237
161
  for b in self.balls1:
238
162
 
239
- isLowerEnd = b.move() # 左右の端で跳ね返る
163
+ isLowerEnd = b.move()
240
-
241
- # +下端にいったら上に戻る.その場合はTrueが返る
242
164
 
243
165
  if isLowerEnd:
244
166
 
@@ -246,15 +168,13 @@
246
168
 
247
169
  self.score += 5
248
170
 
249
- pyxel.play(2,4, loop=False)
171
+ pyxel.play(1,2, loop=False)
250
172
 
251
173
 
252
174
 
253
175
  for c in self.balls2:
254
176
 
255
- isLowerEnd = c.move() # 左右の端で跳ね返る
177
+ isLowerEnd = c.move()
256
-
257
- # +下端にいったら上に戻る.その場合はTrueが返る
258
178
 
259
179
  if isLowerEnd:
260
180
 
@@ -262,318 +182,68 @@
262
182
 
263
183
  self.score -= 3
264
184
 
265
- pyxel.play(2,3, loop=False)
185
+ pyxel.play(1,3, loop=False)
266
186
 
267
187
 
268
188
 
269
189
  def draw(self):
270
190
 
271
- """描画時"""
272
-
273
- # 画面をクリアする
274
-
275
191
  pyxel.cls(7)
276
192
 
277
- # ターゲットを描画する
193
+
278
194
 
279
195
  for b in self.balls1:
280
196
 
281
- pyxel.circ(b.x, b.y, 10, 6)
197
+ pyxel.circ(b.x, b.y, 10, 8)
282
198
 
283
199
  pyxel.rect(self.pad.x-20, 195, 40, 5, 14)
284
200
 
285
- pyxel.text(5,5,str(self.score),10)
201
+ pyxel.text(5,5,str(self.score),1)
286
202
 
287
203
 
288
204
 
289
205
  for c in self.balls2:
290
206
 
291
- pyxel.circ(c.x,c.y,10,8)
207
+ pyxel.circ(c.x,c.y,10,6)
292
208
 
293
209
  pyxel.rect(self.pad.x-20, 195, 40, 5, 14)
294
210
 
295
- pyxel.text(5,5,str(self.score),10)
211
+ pyxel.text(5,5,str(self.score),1)
296
212
 
297
213
 
298
214
 
299
215
  if self.score >= 100:
300
216
 
301
- pyxel.blt(60,80,0,0,0,75,39,7)
217
+ pyxel.blt(50,70,0,0,0,60,30,7)
302
-
218
+
303
- pyxel.quit();
219
+ self.timer.call_later(3,pyxel.quit)
304
220
 
305
221
 
306
222
 
307
223
  elif self.score <= 0:
308
224
 
309
- pyxel.blt(60,80,1,8,0,75,39,7)
225
+ pyxel.blt(50,70,1,0,0,60,30,7)
310
-
311
- pyxel.quit();
226
+
312
-
313
-
314
-
315
- #while True:
316
-
317
- #timer = time.time()
227
+ self.timer.call_later(3,pyxel.quit)
318
-
319
-
320
-
228
+
229
+
230
+
321
- #if timer >= 180:
231
+ elif self.num = 0:
322
-
232
+
323
- pyxel.blt(60,80,2,0,0,79,39,7)
233
+ pyxel.blt(50,80,2,0,0,60,40,7)
324
-
325
- pyxel.quit();
234
+
326
-
327
-
328
-
235
+
236
+
237
+
238
+
239
+
240
+
329
- App()!
241
+ App()
330
242
 
331
243
  ```
332
244
 
333
245
 
334
246
 
335
- #該当のソースコード(変更後)
336
-
337
-
338
-
339
- ```python
340
-
341
- class Timer:
342
-
343
- def __init__(self, fps=20):
344
-
345
- self.fps = fps
346
-
347
- self.scheduler = scheduler(self.tick)
348
-
349
-
350
-
351
- def tick(self):
352
-
353
- return pyxel.frame_count
354
-
355
-
356
-
357
- def update(self):
358
-
359
- self.scheduler.run(blocking=False)
360
-
361
-
362
-
363
- def call_later(self, interval, func, priority=1):
364
-
365
- self.scheduler.enter(
366
-
367
- interval*self.fps,
368
-
369
- priority,
370
-
371
- func
372
-
373
- )
374
-
375
-
376
-
377
- def call_soon(self, func):
378
-
379
- self.call_later(0, func)
380
-
381
-
382
-
383
- def set_interval(self, interval, func):
384
-
385
- def callback():
386
-
387
- if not func():
388
-
389
- self.call_later(interval, callback)
390
-
391
- self.call_later(interval, callback)
392
-
393
-
394
-
395
- def start_generator(self, gen):
396
-
397
- def _next():
398
-
399
- interval = next(gen, None)
400
-
401
- if interval is not None:
402
-
403
- self.call_later(interval, _next)
404
-
405
- self.call_soon(_next)
406
-
407
-
408
-
409
- class App():
410
-
411
- def __init__(self, fps=20):
412
-
413
- pyxel.init(200, 200, fps=fps)
414
-
415
- pyxel.load("bgm.pyxres")
416
-
417
- pyxel.playm(0, loop=True)
418
-
419
- self.score = 50
420
-
421
- self.balls1 = [Ball1(),Ball1(),Ball1()]
422
-
423
- self.balls2 = [Ball2(),Ball2(),Ball2()]
424
-
425
- self.pad = Pad()
426
-
427
- self.timer = Timer(fps = fps)
428
-
429
- self.timer.call_later(180,pyxel.quit)
430
-
431
-
432
-
433
- def count():
434
-
435
- self.num -= 1
436
-
437
- return self.num >= 150
438
-
439
- self.timer.set_interval(-1,count)
440
-
441
-
442
-
443
- def count_gen():
444
-
445
- yield 150
446
-
447
- for num in range(30,0,-1):
448
-
449
- self.num = 150 + num
450
-
451
- yield 1
452
-
453
- self.timer.start_generator(count_gen())
454
-
455
-
456
-
457
-
458
-
459
- pyxel.run(self.update, self.draw)
460
-
461
-
462
-
463
- def update(self):
464
-
465
- """フレーム更新時"""
466
-
467
- # ターゲットの位置を変更する
468
-
469
- # 位置計算
470
-
471
- self.timer.update()
472
-
473
- self.pad.x = pyxel.mouse_x
474
-
475
-
476
-
477
- for b in self.balls1:
478
-
479
- isLowerEnd = b.move() # 左右の端で跳ね返る
480
-
481
- # +下端にいったら上に戻る.その場合はTrueが返る
482
-
483
- if isLowerEnd:
484
-
485
- if self.pad.catch(b):
486
-
487
- self.score += 5
488
-
489
- pyxel.play(3,4, loop=False)
490
-
491
-
492
-
493
- for c in self.balls2:
494
-
495
- isLowerEnd = c.move() # 左右の端で跳ね返る
496
-
497
- # +下端にいったら上に戻る.その場合はTrueが返る
498
-
499
- if isLowerEnd:
500
-
501
- if self.pad.catch(c):
502
-
503
- self.score -= 3
504
-
505
- pyxel.play(3,3, loop=False)
506
-
507
-
508
-
509
- def draw(self):
510
-
511
- """描画時"""
512
-
513
- # 画面をクリアする
514
-
515
- pyxel.cls(7)
516
-
517
- pyxel.blt(0,0,0,0,48,207,247)
518
-
519
- # ターゲットを描画する
520
-
521
- for b in self.balls1:
522
-
523
- pyxel.circ(b.x, b.y, 10, 6)
524
-
525
- pyxel.rect(self.pad.x-20, 195, 40, 5, 14)
526
-
527
- pyxel.text(5,5,str(self.score),10)
528
-
529
- pyxel.text(10,10,str(self.num),8)
530
-
531
-
532
-
533
- for c in self.balls2:
534
-
535
- pyxel.circ(c.x,c.y,10,8)
536
-
537
- pyxel.rect(self.pad.x-20, 195, 40, 5, 14)
538
-
539
- pyxel.text(5,5,str(self.score),10)
540
-
541
- pyxel.text(10,10,str(self.num),8)
542
-
543
-
544
-
545
- if self.score >= 100:
546
-
547
- pyxel.blt(60,80,0,0,0,75,39,7)
548
-
549
- self.timer.call_later(3,pyxel.quit)
550
-
551
-
552
-
553
- elif self.score <= 0:
554
-
555
- pyxel.blt(60,80,1,8,0,75,39,7)
556
-
557
- self.timer.call_later(3,pyxel.quit)
558
-
559
-
560
-
561
- elif self.num = 0:
562
-
563
- pyxel.blt(60,80,2,0,0,79,39,7)
564
-
565
-
566
-
567
-
568
-
569
-
570
-
571
- App()
572
-
573
- ```
574
-
575
-
576
-
577
247
  ### 試したこと
578
248
 
579
249
 

4

回答を踏まえてコードを変更

2020/12/31 15:27

投稿

A_sio
A_sio

スコア1

test CHANGED
File without changes
test CHANGED
@@ -430,10 +430,6 @@
430
430
 
431
431
 
432
432
 
433
- self.num = 0
434
-
435
-
436
-
437
433
  def count():
438
434
 
439
435
  self.num -= 1
@@ -448,7 +444,7 @@
448
444
 
449
445
  yield 150
450
446
 
451
- for num in range(30):
447
+ for num in range(30,0,-1):
452
448
 
453
449
  self.num = 150 + num
454
450
 
@@ -518,6 +514,8 @@
518
514
 
519
515
  pyxel.cls(7)
520
516
 
517
+ pyxel.blt(0,0,0,0,48,207,247)
518
+
521
519
  # ターゲットを描画する
522
520
 
523
521
  for b in self.balls1:
@@ -560,7 +558,7 @@
560
558
 
561
559
 
562
560
 
563
- else self.num = 0:
561
+ elif self.num = 0:
564
562
 
565
563
  pyxel.blt(60,80,2,0,0,79,39,7)
566
564
 

3

回答を踏まえてコードを変更

2020/12/31 06:26

投稿

A_sio
A_sio

スコア1

test CHANGED
File without changes
test CHANGED
@@ -50,7 +50,7 @@
50
50
 
51
51
 
52
52
 
53
- ### 該当のソースコード
53
+ ### 該当のソースコード(変更前)
54
54
 
55
55
 
56
56
 
@@ -332,13 +332,247 @@
332
332
 
333
333
 
334
334
 
335
+ #該当のソースコード(変更後)
336
+
337
+
338
+
339
+ ```python
340
+
341
+ class Timer:
342
+
343
+ def __init__(self, fps=20):
344
+
345
+ self.fps = fps
346
+
347
+ self.scheduler = scheduler(self.tick)
348
+
349
+
350
+
351
+ def tick(self):
352
+
353
+ return pyxel.frame_count
354
+
355
+
356
+
357
+ def update(self):
358
+
359
+ self.scheduler.run(blocking=False)
360
+
361
+
362
+
335
- ![イメージ説明](b3c53a3657e57ce87f803969c01fc37a.jpeg)
363
+ def call_later(self, interval, func, priority=1):
364
+
336
-
365
+ self.scheduler.enter(
366
+
367
+ interval*self.fps,
368
+
369
+ priority,
370
+
371
+ func
372
+
373
+ )
374
+
375
+
376
+
337
- ![イメージ説明](a6f64bd4fbcf1ac936fa867fda3c8729.jpeg)
377
+ def call_soon(self, func):
378
+
338
-
379
+ self.call_later(0, func)
380
+
381
+
382
+
339
- ![イメージ説明](b9c3e5e4421b2a5d25ce7f0b33e6b853.jpeg)
383
+ def set_interval(self, interval, func):
384
+
340
-
385
+ def callback():
386
+
387
+ if not func():
388
+
389
+ self.call_later(interval, callback)
390
+
391
+ self.call_later(interval, callback)
392
+
393
+
394
+
395
+ def start_generator(self, gen):
396
+
397
+ def _next():
398
+
399
+ interval = next(gen, None)
400
+
401
+ if interval is not None:
402
+
403
+ self.call_later(interval, _next)
404
+
405
+ self.call_soon(_next)
406
+
407
+
408
+
409
+ class App():
410
+
411
+ def __init__(self, fps=20):
412
+
413
+ pyxel.init(200, 200, fps=fps)
414
+
415
+ pyxel.load("bgm.pyxres")
416
+
417
+ pyxel.playm(0, loop=True)
418
+
419
+ self.score = 50
420
+
421
+ self.balls1 = [Ball1(),Ball1(),Ball1()]
422
+
423
+ self.balls2 = [Ball2(),Ball2(),Ball2()]
424
+
425
+ self.pad = Pad()
426
+
427
+ self.timer = Timer(fps = fps)
428
+
429
+ self.timer.call_later(180,pyxel.quit)
430
+
431
+
432
+
433
+ self.num = 0
434
+
435
+
436
+
437
+ def count():
438
+
439
+ self.num -= 1
440
+
441
+ return self.num >= 150
442
+
443
+ self.timer.set_interval(-1,count)
444
+
445
+
446
+
447
+ def count_gen():
448
+
449
+ yield 150
450
+
451
+ for num in range(30):
452
+
453
+ self.num = 150 + num
454
+
455
+ yield 1
456
+
457
+ self.timer.start_generator(count_gen())
458
+
459
+
460
+
461
+
462
+
463
+ pyxel.run(self.update, self.draw)
464
+
465
+
466
+
467
+ def update(self):
468
+
469
+ """フレーム更新時"""
470
+
471
+ # ターゲットの位置を変更する
472
+
473
+ # 位置計算
474
+
475
+ self.timer.update()
476
+
477
+ self.pad.x = pyxel.mouse_x
478
+
479
+
480
+
481
+ for b in self.balls1:
482
+
483
+ isLowerEnd = b.move() # 左右の端で跳ね返る
484
+
485
+ # +下端にいったら上に戻る.その場合はTrueが返る
486
+
487
+ if isLowerEnd:
488
+
489
+ if self.pad.catch(b):
490
+
491
+ self.score += 5
492
+
493
+ pyxel.play(3,4, loop=False)
494
+
495
+
496
+
497
+ for c in self.balls2:
498
+
499
+ isLowerEnd = c.move() # 左右の端で跳ね返る
500
+
501
+ # +下端にいったら上に戻る.その場合はTrueが返る
502
+
503
+ if isLowerEnd:
504
+
505
+ if self.pad.catch(c):
506
+
507
+ self.score -= 3
508
+
509
+ pyxel.play(3,3, loop=False)
510
+
511
+
512
+
513
+ def draw(self):
514
+
515
+ """描画時"""
516
+
517
+ # 画面をクリアする
518
+
519
+ pyxel.cls(7)
520
+
521
+ # ターゲットを描画する
522
+
523
+ for b in self.balls1:
524
+
525
+ pyxel.circ(b.x, b.y, 10, 6)
526
+
341
- ![イメージ説明](4c15a1e90b87ec5c105f74930f47fa6a.png)
527
+ pyxel.rect(self.pad.x-20, 195, 40, 5, 14)
528
+
529
+ pyxel.text(5,5,str(self.score),10)
530
+
531
+ pyxel.text(10,10,str(self.num),8)
532
+
533
+
534
+
535
+ for c in self.balls2:
536
+
537
+ pyxel.circ(c.x,c.y,10,8)
538
+
539
+ pyxel.rect(self.pad.x-20, 195, 40, 5, 14)
540
+
541
+ pyxel.text(5,5,str(self.score),10)
542
+
543
+ pyxel.text(10,10,str(self.num),8)
544
+
545
+
546
+
547
+ if self.score >= 100:
548
+
549
+ pyxel.blt(60,80,0,0,0,75,39,7)
550
+
551
+ self.timer.call_later(3,pyxel.quit)
552
+
553
+
554
+
555
+ elif self.score <= 0:
556
+
557
+ pyxel.blt(60,80,1,8,0,75,39,7)
558
+
559
+ self.timer.call_later(3,pyxel.quit)
560
+
561
+
562
+
563
+ else self.num = 0:
564
+
565
+ pyxel.blt(60,80,2,0,0,79,39,7)
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+ App()
574
+
575
+ ```
342
576
 
343
577
 
344
578
 

2

ソースコードの書式の改善

2020/12/31 04:22

投稿

A_sio
A_sio

スコア1

test CHANGED
File without changes
test CHANGED
@@ -56,8 +56,6 @@
56
56
 
57
57
  ```python
58
58
 
59
- ソースコード```
60
-
61
59
  import pyxel
62
60
 
63
61
  import math
@@ -330,6 +328,8 @@
330
328
 
331
329
  App()!
332
330
 
331
+ ```
332
+
333
333
 
334
334
 
335
335
  ![イメージ説明](b3c53a3657e57ce87f803969c01fc37a.jpeg)

1

ご指摘いただきありがとうございます。ご不便をおかけし、大変申し訳ありません。書式がうまく改善できなかったので、画像を挿入しました。書式の変更ができるまで、ひとまずこちらを見ていただけると大変助かります

2020/12/30 17:07

投稿

A_sio
A_sio

スコア1

test CHANGED
File without changes
test CHANGED
@@ -96,12 +96,18 @@
96
96
 
97
97
  def move(self):
98
98
 
99
+ # ボールは下端についたかを示すフラグ
100
+
99
101
  isLowerEnd = False
100
102
 
103
+ # ボールの位置計算
104
+
101
105
  self.x += self.vx
102
106
 
103
107
  self.y += self.vy
104
108
 
109
+ # 衝突判定と衝突時の処理
110
+
105
111
  if self.x >= 200 or self.x < 0:
106
112
 
107
113
  self.vx *= -1
@@ -116,6 +122,8 @@
116
122
 
117
123
  self.vy *= Ball1.speed
118
124
 
125
+ # 下端についたか否かを返す
126
+
119
127
  return isLowerEnd
120
128
 
121
129
 
@@ -142,12 +150,18 @@
142
150
 
143
151
  def move(self):
144
152
 
153
+ # ボールは下端についたかを示すフラグ
154
+
145
155
  isLowerEnd = False
146
156
 
157
+ # ボールの位置計算
158
+
147
159
  self.x += self.vx
148
160
 
149
161
  self.y += self.vy
150
162
 
163
+ # 衝突判定と衝突時の処理
164
+
151
165
  if self.x >= 200 or self.x < 0:
152
166
 
153
167
  self.vx *= -1
@@ -162,6 +176,8 @@
162
176
 
163
177
  self.vy *= Ball2.speed
164
178
 
179
+ # 下端についたか否かを返す
180
+
165
181
  return isLowerEnd
166
182
 
167
183
 
@@ -210,13 +226,21 @@
210
226
 
211
227
  def update(self):
212
228
 
229
+ """フレーム更新時"""
230
+
231
+ # ターゲットの位置を変更する
232
+
233
+ # 位置計算
234
+
213
235
  self.pad.x = pyxel.mouse_x
214
236
 
215
237
 
216
238
 
217
239
  for b in self.balls1:
218
240
 
219
- isLowerEnd = b.move()
241
+ isLowerEnd = b.move() # 左右の端で跳ね返る
242
+
243
+ # +下端にいったら上に戻る.その場合はTrueが返る
220
244
 
221
245
  if isLowerEnd:
222
246
 
@@ -230,7 +254,9 @@
230
254
 
231
255
  for c in self.balls2:
232
256
 
233
- isLowerEnd = c.move()
257
+ isLowerEnd = c.move() # 左右の端で跳ね返る
258
+
259
+ # +下端にいったら上に戻る.その場合はTrueが返る
234
260
 
235
261
  if isLowerEnd:
236
262
 
@@ -244,8 +270,14 @@
244
270
 
245
271
  def draw(self):
246
272
 
273
+ """描画時"""
274
+
275
+ # 画面をクリアする
276
+
247
277
  pyxel.cls(7)
248
278
 
279
+ # ターゲットを描画する
280
+
249
281
  for b in self.balls1:
250
282
 
251
283
  pyxel.circ(b.x, b.y, 10, 6)
@@ -282,13 +314,13 @@
282
314
 
283
315
 
284
316
 
285
- while True:
317
+ #while True:
286
-
318
+
287
- timer = time.time()
319
+ #timer = time.time()
288
-
289
-
290
-
320
+
321
+
322
+
291
- if timer >= 180:
323
+ #if timer >= 180:
292
324
 
293
325
  pyxel.blt(60,80,2,0,0,79,39,7)
294
326
 
@@ -296,7 +328,19 @@
296
328
 
297
329
 
298
330
 
299
- App()
331
+ App()!
332
+
333
+
334
+
335
+ ![イメージ説明](b3c53a3657e57ce87f803969c01fc37a.jpeg)
336
+
337
+ ![イメージ説明](a6f64bd4fbcf1ac936fa867fda3c8729.jpeg)
338
+
339
+ ![イメージ説明](b9c3e5e4421b2a5d25ce7f0b33e6b853.jpeg)
340
+
341
+ ![イメージ説明](4c15a1e90b87ec5c105f74930f47fa6a.png)
342
+
343
+
300
344
 
301
345
  ### 試したこと
302
346