質問編集履歴
3
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,36 +18,39 @@
|
|
18
18
|
import pyxel
|
19
19
|
|
20
20
|
class App:
|
21
|
-
def
|
21
|
+
def __init__(self):
|
22
22
|
pyxel.init(160, 120, caption="Invadors game",
|
23
23
|
palette=[1],quit_key=pyxel.KEY_NONE)
|
24
|
-
|
25
24
|
#Player
|
25
|
+
class player:
|
26
|
-
def
|
26
|
+
def __init__(self):
|
27
27
|
pyxel.image(0).load(0, 0, "./player.png")
|
28
28
|
playerX,playerY = 370, 480
|
29
29
|
playerX_change = 0
|
30
|
-
|
30
|
+
class sound:
|
31
|
-
def
|
31
|
+
def __init__(self):
|
32
32
|
self.music_player = MusicPlayer('laser.wav')
|
33
33
|
|
34
34
|
#kadai
|
35
|
+
class kadai:
|
35
|
-
def
|
36
|
+
def __init__(self):
|
36
|
-
|
37
|
+
pyxel.image(1).load(0, 0, "./kadai.png")
|
37
38
|
kadaiX = random.randint(0, 736)
|
38
39
|
kadaiY = random.randint(50, 150)
|
39
40
|
kadaiX_change, kadaiY_change = 4, 40
|
40
41
|
|
41
42
|
#Bullet
|
43
|
+
class Bullet:
|
42
|
-
def
|
44
|
+
def __init__(self):
|
43
|
-
|
45
|
+
pyxel.image(2).load(0, 0, "./bullet.png")
|
44
46
|
bulletX, bulletY = 0, 480
|
45
47
|
bulletX_change, bulletY_change = 0, 3
|
46
48
|
bullet_state = 'ready'
|
47
49
|
|
48
50
|
|
49
51
|
#Score
|
52
|
+
class score:
|
50
|
-
score_value = 0
|
53
|
+
score_value = 0
|
51
54
|
|
52
55
|
def player(x, y):
|
53
56
|
screen.blit(playerImg, (x, y))
|
@@ -67,7 +70,7 @@
|
|
67
70
|
else:
|
68
71
|
return False
|
69
72
|
|
70
|
-
def
|
73
|
+
def __init__(self):
|
71
74
|
running = True
|
72
75
|
while running:
|
73
76
|
screen.fill((0, 0, 0))
|
@@ -92,7 +95,7 @@
|
|
92
95
|
playerX_change = 0
|
93
96
|
|
94
97
|
#Player
|
95
|
-
def
|
98
|
+
def __init__(player):
|
96
99
|
playerX += playerX_change
|
97
100
|
if playerX <= 0:
|
98
101
|
playerX = 0
|
2
コードの追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -147,4 +147,142 @@
|
|
147
147
|
|
148
148
|
ここに問題に対して試したことを記載してください。
|
149
149
|
|
150
|
-
### 補足情報(FW/ツールのバージョンなど)
|
150
|
+
### 補足情報(FW/ツールのバージョンなど)
|
151
|
+
最終目標としては、Pygameで書かれたコードを同じ動作をするようにpyxelで書き換えることです。
|
152
|
+
```Pygame
|
153
|
+
import pygame
|
154
|
+
from pygame import mixer
|
155
|
+
import random
|
156
|
+
import math
|
157
|
+
|
158
|
+
|
159
|
+
pygame.init()
|
160
|
+
|
161
|
+
|
162
|
+
screen = pygame.display.set_mode((800, 600))
|
163
|
+
screen.fill((150,150,150))
|
164
|
+
pygame.display.set_caption('Invaders game')
|
165
|
+
|
166
|
+
|
167
|
+
#Player
|
168
|
+
playerimg = pygame.image.load('player.png')
|
169
|
+
playerX,playerY = 370, 480
|
170
|
+
playerX_change = 0
|
171
|
+
|
172
|
+
|
173
|
+
#mixer.Sound('laser.wav').play()
|
174
|
+
|
175
|
+
|
176
|
+
#Enemy
|
177
|
+
enemyImg = pygame.image.load('enemy.png')
|
178
|
+
enemyX = random.randint(0, 736)
|
179
|
+
enemyY = random.randint(50, 150)
|
180
|
+
enemyX_change, enemyY_change = 4, 40
|
181
|
+
|
182
|
+
|
183
|
+
#Bullet
|
184
|
+
bulletImg = pygame.image.load('bullet.png')
|
185
|
+
bulletX, bulletY = 0, 480
|
186
|
+
bulletX_change, bulletY_change = 0, 3
|
187
|
+
bullet_state = 'ready'
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
|
194
|
+
#Score
|
195
|
+
score_value = 0
|
196
|
+
|
197
|
+
|
198
|
+
def player(x, y):
|
199
|
+
screen.blit(playerImg, (x, y))
|
200
|
+
|
201
|
+
|
202
|
+
def enemy(x, y):
|
203
|
+
screen.blit(enemyImg, (x, y))
|
204
|
+
|
205
|
+
def fire_bullet(x, y):
|
206
|
+
global bullet_state
|
207
|
+
bullet_state = 'fire'
|
208
|
+
screen.blit(bulletImg, (x + 16, y + 10))
|
209
|
+
|
210
|
+
def isCollision(enemyX, enemyY, bulletX, bulletY):
|
211
|
+
distance = math.sqrt(math.pow(enemyX - bulletX, 2) + math.pow(enemyY - bulletY, 2))
|
212
|
+
if distance < 27:
|
213
|
+
return true
|
214
|
+
else:
|
215
|
+
return False
|
216
|
+
|
217
|
+
|
218
|
+
running = True
|
219
|
+
while running:
|
220
|
+
screen.fill((0, 0, 0))
|
221
|
+
#font = pygame.font.SysFont(None, 80)
|
222
|
+
#message = font.render('Hello World', False, (255, 255, 255))
|
223
|
+
#screen.blit(message, (20,50))
|
224
|
+
for event in pygame.event.get():
|
225
|
+
if event.type == pygame.QUIT:
|
226
|
+
running = False
|
227
|
+
if event.type == pygame.KEYDOWN:
|
228
|
+
if event.key == pygame.K_LEFT:
|
229
|
+
playerX_change = -1.5
|
230
|
+
if event.key == pygame.K_RIGHT:
|
231
|
+
playerX_change = 1.5
|
232
|
+
if event.key == pygame.K_SPACE:
|
233
|
+
if bullet_state is 'ready':
|
234
|
+
bulletX = playerX
|
235
|
+
fire_bullet(bulletX, bulletY)
|
236
|
+
|
237
|
+
if event.type == pygame.KEYUP:
|
238
|
+
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
|
239
|
+
playerX_change = 0
|
240
|
+
|
241
|
+
#Player
|
242
|
+
playerX += playerX_change
|
243
|
+
if playerX <= 0:
|
244
|
+
playerX = 0
|
245
|
+
elif playerX >= 736:
|
246
|
+
playerX = 736
|
247
|
+
|
248
|
+
#Enemy
|
249
|
+
if enemy > 440:
|
250
|
+
break
|
251
|
+
enemyX += enemyX_change
|
252
|
+
if enemyX <= 0:
|
253
|
+
enemyX_change = 4 #go right if come to the leftend
|
254
|
+
enemyY += enemyY_change
|
255
|
+
elif enemyX >= 736:
|
256
|
+
enemyX_change = -4 #go left if come to the rightend
|
257
|
+
enemyY += enemyY_change
|
258
|
+
|
259
|
+
collision = isCollision(enemyX, enemyY, bulletX, bulletY)
|
260
|
+
if collosion:
|
261
|
+
bulletY = 480
|
262
|
+
bullet_state = 'ready'
|
263
|
+
score_value += 1
|
264
|
+
enemyX = random.randint(0, 736)
|
265
|
+
enemyY = random.randint(50, 150)
|
266
|
+
|
267
|
+
#bullet Movement
|
268
|
+
if bulletY <=0:
|
269
|
+
bulletY = 480
|
270
|
+
bullet_state = 'ready'
|
271
|
+
|
272
|
+
if bullet_state is 'fire':
|
273
|
+
fire_bullet(bulletX, bulletY)
|
274
|
+
bulletY -= bulletY_change
|
275
|
+
|
276
|
+
|
277
|
+
|
278
|
+
#Score
|
279
|
+
font = pygame.font.SysFont(None, 32) #creating fonts 'None' is default
|
280
|
+
score = font.render("Score: {str(score_value)}", True, (255,255,255))
|
281
|
+
screen.blit(score, (20,50))
|
282
|
+
|
283
|
+
|
284
|
+
player(playerX, playerY)
|
285
|
+
enemy(enemyX, enemyY)
|
286
|
+
|
287
|
+
pygame.display.update()
|
288
|
+
```
|
1
内容の改善、補足
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
+
pyxelでインベーダーゲームを作っています。
|
2
3
|
|
3
|
-
実行しても何も起こらなくなってしまいました。アドバイスお願いします。
|
4
|
+
下のエラーメッセージを改善しようと書き換えたところ、実行しても何も起こらなくなってしまいました。アドバイスお願いします。
|
4
5
|
|
5
6
|
### 発生している問題・エラーメッセージ
|
6
7
|
|
7
8
|
```
|
9
|
+
File "/Users/higashirinako/Downloads/pyxel_me/a.py", line 78
|
8
|
-
|
10
|
+
playerX += playerX_change
|
11
|
+
^
|
12
|
+
IndentationError: unindent does not match any outer indentation level
|
9
13
|
```
|
10
14
|
|
11
15
|
### 該当のソースコード
|
@@ -143,6 +147,4 @@
|
|
143
147
|
|
144
148
|
ここに問題に対して試したことを記載してください。
|
145
149
|
|
146
|
-
### 補足情報(FW/ツールのバージョンなど)
|
150
|
+
### 補足情報(FW/ツールのバージョンなど)
|
147
|
-
|
148
|
-
ここにより詳細な情報を記載してください。
|