-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtower2.py
281 lines (229 loc) · 31.1 KB
/
tower2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
import pyxel
import random
import math
import json
# 画面サイズ
SCREEN_WIDTH = 160
SCREEN_HEIGHT = 220
# プレイヤーの初期位置とパラメータ
PLAYER_X = 72
PLAYER_Y = 100
PLAYER_WIDTH = 8
PLAYER_HEIGHT = 8
PLAYER_SPEED = 2
JUMP_POWER = 3.5
GRAVITY = 0.2
# 床の高さ
FLOOR_HEIGHT = 8
# スクロール速度
SCROLL_SPEED = 0.5
# 床のパラメータ
FLOOR_Y_INTERVAL = 32 # 床の間隔
FLOOR_MIN_WIDTH = 32 # 床の最小幅
FLOOR_MAX_WIDTH = 96 # 床の最大幅
# トゲのパラメータ
SPIKE_HEIGHT = 4
MUSIC = [['c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3rrrrrrrrrrrrrrrrrrrrb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2rrrrrrrrrrrrra2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2rra2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2rrf2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2rrrrrd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3rrrrrrrrrrrrrrrrrrrrb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2rrrrrrrrrrrrra2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2rra2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2rrf2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2rrrrrrrrrrrrr', 'S', '112223344455666666666666666666666655555555555555555555444444444444444444443333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333322211100000000000000000000112223344455666666666666663333112223344455666666666666663333112223344455666666666666666666666655555555555555555555444444444444444444443333333333333333333333333333333333333333333333333333333333333333333333333333333333333332221110000000000000112223344455666666666666666666666655555555555555555555444444444444444444443333333322211100112223344455666666666666666666666655555555555555555555444444444444444444443333333322211100112223344455666666666666666666666655555555555555555533332221112223344455666666666666666666666655555555555555555555444444444444444444443333333333333333333333333333333333322211100000112223344455666666666666666666666655555555555555555533332221112223344455666666666666666666666655555555555555555533332221112223344455666666666666666666666655555555555555555555444444444444444444443333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333322211100000000000000000000112223344455666666666666663333112223344455666666666666663333112223344455666666666666666666666655555555555555555555444444444444444444443333333333333333333333333333333333333333333333333333333333333333333333333333333333333332221110000000000000112223344455666666666666666666666655555555555555555555444444444444444444443333333322211100112223344455666666666666666666666655555555555555555555444444444444444444443333333322211100112223344455666666666666666666666655555555555555555533332221112223344455666666666666663333112223344455666666666666663333112223344455666666666666666666666655555555555555555555444444444444444444443333333333333333333333333333333333333333333333333333333333333333333333333333333333333332221110000000000000', 'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnn', 1],['a0a0a0a0a0a0a0a0a0a0a0rrrrrrrrrrrrrrrrrrra1a1a1a1a1a1a1a1a1a1a1rrrra1a1a1a1a1a1a1a1a1a1a1rrrra0a0a0a0a0a0a0a0a0a0a0rrrrrrrrrrrrrrrrrrra1a1a1a1a1a1a1a1a1a1a1rrrra1a1a1a1a1a1a1a1a1a1a1rrrra0a0a0a0a0a0a0a0a0a0a0rrrrrrrrrrrrrrrrrrra1a1a1a1a1a1a1a1a1a1a1rrrra1a1a1a1a1a1a1a1a1a1a1rrrra0a0a0a0a0a0a0a0a0a0a0rrrrrrrrrrrrrrrrrrra1a1a1a1a1a1a1a1a1a1a1rrrra1a1a1a1a1a1a1a1a1a1a1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrf0f0f0f0f0f0f0f0f0f0f0rrrrrrrrrrrrrrrrrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf0f0f0f0f0f0f0f0f0f0f0rrrrrrrrrrrrrrrrrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf0f0f0f0f0f0f0f0f0f0f0rrrrrrrrrrrrrrrrrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf0f0f0f0f0f0f0f0f0f0f0rrrrrrrrrrrrrrrrrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf1f1f1f1f1f1f1f1f1f1f1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrra0a0a0a0a0a0a0a0a0a0a0rrrrrrrrrrrrrrrrrrra1a1a1a1a1a1a1a1a1a1a1rrrra1a1a1a1a1a1a1a1a1a1a1rrrra0a0a0a0a0a0a0a0a0a0a0rrrrrrrrrrrrrrrrrrra1a1a1a1a1a1a1a1a1a1a1rrrra1a1a1a1a1a1a1a1a1a1a1rrrra0a0a0a0a0a0a0a0a0a0a0rrrrrrrrrrrrrrrrrrra1a1a1a1a1a1a1a1a1a1a1rrrra1a1a1a1a1a1a1a1a1a1a1rrrra0a0a0a0a0a0a0a0a0a0a0rrrrrrrrrrrrrrrrrrra1a1a1a1a1a1a1a1a1a1a1rrrra1a1a1a1a1a1a1a1a1a1a1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrf0f0f0f0f0f0f0f0f0f0f0rrrrrrrrrrrrrrrrrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf0f0f0f0f0f0f0f0f0f0f0rrrrrrrrrrrrrrrrrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf0f0f0f0f0f0f0f0f0f0f0rrrrrrrrrrrrrrrrrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf0f0f0f0f0f0f0f0f0f0f0rrrrrrrrrrrrrrrrrrrf1f1f1f1f1f1f1f1f1f1f1rrrrf1f1f1f1f1f1f1f1f1f1f1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg0g0g0g0g0g0g0g0g0g0g0rrrrrrrrrrrrrrrrrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg1g1g1g1g1g1g1g1g1g1g1rrrrg#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0rrrrrrrrrrrrrrrrrrrg#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1rrrrg#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1rrrrg#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0g#0rrrrrrrrg#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1g#1rrrrrrrr', 'T', '777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777770000000000000000000777777777770000777777777770000777777777777777777777700000000777777777777777777777700000000', 'n', 1],['rrrrrrrrrrrrrrrc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3rrrrrrrrrrrrrrrrrrrrb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2rrrrrrrrrrrrra2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2rra2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2rrf2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2rrrrrd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3rrrrrrrrrrrrrrrrrrrrb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2rrrrrrrrrrrrra2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2rra2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2rrf2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2g2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2rrrrrrrrrrr', 'S', '111111111000000111111122222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000111111122222222222222222221111111111122222222222222222221111111111122222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000111111122222222222222222222222222222222222222222222222222222222222222222221111111111111100111111122222222222222222222222222222222222222222222222222222222222222222221111111111111100111111122222222222222222222222222222222222222222222211111111111111122222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111111111111111111100000111111122222222222222222222222222222222222222222222211111111111111122222222222222222222222222222222222222222222211111111111111122222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000111111122222222222222222221111111111122222222222222222221111111111122222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000111111122222222222222222222222222222222222222222222222222222222222222222221111111111111100111111122222222222222222222222222222222222222222222222222222222222222222221111111111111100111111122222222222222222222222222222222222222222222211111111111111122222222222222222221111111111122222222222222222221111111111122222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000', 'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnvnnnnnnnnnnnnnnnnnnnnn', 1],['rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr', 'T', '0', 'n', 1]]
class Player:
def __init__(self):
self.x = PLAYER_X
self.y = PLAYER_Y
self.vy = 0
self.is_jumping = False
self.color = random.randint(1, 8)
def update(self):
# 左右移動
if (pyxel.btn(pyxel.KEY_LEFT) or pyxel.btn(pyxel.GAMEPAD1_BUTTON_DPAD_LEFT)):
self.x -= PLAYER_SPEED
if (pyxel.btn(pyxel.KEY_RIGHT) or pyxel.btn(pyxel.GAMEPAD1_BUTTON_DPAD_RIGHT)):
self.x += PLAYER_SPEED
# ジャンプ
if (
pyxel.btnp(pyxel.KEY_SPACE)
or pyxel.btn(pyxel.GAMEPAD1_BUTTON_A)
or pyxel.btn(pyxel.GAMEPAD1_BUTTON_B)
or pyxel.btn(pyxel.GAMEPAD1_BUTTON_X)
or pyxel.btn(pyxel.GAMEPAD1_BUTTON_Y)
) and not self.is_jumping:
pyxel.sounds[3].set(
"D3G3", # ドミソの和音で明るい感じに
"S", # トライアングル系の音色で軽快さを出す
"7", # 音量は大きめに
"s", # エフェクトはなし
10, # 再生速度を速めて短く切る
)
pyxel.play(3, 3)
self.vy = -JUMP_POWER
self.is_jumping = True
# 重力
self.vy += GRAVITY
self.y += self.vy
# 画面外に出ないようにする
self.x = max(0, min(self.x, SCREEN_WIDTH - PLAYER_WIDTH))
def draw(self):
pyxel.rect(self.x, self.y, PLAYER_WIDTH, PLAYER_HEIGHT, self.color)
def check_floor_collision(self, floors, scroll_y): # scroll_y を引数に追加
for floor in floors:
# プレイヤーの底辺が床の上面に接触しているか
if (
self.x < floor.x + floor.width
and self.x + PLAYER_WIDTH > floor.x
and self.y + PLAYER_HEIGHT > floor.y - scroll_y # スクロール量を考慮
and self.y + PLAYER_HEIGHT < floor.y - scroll_y + FLOOR_HEIGHT # スクロール量を考慮
and self.vy >= 0 # 下向きに移動しているときのみ衝突判定
):
self.y = floor.y - scroll_y - PLAYER_HEIGHT # スクロール量を考慮
self.vy = 0
self.is_jumping = False
return # 衝突したらループを抜ける
def check_spike_collision(self, spikes, scroll_y): # scroll_y を引数に追加
for spike in spikes:
# プレイヤーの中心座標がトゲの矩形範囲内にあるか
if (
self.x < spike.x + SPIKE_HEIGHT * 2 - 1
and self.x + PLAYER_WIDTH > spike.x + 1
and self.y < spike.y - scroll_y + SPIKE_HEIGHT - 1 # スクロール量を考慮
and self.y + PLAYER_HEIGHT > spike.y - scroll_y + 1 # スクロール量を考慮
):
# 衝突時の処理 (ゲームオーバーなど)
return True
return False
def check_out_of_boundary(self):
if (self.y < -1 * PLAYER_HEIGHT or self.y > SCREEN_HEIGHT + PLAYER_HEIGHT):
return True
else:
return False
class Floor:
def __init__(self, x, y, width):
self.x = x
self.y = y
self.width = width
def draw(self, scroll_y): # scroll_y を引数に追加
pyxel.rect(self.x, self.y - scroll_y, self.width, FLOOR_HEIGHT, 3) # y座標をスクロール量でずらす
class Spike:
def __init__(self, x, y):
self.x = x
self.y = y
def draw(self, scroll_y): # scroll_y を引数に追加
pyxel.tri(self.x, self.y - scroll_y + SPIKE_HEIGHT, self.x + SPIKE_HEIGHT, self.y - scroll_y,
self.x + SPIKE_HEIGHT * 2, self.y - scroll_y + SPIKE_HEIGHT, 10) # y座標をスクロール量でずらす
class Particle:
def __init__(self, x, y):
self.x = x
self.y = y
angle = random.uniform(0, math.pi*2) # 0〜360度の方向をランダムに決定
speed = random.uniform(1, 3) # 速度をランダムに決定
self.vx = math.cos(angle) * speed
self.vy = math.sin(angle) * speed
self.life = 30 # パーティクルの寿命
self.color = random.randint(1, 8)
def update(self):
self.x += self.vx
self.y += self.vy
if self.vy < 3:
self.vy += GRAVITY / 2
self.life -= 1
def draw(self):
if self.life > 0:
pyxel.pset(self.x, self.y, self.color)
class App:
def __init__(self):
pyxel.init(SCREEN_WIDTH, SCREEN_HEIGHT, title="天空の塔")
# リソースファイルの読み込み (後で作成)
# pyxel.load("my_resource.pyxres")
self.music = MUSIC
self.reset_game()
pyxel.run(self.update, self.draw)
def generate_initial_floors(self):
y = SCREEN_HEIGHT - FLOOR_HEIGHT
# Initial platform
self.floors.append(Floor(50, y, 50))
y -= FLOOR_Y_INTERVAL
while y > -SCREEN_HEIGHT:
width = random.randint(FLOOR_MIN_WIDTH, FLOOR_MAX_WIDTH)
x = random.randint(0, SCREEN_WIDTH - width)
self.floors.append(Floor(x, y, width))
# 床の上にトゲを配置
for i in range(random.randint(0, 3)):
spike_x = random.randint(x, x + width - SPIKE_HEIGHT * 2)
self.spikes.append(Spike(spike_x, y - SPIKE_HEIGHT))
y -= FLOOR_Y_INTERVAL
self.floors.reverse()
def update(self):
for particle in self.particles:
particle.update()
if not self.is_game_over: # ゲームオーバーでない場合のみ更新
self.player.update()
self.scroll_y += SCROLL_SPEED + (self.scroll_y // 100) * 0.1
# 新しい床の生成
if self.floors[-1].y - self.scroll_y < SCREEN_HEIGHT - FLOOR_Y_INTERVAL:
self.generate_floor()
# 衝突判定
self.player.check_floor_collision(self.floors, self.scroll_y)
if self.player.check_spike_collision(self.spikes, self.scroll_y):
self.is_game_over = True
if self.player.check_out_of_boundary():
self.is_game_over = True
if self.is_game_over:
pyxel.sounds[3].set(
"C4 C3 C2", # 短い音符を組み合わせて、破裂感を出す
"N", # ノイズ音を使用
"765", # 音量を徐々に下げていく
"N", # エフェクトはなし
15, # 再生速度を速くする
)
pyxel.play(3, 3)
[pyxel.stop(i) for i in [0,1,2]]
for _ in range(30): # 30個のパーティクルを生成
self.particles.append(Particle(self.player.x + PLAYER_WIDTH/2, self.player.y + PLAYER_HEIGHT/2))
else:
# ゲームオーバー時の処理 (リトライなど)
if (
pyxel.btnp(pyxel.KEY_R)
or pyxel.btn(pyxel.GAMEPAD1_BUTTON_A)
or pyxel.btn(pyxel.GAMEPAD1_BUTTON_B)
or pyxel.btn(pyxel.GAMEPAD1_BUTTON_X)
or pyxel.btn(pyxel.GAMEPAD1_BUTTON_Y)
): # Rキーでリトライ
self.reset_game()
# Play music
if (pyxel.play_pos(0) is None
and not self.is_game_over):
for ch, sound in enumerate(self.music):
pyxel.sound(ch).set(*sound)
pyxel.play(ch, ch, loop=True)
def reset_game(self): # ゲームをリセットするメソッド
self.player = Player()
self.scroll_y = 0
self.floors = []
self.spikes = []
self.particles = []
self.is_game_over = False
self.generate_initial_floors()
def generate_floor(self):
y = self.floors[-1].y + FLOOR_Y_INTERVAL
width = random.randint(FLOOR_MIN_WIDTH, FLOOR_MAX_WIDTH)
x = random.randint(0, SCREEN_WIDTH - width)
self.floors.append(Floor(x, y, width))
# 床の上にトゲを配置
for i in range(random.randint(0, 3)):
spike_x = random.randint(x, x + width - SPIKE_HEIGHT * 2)
self.spikes.append(Spike(spike_x, y - SPIKE_HEIGHT))
def draw(self):
pyxel.cls(0)
for floor in self.floors:
floor.draw(self.scroll_y)
# トゲの描画
for spike in self.spikes:
spike.draw(self.scroll_y)
# Draw score
pyxel.text(0, 0, f"Score: {self.scroll_y:.0f}", 7)
# Draw particles.
for particle in self.particles:
particle.draw()
if self.is_game_over: # ゲームオーバー時の表示
pyxel.text(SCREEN_WIDTH // 2 - 20, SCREEN_HEIGHT // 2 - 8, "GAME OVER", pyxel.frame_count % 15 + 1)
pyxel.text(SCREEN_WIDTH // 2 - 30, SCREEN_HEIGHT // 2 + 8, "PRESS R TO RETRY", 8)
else:
self.player.draw()
App()