From cdfe4ddf1fc1a4b178e2b51a240c6bb686c8ed45 Mon Sep 17 00:00:00 2001 From: Anton Laktionov Date: Tue, 26 May 2026 17:21:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D1=82=D0=B0=D1=80=D1=82=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=B4=D0=B2=D0=B8=D0=B6=D0=BA=D0=B5=20pymunk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pymunk_game.py | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 pymunk_game.py diff --git a/pymunk_game.py b/pymunk_game.py new file mode 100644 index 0000000..0972018 --- /dev/null +++ b/pymunk_game.py @@ -0,0 +1,91 @@ +import arcade +from random import randint + +class MainView(arcade.View): + def __init__(self): + super().__init__() + self.background_color = (100,100,200) + self.engine = arcade.PymunkPhysicsEngine(gravity=(0, 0)) + self.key_up = False + self.key_down = False + self.key_left = False + self.key_right = False + + self.objects = arcade.SpriteList() + for _ in range(10): + self.objects.append( + arcade.Sprite( + ':resources:/images/tiles/bomb.png', + scale=0.5, + center_x = randint(0,800), + center_y = randint(0,800) + ) + ) + self.engine.add_sprite_list( + self.objects, + mass=1, + friction=0.0, + elasticity=0.0, + moment_of_inertia=float('inf'), + damping=0.1 + ) + + self.walls = arcade.SpriteList() + for i in range(15): + for j in range(15): + if i==0 or j==0 or i==12 or j==12: + self.walls.append( + arcade.Sprite( + ':resources:/images/tiles/brickBrown.png', + scale=0.5, + center_x = 32 + i*64, + center_y = 32 + j*64 + ) + ) + self.engine.add_sprite_list( + self.walls, + body_type=arcade.PymunkPhysicsEngine.STATIC) + + def on_update(self, delta_time): + self.objects.update() + for obj in self.objects: + if self.key_up: + self.engine.apply_force(obj,(0,100)) + if self.key_down: + self.engine.apply_force(obj,(0,-100)) + if self.key_left: + self.engine.apply_force(obj,(-100,0)) + if self.key_right: + self.engine.apply_force(obj,(100,0)) + + self.engine.step(delta_time) + + def on_draw(self): + self.clear() + self.objects.draw() + self.walls.draw() + + def on_key_press(self,key,mod): + if key == arcade.key.W: + self.key_up = True + if key == arcade.key.S: + self.key_down = True + if key == arcade.key.A: + self.key_left = True + if key == arcade.key.D: + self.key_right = True + def on_key_release(self,key,mod): + if key == arcade.key.W: + self.key_up = False + if key == arcade.key.S: + self.key_down = False + if key == arcade.key.A: + self.key_left = False + if key == arcade.key.D: + self.key_right = False + +if __name__ == '__main__': + window = arcade.Window(800,800,'') + view = MainView() + window.show_view(view) + arcade.run()