質問編集履歴

9

エラー発生のタイミング

2020/03/12 07:00

投稿

Picmin3daisuki
Picmin3daisuki

スコア11

test CHANGED
File without changes
test CHANGED
@@ -402,4 +402,10 @@
402
402
 
403
403
 
404
404
 
405
+ なお、エラーが起こるのは敵機チェック()でifがなりたってからで、
406
+
407
+ 敵弾を動かす()が実行された後ではないところも謎
408
+
409
+
410
+
405
411
  Python 3.8.2 Windows10 32bit

8

作っているコードをすべて書いた

2020/03/12 07:00

投稿

Picmin3daisuki
Picmin3daisuki

スコア11

test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,330 @@
6
6
 
7
7
 
8
8
 
9
+ ###作っているコード
10
+
11
+ ```Python
12
+
13
+ import time
14
+
15
+ from random import randrange,randint
16
+
17
+ from tkinter import Canvas,Tk,messagebox,font
18
+
19
+
20
+
21
+ キャンバス幅 = 800
22
+
23
+ キャンバス高さ = 400
24
+
25
+
26
+
27
+ root = Tk()
28
+
29
+ c = Canvas(root,width=キャンバス幅,height=キャンバス高さ,background='dark blue')
30
+
31
+ c.create_oval(400,100,480,180,fill='deep sky blue',width=0)
32
+
33
+ c.create_oval(-80,-80,120,120,fill='orange',width=0)
34
+
35
+ c.pack()
36
+
37
+
38
+
39
+ 敵機色 = 'cyan'
40
+
41
+ 敵機幅 = 50
42
+
43
+ 敵機高さ = 35
44
+
45
+ 敵機初期位置x1 = 20
46
+
47
+ 敵機初期位置y1 = キャンバス高さ / 2 - 敵機高さ / 2
48
+
49
+ 敵機初期位置x2 = 敵機初期位置x1 + 敵機幅
50
+
51
+ 敵機初期位置y2 = 敵機初期位置y1 + 敵機高さ
52
+
53
+ 敵機 = c.create_rectangle(敵機初期位置x1,敵機初期位置y1,敵機初期位置x2,敵機初期位置y2,fill=敵機色,width=1)
54
+
55
+ 難易度 = 0.9
56
+
57
+
58
+
59
+ 自機色 = 'green'
60
+
61
+ 自機幅 = 50
62
+
63
+ 自機高さ = 35
64
+
65
+ 自機初期位置x1 = キャンバス幅 - 自機幅 - 20
66
+
67
+ 自機初期位置y1 = キャンバス高さ / 2 - 自機高さ / 2
68
+
69
+ 自機初期位置x2 = 自機初期位置x1 + 自機幅
70
+
71
+ 自機初期位置y2 = 自機初期位置y1 + 自機高さ
72
+
73
+ 自機 = c.create_rectangle(自機初期位置x1,自機初期位置y1,自機初期位置x2,自機初期位置y2,fill=自機色,width=1)
74
+
75
+
76
+
77
+ game_font = font.nametofont('TkFixedFont')
78
+
79
+ game_font.config(size=25)
80
+
81
+
82
+
83
+ ライフ = 1
84
+
85
+ 敵機ライフ = 1
86
+
87
+ ライフテキスト = c.create_text(10,キャンバス高さ - 10,anchor='sw',font=game_font,fill='white',text='プレイヤー2のライフ:' + str(敵機ライフ))
88
+
89
+ 敵機ライフテキスト = c.create_text(キャンバス幅 - 10,10,anchor='ne',font=game_font,fill='white',text='プレイヤー1のライフ:' + str(ライフ))
90
+
91
+
92
+
93
+ 弾速さ = 20
94
+
95
+
96
+
97
+ 弾リスト = []
98
+
99
+ 敵弾リスト = []
100
+
101
+
102
+
103
+ def 敵機上に動く(イベント):
104
+
105
+ (敵機x1,敵機y1,敵機x2,敵機y2) = c.coords(敵機)
106
+
107
+ if 敵機y1 > 20:
108
+
109
+ c.move(敵機,0,-20)
110
+
111
+
112
+
113
+ def 敵機下に動く(イベント):
114
+
115
+ (敵機x1,敵機y1,敵機x2,敵機y2) = c.coords(敵機)
116
+
117
+ if 敵機y2 < キャンバス高さ - 20:
118
+
119
+ c.move(敵機,0,20)
120
+
121
+
122
+
123
+ def 敵弾を作る(敵弾):
124
+
125
+ (敵機x1,敵機y1,敵機x2,敵機y2) = c.coords(敵機)
126
+
127
+ 敵弾x = 敵機x2
128
+
129
+ 敵弾y = (敵機y1 + 敵機y2) / 2
130
+
131
+ 敵弾 = c.create_oval(敵弾x,敵弾y - 5,敵弾x + 10,敵弾y + 5,fill='gold',width=0)
132
+
133
+ 敵弾リスト.append(敵弾)
134
+
135
+
136
+
137
+ def 敵弾を動かす():
138
+
139
+ for 敵弾 in 敵弾リスト:
140
+
141
+ (敵弾x1,敵弾y1,敵弾x2,敵弾y2) = c.coords(敵弾)
142
+
143
+ c.move(敵弾,10,0)
144
+
145
+ if 敵弾y2 > キャンバス幅:
146
+
147
+ 敵弾リスト.remove(敵弾)
148
+
149
+ c.delete(敵弾)
150
+
151
+ root.after(弾速さ,敵弾を動かす)
152
+
153
+
154
+
155
+ def 上に動く(イベント):
156
+
157
+ (x1,y1,x2,y2) = c.coords(自機)
158
+
159
+ if y1 > 20:
160
+
161
+ c.move(自機,0,-20)
162
+
163
+
164
+
165
+ def 下に動く(イベント):
166
+
167
+ (x1,y1,x2,y2) = c.coords(自機)
168
+
169
+ if y2 < キャンバス高さ - 20:
170
+
171
+ c.move(自機,0,20)
172
+
173
+
174
+
175
+ def 弾を作る(弾):
176
+
177
+ (x1,y1,x2,y2) = c.coords(自機)
178
+
179
+ 弾x = x1
180
+
181
+ 弾y = (y1 + y2) / 2
182
+
183
+ 弾 = c.create_oval(弾x,弾y - 5,弾x + 10,弾y + 5,fill='gold',width=0)
184
+
185
+ 弾リスト.append(弾)
186
+
187
+
188
+
189
+ def 弾を動かす():
190
+
191
+ for 弾 in 弾リスト:
192
+
193
+ (弾x1,弾y1,弾x2,弾y2) = c.coords(弾)
194
+
195
+ c.move(弾,-10,0)
196
+
197
+ if 弾y1 < 0:
198
+
199
+ 弾リスト.remove(弾)
200
+
201
+ c.delete(弾)
202
+
203
+ root.after(弾速さ,弾を動かす)
204
+
205
+
206
+
207
+ def チェック():
208
+
209
+ for 弾 in 弾リスト:
210
+
211
+ (弾x1,弾y1,弾x2,弾y2) = c.coords(弾)
212
+
213
+ (敵機x1,敵機y1,敵機x2,敵機y2) = c.coords(敵機)
214
+
215
+ if 弾x1 + 10 > 敵機x1 and 弾x2 - 10 < 敵機x2 and 弾y1 > 敵機y1 and 弾y2 < 敵機y2:
216
+
217
+ 弾リスト.remove(弾)
218
+
219
+ c.delete(弾)
220
+
221
+ 敵機ライフを失う()
222
+
223
+ root.after(1,チェック)
224
+
225
+
226
+
227
+ def 敵機チェック():
228
+
229
+ for 敵弾 in 敵弾リスト:
230
+
231
+ (敵弾x1,敵弾y1,敵弾x2,敵弾y2) = c.coords(敵弾)
232
+
233
+ (自機x1,自機y1,自機x2,自機y2) = c.coords(自機)
234
+
235
+ if 敵弾x1 + 10 > 自機x1 and 敵弾x2 - 10 < 自機x2 and 敵弾y1 > 自機y1 and 敵弾y2 < 自機y2:
236
+
237
+ c.delete(敵弾)
238
+
239
+ ライフを失う()
240
+
241
+ return 敵弾x1,敵弾y1,敵弾x2,敵弾y2
242
+
243
+ root.after(1,敵機チェック)
244
+
245
+
246
+
247
+ def ライフを失う():
248
+
249
+ global 敵機ライフ
250
+
251
+ 敵機ライフ -= 1
252
+
253
+ c.itemconfigure(敵機ライフテキスト,text='プレーヤー1のライフ:' + str(敵機ライフ))
254
+
255
+
256
+
257
+ def 敵機ライフを失う():
258
+
259
+ global ライフ
260
+
261
+ ライフ -= 1
262
+
263
+ c.itemconfigure(ライフテキスト,text='プレーヤー2のライフ:' + str(ライフ))
264
+
265
+
266
+
267
+ def チェック2():
268
+
269
+ if ライフ < 1:
270
+
271
+ c.delete()
272
+
273
+ messagebox.showinfo('ゲームオーバー!','勝者は' + 'プレイヤー1' + 'でした')
274
+
275
+ root.destroy()
276
+
277
+ time.sleep(100000)
278
+
279
+ root.after(1,チェック2)
280
+
281
+
282
+
283
+ def 敵機チェック2():
284
+
285
+ if 敵機ライフ < 1:
286
+
287
+ c.delete()
288
+
289
+ messagebox.showinfo('ゲームオーバー!','勝者は' + 'プレイヤー2' + 'でした')
290
+
291
+ root.destroy()
292
+
293
+ time.sleep(100000)
294
+
295
+ root.after(1,敵機チェック2)
296
+
297
+
298
+
299
+ c.bind('<Up>',上に動く)
300
+
301
+ c.bind('<Down>',下に動く)
302
+
303
+ c.bind('<space>',弾を作る)
304
+
305
+ c.bind('<w>',敵機上に動く)
306
+
307
+ c.bind('<s>',敵機下に動く)
308
+
309
+ c.bind('<c>',敵弾を作る)
310
+
311
+ c.focus_set()
312
+
313
+
314
+
315
+ root.after(1000,敵弾を動かす)
316
+
317
+ root.after(1000,弾を動かす)
318
+
319
+ root.after(1,チェック)
320
+
321
+ root.after(1,敵機チェック)
322
+
323
+ root.after(1,チェック2)
324
+
325
+ root.after(1,敵機チェック2)
326
+
327
+ root.mainloop()
328
+
329
+ ```
330
+
331
+
332
+
9
333
  ### 問題点
