pyscratch-pysc 1.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. assets/bullet_hell/enemy.py +130 -0
  2. assets/bullet_hell/enemy_bullets.py +230 -0
  3. assets/bullet_hell/main.py +11 -0
  4. assets/bullet_hell/old_verisons/bullet_hell.py +379 -0
  5. assets/bullet_hell/old_verisons/enemy.py +226 -0
  6. assets/bullet_hell/old_verisons/game_start.py +6 -0
  7. assets/bullet_hell/old_verisons/main.py +50 -0
  8. assets/bullet_hell/old_verisons/player.py +76 -0
  9. assets/bullet_hell/player.py +89 -0
  10. assets/bullet_hell/player_bullets.py +34 -0
  11. assets/bullet_hell/setting.py +33 -0
  12. examples/animated_sprite/main.py +7 -0
  13. examples/animated_sprite/my_sprite.py +79 -0
  14. examples/bullet_hell/enemy.py +152 -0
  15. examples/bullet_hell/enemy_bullet.py +88 -0
  16. examples/bullet_hell/main.py +17 -0
  17. examples/bullet_hell/player.py +39 -0
  18. examples/bullet_hell/player_bullet.py +31 -0
  19. examples/doodle_jump/main.py +9 -0
  20. examples/doodle_jump/platforms.py +51 -0
  21. examples/doodle_jump/player.py +52 -0
  22. examples/fish/assets/bullet_hell/enemy.py +130 -0
  23. examples/fish/assets/bullet_hell/enemy_bullets.py +230 -0
  24. examples/fish/assets/bullet_hell/main.py +11 -0
  25. examples/fish/assets/bullet_hell/old_verisons/bullet_hell.py +379 -0
  26. examples/fish/assets/bullet_hell/old_verisons/enemy.py +226 -0
  27. examples/fish/assets/bullet_hell/old_verisons/game_start.py +6 -0
  28. examples/fish/assets/bullet_hell/old_verisons/main.py +50 -0
  29. examples/fish/assets/bullet_hell/old_verisons/player.py +76 -0
  30. examples/fish/assets/bullet_hell/player.py +89 -0
  31. examples/fish/assets/bullet_hell/player_bullets.py +34 -0
  32. examples/fish/assets/bullet_hell/setting.py +33 -0
  33. examples/fish/fish.py +67 -0
  34. examples/fish/main.py +4 -0
  35. examples/getting-started/step 1 - create a sprite/main.py +11 -0
  36. examples/getting-started/step 1 - create a sprite/player.py +5 -0
  37. examples/getting-started/step 2 - control a sprite/main.py +11 -0
  38. examples/getting-started/step 2 - control a sprite/player.py +42 -0
  39. examples/getting-started/step 3 - backdrops/main.py +17 -0
  40. examples/getting-started/step 3 - backdrops/player.py +33 -0
  41. examples/getting-started/step 4 - clone a sprite/enemy.py +53 -0
  42. examples/getting-started/step 4 - clone a sprite/main.py +17 -0
  43. examples/getting-started/step 4 - clone a sprite/player.py +32 -0
  44. examples/getting-started/step 4 - clone a sprite (simple)/enemy.py +42 -0
  45. examples/getting-started/step 4 - clone a sprite (simple)/main.py +17 -0
  46. examples/getting-started/step 4 - clone a sprite (simple)/player.py +32 -0
  47. examples/getting-started/step 5 - local variables/enemy.py +52 -0
  48. examples/getting-started/step 5 - local variables/main.py +17 -0
  49. examples/getting-started/step 5 - local variables/player.py +49 -0
  50. examples/getting-started/step 6 - shared variables/enemy.py +64 -0
  51. examples/getting-started/step 6 - shared variables/main.py +17 -0
  52. examples/getting-started/step 6 - shared variables/player.py +80 -0
  53. examples/getting-started/step 7 - Referencing other sprites/enemy.py +83 -0
  54. examples/getting-started/step 7 - Referencing other sprites/hearts.py +39 -0
  55. examples/getting-started/step 7 - Referencing other sprites/main.py +23 -0
  56. examples/getting-started/step 7 - Referencing other sprites/player.py +59 -0
  57. examples/getting-started/step 8 - sprite variables/enemy.py +98 -0
  58. examples/getting-started/step 8 - sprite variables/hearts.py +39 -0
  59. examples/getting-started/step 8 - sprite variables/main.py +22 -0
  60. examples/getting-started/step 8 - sprite variables/player.py +63 -0
  61. examples/getting-started/step 9 - messages/enemy.py +98 -0
  62. examples/getting-started/step 9 - messages/hearts.py +39 -0
  63. examples/getting-started/step 9 - messages/main.py +23 -0
  64. examples/getting-started/step 9 - messages/player.py +78 -0
  65. examples/perspective_background/main.py +14 -0
  66. examples/perspective_background/player.py +52 -0
  67. examples/perspective_background/trees.py +39 -0
  68. examples/simple_pong/ball.py +72 -0
  69. examples/simple_pong/left_paddle.py +36 -0
  70. examples/simple_pong/main.py +21 -0
  71. examples/simple_pong/right_paddle.py +37 -0
  72. examples/simple_pong/score_display.py +54 -0
  73. pyscratch/__init__.py +48 -0
  74. pyscratch/event.py +263 -0
  75. pyscratch/game_module.py +1589 -0
  76. pyscratch/helper.py +561 -0
  77. pyscratch/sprite.py +1920 -0
  78. pyscratch/tools/sprite_preview/left_panel/frame_preview_card.py +238 -0
  79. pyscratch/tools/sprite_preview/left_panel/frame_preview_panel.py +42 -0
  80. pyscratch/tools/sprite_preview/main.py +18 -0
  81. pyscratch/tools/sprite_preview/main_panel/animation_display.py +77 -0
  82. pyscratch/tools/sprite_preview/main_panel/frame_bin.py +33 -0
  83. pyscratch/tools/sprite_preview/main_panel/play_edit_ui.py +64 -0
  84. pyscratch/tools/sprite_preview/main_panel/set_as_sprite_folder.py +22 -0
  85. pyscratch/tools/sprite_preview/main_panel/sprite_edit_ui.py +174 -0
  86. pyscratch/tools/sprite_preview/main_panel/warning_message.py +25 -0
  87. pyscratch/tools/sprite_preview/right_panel/back_button.py +35 -0
  88. pyscratch/tools/sprite_preview/right_panel/cut_button.py +32 -0
  89. pyscratch/tools/sprite_preview/right_panel/cut_parameter_fitting.py +152 -0
  90. pyscratch/tools/sprite_preview/right_panel/cut_parameters.py +42 -0
  91. pyscratch/tools/sprite_preview/right_panel/file_display.py +84 -0
  92. pyscratch/tools/sprite_preview/right_panel/file_display_area.py +57 -0
  93. pyscratch/tools/sprite_preview/right_panel/spritesheet_view.py +262 -0
  94. pyscratch/tools/sprite_preview/right_panel/ss_select_corner.py +208 -0
  95. pyscratch/tools/sprite_preview/settings.py +14 -0
  96. pyscratch/tools/sprite_preview/utils/input_box.py +235 -0
  97. pyscratch/tools/sprite_preview/utils/render_wrapped_file_name.py +86 -0
  98. pyscratch_pysc-1.0.3.dist-info/METADATA +37 -0
  99. pyscratch_pysc-1.0.3.dist-info/RECORD +101 -0
  100. pyscratch_pysc-1.0.3.dist-info/WHEEL +5 -0
  101. pyscratch_pysc-1.0.3.dist-info/top_level.txt +3 -0
