From 29219bc874211ef2284a20c8efab791c2b759948 Mon Sep 17 00:00:00 2001 From: Anton Laktionov Date: Thu, 28 May 2026 11:32:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B2=D1=80=D0=B0=D0=B3=D0=BE=D0=B2=20=D0=B8=20=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=BC=D0=B0=D1=86=D0=B8=D1=8E=20=D1=83=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- level.tiled-session | 4 +-- main.py | 66 ++++++++++++++++++++++++++++++++++++++------- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/level.tiled-session b/level.tiled-session index 4232f08..e7d6cb4 100644 --- a/level.tiled-session +++ b/level.tiled-session @@ -10,9 +10,9 @@ }, "level1.tmj": { "scale": 0.25, - "selectedLayer": 1, + "selectedLayer": 3, "viewCenter": { - "x": 1500, + "x": 1092, "y": 5412 } }, diff --git a/main.py b/main.py index 7e5b674..f01e41b 100644 --- a/main.py +++ b/main.py @@ -10,20 +10,35 @@ class Player(arcade.SpriteList): super().__init__() self.sprite = sp[0] self.append(self.sprite) + self.damage_cooldown = 0 + self.visible = True def draw(self): - super().draw() - def update(self): + if self.damage_cooldown > 0: + self.damage_cooldown -= 1 + self.visible = not self.visible + else: + self.visible = True + if self.visible: + super().draw() + def update(self,delta_time): + if self.damage_cooldown > 0: + self.damage_cooldown -= 1 super().update() - -coin_texture = arcade.SpriteSheet('./tiles/gold.png').get_texture_grid((64,64),4,4) -coin_texture_reverse = coin_texture[1:-1] -coin_texture_reverse.reverse() -coin_texture.extend(coin_texture_reverse) -coin_texture_reverse = None + def damage(self,cooldown): + self.damage_cooldown = cooldown class Coin(arcade.Sprite): + #Подготовка текстур для анимации + coin_texture = arcade.SpriteSheet('./tiles/gold.png').get_texture_grid((64,64),4,4) + coin_texture_reverse = coin_texture[1:-1] + coin_texture_reverse.reverse() + coin_texture.extend(coin_texture_reverse) + del coin_texture_reverse + sprite_list = arcade.SpriteList() texture_list = coin_texture + del coin_texture + def __init__(self,sprite): super().__init__(sprite.textures[0],scale=sprite.scale) self.center_x = sprite.center_x @@ -51,6 +66,20 @@ class Coin(arcade.Sprite): def update_list(cls): cls.sprite_list.update() +class Enemy(arcade.Sprite): + sprite_list = arcade.SpriteList() + def __init__(self,sprite): + super().__init__(sprite.texture,scale=sprite.scale) + self.center_x = sprite.center_x + self.center_y = sprite.center_y + self.angle = sprite.angle + Enemy.sprite_list.append(self) + def collision(self): + pass + @classmethod + def draw(cls): + cls.sprite_list.draw() + class MainView(arcade.View): def __init__(self): super().__init__() @@ -60,18 +89,25 @@ class MainView(arcade.View): self.key_left = False self.key_right = False self.tile_map = arcade.load_tilemap('./level1.tmj',scaling=0.5) + #Стены self.walls = self.tile_map.sprite_lists["map"] + #Фоновые тайлы self.background = self.tile_map.sprite_lists["back"] + #Объекты монеток for coin in self.tile_map.sprite_lists["coins"]: Coin(coin) + #Объекты врагов + for enemy in self.tile_map.sprite_lists["enemy"]: + Enemy(enemy) + #Объект игрока self.player = Player(self.tile_map.sprite_lists["player"]) - + #Подключаем физику только для стен и гравитации self.engine = arcade.PhysicsEnginePlatformer( player_sprite=self.player.sprite, gravity_constant=GRAVITY, walls=self.walls ) - self.engine.allow_multi_jump = False + #Создаем камеру self.camera = arcade.Camera2D() def on_update(self, delta_time): @@ -83,7 +119,9 @@ class MainView(arcade.View): self.player.sprite.change_x = 10 else: self.player.sprite.change_x = 0 + #self.player.update(delta_time) self.engine.update() + #Перемещение камеры на игрока screen_center_x, screen_center_y = self.player.sprite.position if screen_center_x < self.camera.viewport_width/2: screen_center_x = self.camera.viewport_width/2 @@ -92,15 +130,23 @@ class MainView(arcade.View): if screen_center_x > (self.tile_map.width*self.tile_map.tile_width*self.tile_map.scaling) - self.camera.viewport_width/2: screen_center_x = (self.tile_map.width*self.tile_map.tile_width*self.tile_map.scaling) - self.camera.viewport_width/2 self.camera.position = screen_center_x,screen_center_y + #Анимация монеток Coin.update_list() + #Подбор монеток при колизии colls = arcade.check_for_collision_with_list(self.player.sprite,Coin.sprite_list) for coin in colls: coin.collision() + #Столкновения с врагами + colls = arcade.check_for_collision_with_list(self.player.sprite,Enemy.sprite_list) + for enemy in colls: + enemy.collision() + self.player.damage(10) def on_draw(self): self.clear() self.camera.use() self.background.draw() + Enemy.draw() Coin.draw() self.player.draw() self.walls.draw()