10
334
 
11
335
 

7

エラー発生場所の明記

2020/03/12 05:37

投稿

Picmin3daisuki
Picmin3daisuki

スコア11

test CHANGED
File without changes
test CHANGED
@@ -58,7 +58,11 @@
58
58
 
59
59
 
60
60
 
61
+ だと
62
+
63
+ (敵弾x1,敵弾y1,敵弾x2,敵弾y2) = c.coords(敵弾)
64
+
61
- だとエラーが発生する
65
+ の位置にエラーが発生する
62
66
 
63
67
 
64
68
 

6

Pythonの記述通りにした

2020/03/11 09:56

投稿

Picmin3daisuki
Picmin3daisuki

スコア11

test CHANGED
File without changes
test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  for 敵弾 in 敵弾リスト:
44
44
 
45
- "(敵弾x1,敵弾y1,敵弾x2,敵弾y2) = c.coords(敵弾)"
45
+ (敵弾x1,敵弾y1,敵弾x2,敵弾y2) = c.coords(敵弾)
46
46
 
47
47
  c.move(敵弾,0,10)
48
48
 

5

指摘を修正した

2020/03/11 05:07

投稿

Picmin3daisuki
Picmin3daisuki

スコア11

test CHANGED
File without changes
test CHANGED
@@ -9,6 +9,8 @@
9
9
  ### 問題点