@@ -0,0 +1,379 @@
1
+ import random
2
+ import re, sys
3
+ import numpy as np
4
+ import pymunk
5
+ import pyscratch.game_module
6
+ from pyscratch.sprite import Sprite, create_rect, create_rect_sprite, create_edge_sprites
7
+ from pyscratch.helper import _get_frame_dict
8
+ from pyscratch.game_module import Game
9
+ import pygame
10
+ WIDTH = 720
11
+ HEIGHT = 1280
12
+
13
+
14
+ ENEMY_TYPE = 3
15
+ PLAYER_TYPE = 2
16
+ PLAYER_BULLET_TYPE = 4
17
+ EDGE_TYPE = 1
18
+
19
+ def cap(v, min_v, max_v):
20
+ return max(min(max_v, v), min_v)
21
+
22
+
23
+
24
+ game = Game((WIDTH, HEIGHT))
25
+ sprite_sheet = pygame.image.load("assets/09493140a07b68502ef63ff423a6da3954d36fd8/Green Effect and Bullet 16x16.png").convert_alpha()
26
+
27
+ font = pygame.font.SysFont(None, 24) # None = default font, 48 = font size
28
+ game._suppress_type_collision(PLAYER_TYPE, True)
29
+
30
+
31
+ frames = _get_frame_dict(sprite_sheet, 36, 13, {
32
+ "spin": [i+4*36 for i in range(14, 17+1)],
33
+ "star_explosion": [i+4*36 for i in range(19, 22+1)],
34
+ "heal": [i+1*36 for i in range(24, 28+1)],
35
+ "circle_explosion": [i+5*36 for i in range(14, 17+1)],
36
+
37
+
38
+ "square_bullets": [i+9*36 for i in range(24, 28+1)]+[i+9*36 for i in range(27, 24, -1)],
39
+ "circle_bullets": [i+8*36 for i in range(24, 28+1)]+[i+8*36 for i in range(27, 24, -1)],
40
+
41
+ "shield": [i+5*36 for i in [17]],
42
+
43
+ "bullet1": [i+3*36 for i in range(7, 7+1)]
44
+ })
45
+
46
+
47
+
48
+ start_buttom = create_rect_sprite((200, 0, 0), width=150, height=60, pos=(game._screen.get_width()//2, game._screen.get_height()//2))
49
+ start_buttom.write_text("Click to Start", font)
50
+ #game.add_sprite(start_buttom)
51
+
52
+ def on_click():
53
+ start_buttom.scale_by(0.9)
54
+
55
+ on_condition = game.when_condition_met(
56
+ lambda: (not pyscratch.game.get_mouse_presses()[0]), repeats=1)
57
+
58
+ def start_game(x):
59
+ start_buttom.scale_by(1/0.9)
60
+ game.broadcast_message('game_start', {'count': 0})
61
+ game._remove_sprite(start_buttom)
62
+
63
+ on_condition.add_handler(start_game)
64
+
65
+ #game.retrieve_sprite_click_trigger(start_buttom).add_callback(on_click)
66
+ on_click()
67
+
68
+
69
+ def shoot_player_bullet(origin, inaccuracy):
70
+
71
+ bullet = Sprite(frames, "circle_bullets", origin)
72
+
73
+ #game.add_sprite(bullet)
74
+ bullet.set_collision_type(PLAYER_BULLET_TYPE)
75
+ bullet.set_rotation(-90 + inaccuracy*random.random()-inaccuracy/2)
76
+
77
+ movement_timer = game.when_timer_reset(1000/240).add_handler(
78
+ lambda x: bullet.move_indir(2)
79
+ )
80
+
81
+ next_frame_timer = game.when_timer_reset(100).add_handler(
82
+ lambda x: bullet.next_frame()
83
+ )
84
+
85
+
86
+ def destroy_when_exit(x):
87
+ movement_timer.remove()
88
+ next_frame_timer.remove()
89
+ game._remove_sprite(bullet)
90
+
91
+
92
+ destroy_condition = game.when_condition_met(lambda: (bullet.y < 0), repeats=1)
93
+ destroy_condition.add_handler(destroy_when_exit)
94
+
95
+
96
+ def create_bullet_attracted(position):
97
+ bullet = Sprite(frames, "spin", position)
98
+
99
+ bullet.set_scale(2.3)
100
+ #game.add_sprite(bullet)
101
+ speed = random.random()*15+5
102
+
103
+
104
+ movement_event = game.when_timer_reset(20).add_handler(lambda x: bullet.move_indir(speed))
105
+ following_event = game.when_timer_reset(200, 5).add_handler(lambda x: bullet.point_towards_sprite(game.shared_data['player']))
106
+
107
+ frame_event = game.when_timer_reset(200).add_handler(lambda x: bullet.next_frame())
108
+ hitting_player_event = game._create_specific_collision_trigger(bullet, game.shared_data['player'])
109
+
110
+
111
+ def explode_and_destroy(a):
112
+ bullet.set_animation('star_explosion')
113
+ game.broadcast_message('player_health', -1)
114
+ movement_event.remove()
115
+ game.when_timer_reset(200, 1).add_handler(destory)
116
+
117
+
118
+ def destory(x):
119
+ movement_event.remove()
120
+ frame_event.remove()
121
+ following_event.remove()
122
+ hitting_player_event.remove()
123
+ game._remove_sprite(bullet)
124
+
125
+ when_exit_screen = game.when_condition_met(lambda: bullet.y > HEIGHT, repeats=1)
126
+ when_exit_screen.add_handler(destory)
127
+ hitting_player_event.add_handler(explode_and_destroy)
128
+
129
+
130
+
131
+ def create_bullet_start_pointing(position, _):
132
+
133
+ bullet = Sprite(frames, "spin", position)
134
+
135
+
136
+
137
+ bullet.point_towards_sprite(game.shared_data['player'])
138
+ bullet.set_scale(2.3)
139
+ #game.add_sprite(bullet)
140
+ speed = random.random()*15+5
141
+ bullet.point_towards_sprite(game.shared_data['player'])
142
+
143
+
144
+ movement_event = game.when_timer_reset(20).add_handler(lambda x: bullet.move_indir(speed))
145
+ #movement_event = game.create_timer_trigger(20).on_reset(lambda x: bullet.move_across_dir((random.random()-0.5)*speed*0.3))
146
+
147
+
148
+ frame_event = game.when_timer_reset(200).add_handler(lambda x: bullet.next_frame())
149
+ hitting_player_event = game._create_specific_collision_trigger(bullet, game.shared_data['player'])
150
+
151
+
152
+ def explode_and_destroy(a):
153
+ bullet.set_animation('star_explosion')
154
+ game.broadcast_message('player_health', -1)
155
+ movement_event.remove()
156
+ game.when_timer_reset(200, 1).add_handler(destory)
157
+
158
+
159
+ def destory(x):
160
+ movement_event.remove()
161
+ frame_event.remove()
162
+ hitting_player_event.remove()
163
+ game._remove_sprite(bullet)
164
+
165
+ when_exit_screen = game.when_condition_met(lambda: bullet.y > HEIGHT, repeats=1)
166
+ when_exit_screen.add_handler(destory)
167
+ hitting_player_event.add_handler(explode_and_destroy)
168
+ pass
169
+
170
+
171
+
172
+
173
+ def create_bullet_move_sine(position, rotation):
174
+ bullet = Sprite(frames, "square_bullets", position)
175
+ bullet.set_scale(2.3)
176
+ #game.add_sprite(bullet)
177
+ bullet.set_rotation(rotation+90)
178
+ #speed = random.random()*15+5
179
+ speed = 10
180
+
181
+
182
+ bullet.sprite_data['phase'] = 0
183
+ movement_event = game.when_timer_reset(30)
184
+ def move(x):
185
+ bullet.sprite_data['phase']+=.1
186
+ angle = np.tanh(np.cos(.6*bullet.sprite_data['phase']))
187
+
188
+
189
+ bullet.add_rotation(angle)
190
+
191
+ bullet.move_indir(speed)
192
+
193
+
194
+ movement_event.add_handler(move)
195
+
196
+
197
+ frame_event = game.when_timer_reset(200).add_handler(lambda x: bullet.next_frame())
198
+ hitting_player_event = game._create_specific_collision_trigger(bullet, game.shared_data['player'])
199
+
200
+
201
+ def explode_and_destroy(a):
202
+ bullet.set_animation('star_explosion')
203
+ game.broadcast_message('player_health', -1)
204
+ movement_event.remove()
205
+ game.when_timer_reset(200, 1).add_handler(destory)
206
+
207
+
208
+ def destory(x):
209
+ movement_event.remove()
210
+ frame_event.remove()
211
+ hitting_player_event.remove()
212
+ game._remove_sprite(bullet)
213
+
214
+ when_exit_screen = game.when_condition_met(lambda: (bullet.y > HEIGHT) or (bullet.y < 0) or (bullet.x <0) or (bullet.x>WIDTH) , repeats=1)
215
+ when_exit_screen.add_handler(destory)
216
+ hitting_player_event.add_handler(explode_and_destroy)
217
+
218
+
219
+
220
+
221
+ def create_bullet_type1(position, rotation):
222
+ bullet = Sprite(frames, "spin", position)
223
+ bullet.add_rotation(rotation)
224
+ bullet.set_scale(2.3)
225
+ #game.add_sprite(bullet)
226
+ speed = random.random()*15+5
227
+ #speed = 15
228
+
229
+ movement_event = game.when_timer_reset(20).add_handler(lambda x: bullet.move_indir(speed))
230
+ #movement_event = game.create_timer_trigger(20).on_reset(lambda x: bullet.move_across_dir((random.random()-0.5)*speed*0.3))
231
+
232
+
233
+ frame_event = game.when_timer_reset(200).add_handler(lambda x: bullet.next_frame())
234
+ hitting_player_event = game._create_specific_collision_trigger(bullet, game.shared_data['player'])
235
+
236
+
237
+ def explode_and_destroy(a):
238
+ bullet.set_animation('star_explosion')
239
+ game.broadcast_message('player_health', -1)
240
+ movement_event.remove()
241
+ game.when_timer_reset(200, 1).add_handler(destory)
242
+
243
+ when_exit_screen = game.when_condition_met(lambda: bullet.y > HEIGHT, repeats=1)
244
+
245
+ def destory(x):
246
+ movement_event.remove()
247
+ frame_event.remove()
248
+ hitting_player_event.remove()
249
+ game._remove_sprite(bullet)
250
+ when_exit_screen.remove()
251
+
252
+ when_exit_screen.add_handler(destory)
253
+ hitting_player_event.add_handler(explode_and_destroy)
254
+
255
+
256
+
257
+
258
+
259
+
260
+ def create_enemy_type1(position):
261
+
262
+ enemy_sprite = create_rect_sprite((255, 0, 0), 50, 30, pos=position)
263
+ #game.add_sprite(enemy_sprite)
264
+
265
+ enemy_sprite.add_rotation(90+(random.random()-0.5)*15)
266
+ enemy_sprite.set_collision_type(ENEMY_TYPE)
267
+
268
+
269
+ speed = random.random()*6
270
+
271
+
272
+
273
+
274
+ movement_event = game.when_timer_reset(20).add_handler(lambda x: enemy_sprite.move_indir(speed))
275
+ bullet_event = game.when_timer_reset(150).add_handler(lambda x: create_bullet_type1((enemy_sprite.x, enemy_sprite.y), enemy_sprite.get_rotation()))
276
+ #bullet_event = game.create_timer_trigger(1500).on_reset(lambda x: create_bullet_attracted((enemy_sprite.x, enemy_sprite.y)))
277
+
278
+ when_hit_player = game.when_condition_met(lambda: pyscratch.game.is_touching(game, enemy_sprite, game.shared_data['player']), repeats=1)
279
+ when_leaving_screen = game.when_condition_met(lambda: (enemy_sprite.y > HEIGHT), repeats=1)
280
+ when_hit_by_player_bullet = game._create_type2type_collision_trigger(PLAYER_BULLET_TYPE, ENEMY_TYPE)
281
+
282
+
283
+
284
+
285
+
286
+ def destroy(x):
287
+ when_hit_player.remove()
288
+ when_leaving_screen.remove()
289
+ when_hit_by_player_bullet.remove()
290
+ movement_event.remove()
291
+ bullet_event.remove()
292
+ game._remove_sprite(enemy_sprite)
293
+
294
+ def check_collision(a):
295
+ if enemy_sprite._shape in a.shapes:
296
+ destroy(None)
297
+
298
+ when_hit_player.add_handler(destroy)
299
+ when_hit_player.add_handler(lambda x: game.broadcast_message('player_health', -1))
300
+
301
+ when_leaving_screen.add_handler(destroy)
302
+
303
+ when_hit_by_player_bullet.add_handler(check_collision)
304
+
305
+
306
+
307
+
308
+
309
+
310
+ def game_start(data):
311
+
312
+ player = create_rect_sprite((0, 0, 255), 50, 30, pos=(720//2, 1200))
313
+ #game.add_sprite(player)
314
+ create_edge_sprites(game)
315
+ player.set_collision_type(PLAYER_TYPE)
316
+
317
+
318
+ healthbar_red = create_rect((255, 0, 0), 60, 50)
319
+
320
+ healthbar_empty = create_rect_sprite((255, 255, 255), 60, 5, pos=(0,0))
321
+
322
+
323
+
324
+ game.shared_data['player'] = player
325
+ game.shared_data['inaccuracy'] = 5
326
+
327
+ player.sprite_data['health'] = 10
328
+
329
+
330
+ #game.add_sprite(healthbar_empty)
331
+ healthbar_empty.lock_to(player, (0,-30))
332
+ healthbar_empty.blit(healthbar_red, (0,0))
333
+
334
+
335
+
336
+
337
+ game.when_timer_reset(100, 20).add_handler(lambda x: create_bullet_move_sine((355, 1), 0))
338
+ game.when_timer_reset(100, 20).add_handler(lambda x: create_bullet_attracted((355, 1)))
339
+ game.when_timer_reset(100, 100).add_handler(lambda x: create_bullet_type1((100, 100), 90))
340
+
341
+ #game.create_timer_trigger(100, 10)
342
+
343
+
344
+ #game.create_timer_trigger(1200).on_reset(lambda x: shoot_player_bullet((player.x, player.y), game.shared_data['inaccuracy']))
345
+ #game.create_timer_trigger(500, 30).on_reset(lambda x: create_enemy_type1((random.random()*WIDTH, 0)))
346
+
347
+
348
+ def run_forever(_):
349
+ if pyscratch.game.is_key_pressed('w'):
350
+ player.move_xy((0, -5))
351
+
352
+ if pyscratch.game.is_key_pressed('s'):
353
+ player.move_xy((0, 5))
354
+
355
+ if pyscratch.game.is_key_pressed('a'):
356
+ player.move_xy((-5, 0))
357
+
358
+ if pyscratch.game.is_key_pressed('d'):
359
+ player.move_xy((5, 0))
360
+
361
+ player.set_xy((cap(player.x, 50, WIDTH-50), cap(player.y, HEIGHT-500, HEIGHT)))
362
+
363
+
364
+ def on_health_change(change):
365
+ player.sprite_data['health'] += change
366
+ new_health = max(0, player.sprite_data['health'])
367
+
368
+ healthbar_red = create_rect((255, 0, 0), 60*(new_health/10), 50)
369
+ healthbar_empty.blit(healthbar_red)
370
+
371
+
372
+
373
+ game.when_timer_reset(1000/120).add_handler(run_forever)
374
+ game.when_receive_message('player_health').add_handler(on_health_change)
375
+
376
+ wait_for_game_start = game.when_receive_message('game_start').add_handler(game_start)
377
+
378
+
379
+ game.start(60, 60, False, True)
@@ -0,0 +1,226 @@
1
+ import random
2
+ import re, sys
3
+ import numpy as np
4
+ import pymunk
5
+ from pyscratch import game
6
+ from pyscratch.sprite import Sprite, create_rect, create_rect_sprite
7
+ from pyscratch.helper import _get_frame_dict
8
+ from pyscratch.game_module import Game
9
+
10
+ from main import game, frames, WIDTH, HEIGHT, ENEMY_TYPE, PLAYER_BULLET_TYPE
11
+
12
+
13
+ def create_bullet_attracted(position):
14
+ bullet = Sprite(frames, "spin", position)
15
+
16
+ bullet.set_scale(2.3)
17
+ #game.add_sprite(bullet)
18
+ speed = random.random()*15+5
19
+
20
+ bullet.point_towards_sprite(game.shared_data['player'])
21
+
22
+
23
+ movement_event = game.when_timer_reset(20).add_handler(lambda x: bullet.move_indir(speed))
24
+ following_event = game.when_timer_reset(200, 5).add_handler(lambda x: bullet.point_towards_sprite(game.shared_data['player']))
25
+
26
+ frame_event = game.when_timer_reset(200).add_handler(lambda x: bullet.next_frame())
27
+ hitting_player_event = game._create_specific_collision_trigger(bullet, game.shared_data['player'])
28
+
29
+
30
+ def explode_and_destroy(a):
31
+ bullet.set_animation('star_explosion')
32
+ game.broadcast_message('player_health', -1)
33
+ movement_event.remove()
34
+ game.when_timer_reset(200, 1).add_handler(destory)
35
+
36
+
37
+ def destory(x):
38
+ movement_event.remove()
39
+ frame_event.remove()
40
+ following_event.remove()
41
+ hitting_player_event.remove()
42
+ game._remove_sprite(bullet)
43
+
44
+ when_exit_screen = game.when_condition_met(lambda: bullet.y > HEIGHT, repeats=1)
45
+ when_exit_screen.add_handler(destory)
46
+ hitting_player_event.add_handler(explode_and_destroy)
47
+
48
+
49
+
50
+ def create_bullet_start_pointing(position, _):
51
+
52
+ bullet = Sprite(frames, "spin", position)
53
+
54
+
55
+
56
+ bullet.point_towards_sprite(game.shared_data['player'])
57
+ bullet.set_scale(2.3)
58
+ #game.add_sprite(bullet)
59
+ speed = random.random()*15+5
60
+ bullet.point_towards_sprite(game.shared_data['player'])
61
+
62
+
63
+ movement_event = game.when_timer_reset(20).add_handler(lambda x: bullet.move_indir(speed))
64
+ #movement_event = game.create_timer_trigger(20).on_reset(lambda x: bullet.move_across_dir((random.random()-0.5)*speed*0.3))
65
+
66
+
67
+ frame_event = game.when_timer_reset(200).add_handler(lambda x: bullet.next_frame())
68
+ hitting_player_event = game._create_specific_collision_trigger(bullet, game.shared_data['player'])
69
+
70
+
71
+ def explode_and_destroy(a):
72
+ bullet.set_animation('star_explosion')
73
+ game.broadcast_message('player_health', -1)
74
+ movement_event.remove()
75
+ game.when_timer_reset(200, 1).add_handler(destory)
76
+
77
+
78
+ def destory(x):
79
+ movement_event.remove()
80
+ frame_event.remove()
81
+ hitting_player_event.remove()
82
+ game._remove_sprite(bullet)
83
+
84
+ when_exit_screen = game.when_condition_met(lambda: bullet.y > HEIGHT, repeats=1)
85
+ when_exit_screen.add_handler(destory)
86
+ hitting_player_event.add_handler(explode_and_destroy)
87
+ pass
88
+
89
+
90
+
91
+
92
+ def create_bullet_move_sine(position, rotation):
93
+ bullet = Sprite(frames, "square_bullets", position)
94
+ bullet.set_scale(2.3)
95
+ #game.add_sprite(bullet)
96
+ bullet.set_rotation(rotation+90)
97
+ #speed = random.random()*15+5
98
+ speed = 10
99
+
100
+
101
+ bullet.sprite_data['phase'] = 0
102
+ movement_event = game.when_timer_reset(30)
103
+ def move(x):
104
+ bullet.sprite_data['phase']+=.1
105
+ angle = np.tanh(np.cos(.6*bullet.sprite_data['phase']))
106
+
107
+
108
+ bullet.add_rotation(angle)
109
+
110
+ bullet.move_indir(speed)
111
+
112
+
113
+ movement_event.add_handler(move)
114
+
115
+
116
+ frame_event = game.when_timer_reset(200).add_handler(lambda x: bullet.next_frame())
117
+ hitting_player_event = game._create_specific_collision_trigger(bullet, game.shared_data['player'])
118
+
119
+
120
+ def explode_and_destroy(a):
121
+ bullet.set_animation('star_explosion')
122
+ game.broadcast_message('player_health', -1)
123
+ movement_event.remove()
124
+ game.when_timer_reset(200, 1).add_handler(destory)
125
+
126
+
127
+ def destory(x):
128
+ movement_event.remove()
129
+ frame_event.remove()
130
+ hitting_player_event.remove()
131
+ game._remove_sprite(bullet)
132
+
133
+ when_exit_screen = game.when_condition_met(lambda: (bullet.y > HEIGHT) or (bullet.y < 0) or (bullet.x <0) or (bullet.x>WIDTH) , repeats=1)
134
+ when_exit_screen.add_handler(destory)
135
+ hitting_player_event.add_handler(explode_and_destroy)
136
+
137
+
138
+
139
+
140
+ def create_bullet_type1(position, rotation):
141
+ bullet = Sprite(frames, "spin", position)
142
+ bullet.add_rotation(rotation)
143
+ bullet.set_scale(2.3)
144
+ #game.add_sprite(bullet)
145
+ speed = random.random()*15+5
146
+ #speed = 15
147
+
148
+ movement_event = game.when_timer_reset(20).add_handler(lambda x: bullet.move_indir(speed))
149
+ #movement_event = game.create_timer_trigger(20).on_reset(lambda x: bullet.move_across_dir((random.random()-0.5)*speed*0.3))
150
+
151
+
152
+ frame_event = game.when_timer_reset(200).add_handler(lambda x: bullet.next_frame())
153
+ hitting_player_event = game._create_specific_collision_trigger(bullet, game.shared_data['player'])
154
+
155
+
156
+ def explode_and_destroy(a):
157
+ bullet.set_animation('star_explosion')
158
+ game.broadcast_message('player_health', -1)
159
+ movement_event.remove()
160
+ game.when_timer_reset(200, 1).add_handler(destory)
161
+
162
+ when_exit_screen = game.when_condition_met(lambda: bullet.y > HEIGHT, repeats=1)
163
+
164
+ def destory(x):
165
+ movement_event.remove()
166
+ frame_event.remove()
167
+ hitting_player_event.remove()
168
+ game._remove_sprite(bullet)
169
+ when_exit_screen.remove()
170
+
171
+ when_exit_screen.add_handler(destory)
172
+ hitting_player_event.add_handler(explode_and_destroy)
173
+
174
+
175
+
176
+
177
+
178
+
179
+ def create_enemy_type1(position):
180
+
181
+ enemy_sprite = create_rect_sprite((255, 0, 0), 50, 30, pos=position)
182
+ #game.add_sprite(enemy_sprite)
183
+
184
+ enemy_sprite.add_rotation(90+(random.random()-0.5)*15)
185
+ enemy_sprite.set_collision_type(ENEMY_TYPE)
186
+
187
+
188
+ speed = random.random()*6
189
+ print(game.shared_data['player'])
190
+
191
+
192
+
193
+ movement_event = game.when_timer_reset(20).add_handler(lambda x: enemy_sprite.move_indir(speed))
194
+ bullet_event = game.when_timer_reset(150).add_handler(lambda x: create_bullet_type1((enemy_sprite.x, enemy_sprite.y), enemy_sprite.get_rotation()))
195
+ #bullet_event = game.create_timer_trigger(1500).on_reset(lambda x: create_bullet_attracted((enemy_sprite.x, enemy_sprite.y)))
196
+
197
+ when_hit_player = game.when_condition_met(lambda: game.is_touching(game, enemy_sprite, game.shared_data['player']), repeats=1)
198
+ when_leaving_screen = game.when_condition_met(lambda: (enemy_sprite.y > HEIGHT), repeats=1)
199
+ when_hit_by_player_bullet = game._create_type2type_collision_trigger(PLAYER_BULLET_TYPE, ENEMY_TYPE)
200
+
201
+
202
+
203
+
204
+
205
+ def destroy(x):
206
+ when_hit_player.remove()
207
+ when_leaving_screen.remove()
208
+ when_hit_by_player_bullet.remove()
209
+ movement_event.remove()
210
+ bullet_event.remove()
211
+ game._remove_sprite(enemy_sprite)
212
+
213
+ def check_collision(a):
214
+ if enemy_sprite._shape in a.shapes:
215
+ destroy(None)
216
+
217
+ when_hit_player.add_handler(destroy)
218
+ when_hit_player.add_handler(lambda x: game.broadcast_message('player_health', -1))
219
+
220
+ when_leaving_screen.add_handler(destroy)
221
+
222
+ when_hit_by_player_bullet.add_handler(check_collision)
223
+
224
+
225
+
226
+
@@ -0,0 +1,6 @@
1
+ from player import *
2
+ from enemy import *
3
+ from main import game
4
+
5
+
6
+ game.start(60, 300, False)
@@ -0,0 +1,50 @@
1
+ import random
2
+ import re, sys
3
+ import numpy as np
4
+ import pymunk
5
+ from pyscratch.sprite import Sprite, create_rect, create_rect_sprite
6
+ from pyscratch.helper import _get_frame_dict
7
+ from pyscratch.game_module import Game
8
+
9
+
10
+ import pygame
11
+
12
+ WIDTH = 720
13
+ HEIGHT = 1280
14
+
15
+
16
+ ENEMY_TYPE = 3
17
+ PLAYER_TYPE = 2
18
+ PLAYER_BULLET_TYPE = 4
19
+ EDGE_TYPE = 1
20
+
21
+ def cap(v, min_v, max_v):
22
+
23
+
24
+
25
+ return max(min(max_v, v), min_v)
26
+
27
+ game = Game((WIDTH, HEIGHT))
28
+ sprite_sheet = pygame.image.load("assets/09493140a07b68502ef63ff423a6da3954d36fd8/Green Effect and Bullet 16x16.png").convert_alpha()
29
+
30
+ font = pygame.font.SysFont(None, 24) # None = default font, 48 = font size
31
+ game._suppress_type_collision(PLAYER_TYPE, True)
32
+
33
+
34
+ frames = _get_frame_dict(sprite_sheet, 36, 13, {
35
+ "spin": [i+4*36 for i in range(14, 17+1)],
36
+ "star_explosion": [i+4*36 for i in range(19, 22+1)],
37
+ "heal": [i+1*36 for i in range(24, 28+1)],
38
+ "circle_explosion": [i+5*36 for i in range(14, 17+1)],
39
+
40
+
41
+ "square_bullets": [i+9*36 for i in range(24, 28+1)]+[i+9*36 for i in range(27, 24, -1)],
42
+ "circle_bullets": [i+8*36 for i in range(24, 28+1)]+[i+8*36 for i in range(27, 24, -1)],
43
+
44
+ "shield": [i+5*36 for i in [17]],
45
+
46
+ "bullet1": [i+3*36 for i in range(7, 7+1)]
47
+ })
48
+
49
+
50
+ #game.start(60, 300, False)