10
10
 
11
11
 
12
+
13
+ ```Python
12
14
 
13
15
  def 弾を動かす():
14
16
 
@@ -26,11 +28,15 @@
26
28
 
27
29
  root.after(10,弾を動かす)
28
30
 
31
+ ```
32
+
29
33
 
30
34
 
31
35
  だと問題なく動くのに、
32
36
 
33
37
 
38
+
39
+ ```Python
34
40
 
35
41
  def 敵弾を動かす():
36
42
 
@@ -47,6 +53,8 @@
47
53
  c.delete(敵弾)
48
54
 
49
55
  root.after(10,敵弾を動かす)
56
+
57
+ ```
50
58
 
51
59
 
52
60
 

4

問題点がわからない点について明記した

2020/03/10 16:05

投稿

Picmin3daisuki
Picmin3daisuki

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,11 @@
1
+ ### 前提
2
+
3
+
4
+
5
+ インデントはちゃんとできていて、問題点が見つからない
6
+
7
+
8
+
1
9
  ### 問題点
2
10
 
3
11
 

3

エラーの発生する条件をわかる範囲で書いた

2020/03/10 15:10

投稿

Picmin3daisuki
Picmin3daisuki

スコア11

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,11 @@
18
18
 
19
19
  root.after(10,弾を動かす)
20
20
 
21
+
22
+
21
- では問題なく動くのに、
23
+ だと問題なく動くのに、
24
+
25
+
22
26
 
23
27
  def 敵弾を動かす():
24
28
 
@@ -35,6 +39,8 @@
35
39
  c.delete(敵弾)
36
40
 
37
41
  root.after(10,敵弾を動かす)
42
+
43
+
38
44
 
39
45
  だとエラーが発生する
40
46
 

2

どんな状況でエラーが発生するか書いた

2020/03/10 15:06

投稿

Picmin3daisuki
Picmin3daisuki

スコア11

test CHANGED
@@ -1 +1 @@
1
- なぜか同じようなことをしていても片方だけにエラーがてしまう
1
+ なぜか同じようなことをしていても片方だけにエラーが発生してしまう
test CHANGED
@@ -1,4 +1,4 @@
1
- ### 前提
1
+ ### 問題点
2
2
 
3
3
 
4
4
 
@@ -18,21 +18,7 @@
18
18
 
19
19
  root.after(10,弾を動かす)
20
20
 
21
- では問題なく動く
21
+ では問題なく動くのに、
22
-
23
-
24
-
25
- ### 発生している問題・エラーメッセージ
26
-
27
-
28
-
29
- ValueError: not enough values to unpack (expected 4, got 0)
30
-
31
-
32
-
33
- ### 該当のソースコード
34
-
35
-
36
22
 
37
23
  def 敵弾を動かす():
38
24
 
@@ -50,6 +36,16 @@
50
36
 
51
37
  root.after(10,敵弾を動かす)
52
38
 
39
+ だとエラーが発生する
40
+
41
+
42
+
43
+ ### 発生している問題・エラーメッセージ
44
+
45
+
46
+
47
+ ValueError: not enough values to unpack (expected 4, got 0)
48
+
53
49
 
54
50
 
55
51
  ### 補足情報(FW/ツールのバージョンなど)

1

Pythonのバージョン

2020/03/10 15:03

投稿

Picmin3daisuki
Picmin3daisuki

スコア11

test CHANGED
File without changes
test CHANGED
@@ -56,4 +56,4 @@
56
56
 
57
57
 
58
58
 
59
- Python Windows10 32bit
59
+ Python 3.8.2 Windows10 32bit