From da249afbff12e52aed2fa494cdef39b641de8793 Mon Sep 17 00:00:00 2001 From: Skullheadx <704277@pdsb.net> Date: Tue, 12 Jul 2022 12:06:53 -0400 Subject: [PATCH] added spikes --- Assets/world/decor/SPIKE.png | Bin 0 -> 4965 bytes Game.py | 13 +++++++++---- Levels/Level5.txt | 6 +++--- Player.py | 34 ++++++++++++++++++++++------------ Spike.py | 19 +++++++++++++++++++ World.py | 4 +++- 6 files changed, 56 insertions(+), 20 deletions(-) create mode 100644 Assets/world/decor/SPIKE.png create mode 100644 Spike.py diff --git a/Assets/world/decor/SPIKE.png b/Assets/world/decor/SPIKE.png new file mode 100644 index 0000000000000000000000000000000000000000..81f52f242f04c34ba117512faa6c139f328834b5 GIT binary patch literal 4965 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 literal 0 HcmV?d00001 diff --git a/Game.py b/Game.py index 6a98c72..271a6a8 100644 --- a/Game.py +++ b/Game.py @@ -19,12 +19,12 @@ from UI.HealthBar import HealthBar from UI.PotionUI import PotionUI from World import World from Item import PotionItem - +from Spike import Spike class Game: def __init__(self, level): - self.collision_layer = {"none": set(), "world": set(), "player": set(), "enemy": set(), "pet": set(), "body":set(), "potion":set()} + self.collision_layer = {"none": set(), "world": set(), "player": set(), "enemy": set(), "pet": set(), "body":set(), "potion":set(), "spike":set()} # self.load_world(level) @@ -35,15 +35,18 @@ class Game: self.world = World(self.collision_layer) - enemy_positions, player_position, self.portal_position, heal_positions = self.world.load_world(level) + enemy_positions, player_position, self.portal_position, heal_positions, spike_positions = self.world.load_world(level) for i in heal_positions: PotionItem(i, self.collision_layer["potion"]) + for i in spike_positions: + Spike(i, self.collision_layer["spike"]) self.player = Player(player_position, self.collision_layer["player"], [self.collision_layer["enemy"], self.collision_layer["world"]], [self.collision_layer["enemy"], self.collision_layer["body"]], - self.collision_layer["potion"]) + self.collision_layer["potion"], + self.collision_layer["spike"]) # self.pet = Pet(center, self.collision_layer["pet"], [self.collision_layer["world"]]) self.enemies = [Enemy(pos, self.collision_layer["enemy"], [self.collision_layer["player"], self.collision_layer["world"]]) for pos in @@ -130,6 +133,8 @@ class Game: for potion in self.collision_layer["potion"]: potion.draw(surf) + for spike in self.collision_layer["spike"]: + spike.draw(surf) for particle in particles: particle.draw(surf) diff --git a/Levels/Level5.txt b/Levels/Level5.txt index 218a7fc..61e383f 100644 --- a/Levels/Level5.txt +++ b/Levels/Level5.txt @@ -1,6 +1,6 @@ -none|none|none|none|none|none|none|none|none|none|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world -1250.0,750.0|1200.0,750.0|1350.0,750.0|1350.0,700.0|1450.0,750.0|1450.0,700.0|1450.0,650.0|1450.0,600.0|1450.0,550.0|1250.0,700.0|50.0,800.0|100.0,800.0|150.0,800.0|200.0,800.0|250.0,800.0|300.0,800.0|350.0,800.0|400.0,800.0|450.0,800.0|500.0,800.0|550.0,800.0|600.0,800.0|650.0,800.0|700.0,800.0|750.0,800.0|800.0,800.0|850.0,800.0|900.0,800.0|950.0,800.0|1000.0,800.0|1050.0,800.0|1100.0,800.0|1150.0,800.0|1200.0,800.0|1250.0,800.0|1300.0,800.0|1350.0,800.0|1400.0,800.0|1450.0,800.0|1500.0,800.0|1550.0,800.0|1600.0,800.0|1650.0,800.0|1700.0,800.0|1750.0,800.0|1800.0,800.0|1850.0,800.0|1900.0,800.0|1950.0,800.0|2000.0,800.0|2050.0,800.0|2100.0,800.0|2150.0,850.0|2100.0,850.0|2050.0,850.0|2000.0,850.0|1950.0,850.0|1900.0,850.0|1850.0,850.0|1800.0,850.0|1750.0,850.0|1700.0,850.0|1650.0,850.0|1600.0,850.0|1550.0,850.0|1500.0,850.0|1450.0,850.0|1400.0,850.0|1350.0,850.0|1300.0,850.0|1250.0,850.0|1200.0,850.0|1150.0,850.0|1100.0,850.0|1050.0,850.0|1000.0,850.0|950.0,850.0|900.0,850.0|850.0,850.0|800.0,850.0|750.0,850.0|700.0,850.0|650.0,850.0|600.0,850.0|550.0,850.0|500.0,850.0|450.0,850.0|400.0,850.0|350.0,850.0|300.0,850.0|250.0,850.0|200.0,850.0|150.0,850.0|100.0,850.0|50.0,850.0|0.0,850.0|0.0,800.0|0.0,750.0|0.0,700.0|0.0,650.0|0.0,600.0|0.0,550.0|0.0,400.0|0.0,350.0|0.0,300.0|0.0,250.0|0.0,200.0|0.0,150.0|0.0,100.0|0.0,50.0|0.0,0.0|2200.0,850.0|2200.0,800.0|2200.0,750.0|2200.0,700.0|2200.0,650.0|2200.0,600.0|2150.0,400.0|2200.0,200.0|2200.0,150.0|2200.0,100.0|2200.0,50.0|2200.0,0.0|2150.0,0.0|2150.0,50.0|2150.0,100.0|2150.0,150.0|2150.0,200.0|2150.0,250.0|2150.0,350.0|2150.0,300.0|2200.0,250.0|2200.0,300.0|2200.0,350.0|2200.0,400.0|2200.0,550.0|2150.0,550.0|2150.0,600.0|2150.0,650.0|2150.0,700.0|2150.0,750.0|2150.0,800.0|0.0,450.0|2200.0,450.0|2150.0,450.0|2150.0,500.0|2200.0,500.0|0.0,500.0|1050.0,750.0|1100.0,750.0|1050.0,700.0|1000.0,750.0|700.0,750.0|1450.0,500.0|1400.0,500.0|1350.0,500.0|1300.0,500.0|1250.0,500.0|1200.0,500.0|1150.0,500.0|1100.0,500.0|1050.0,500.0|1000.0,500.0|950.0,500.0|1200.0,700.0|1250.0,400.0|950.0,550.0|950.0,600.0|950.0,650.0|950.0,700.0|950.0,750.0 -GOLDCOIN|BRONZECOIN|PEDESTAL|INTERDIMENSIONALPOWDER|PILLAR_|PILLAR_|PILLAR_|PILLAR_|PILLAR_|SILVERCOIN|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|HEALTHPOTION|HEALTHPOTION|HEALTHPOTION|HEALTHPOTION|HEALTHPOTION|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|ENEMY|PLAYER|PILLAR_|PILLAR_|PILLAR_|PILLAR_|PILLAR_ +none|none|none|none|none|none|none|none|none|none|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world|world +1250.0,750.0|1200.0,750.0|1350.0,750.0|1350.0,700.0|1450.0,750.0|1450.0,700.0|1450.0,650.0|1450.0,600.0|1450.0,550.0|1250.0,700.0|50.0,800.0|100.0,800.0|150.0,800.0|200.0,800.0|250.0,800.0|300.0,800.0|350.0,800.0|400.0,800.0|450.0,800.0|500.0,800.0|550.0,800.0|600.0,800.0|650.0,800.0|700.0,800.0|750.0,800.0|800.0,800.0|850.0,800.0|900.0,800.0|950.0,800.0|1000.0,800.0|1050.0,800.0|1100.0,800.0|1150.0,800.0|1200.0,800.0|1250.0,800.0|1300.0,800.0|1350.0,800.0|1400.0,800.0|1450.0,800.0|1500.0,800.0|1550.0,800.0|1600.0,800.0|1650.0,800.0|1700.0,800.0|1750.0,800.0|1800.0,800.0|1850.0,800.0|1900.0,800.0|1950.0,800.0|2000.0,800.0|2050.0,800.0|2100.0,800.0|2150.0,850.0|2100.0,850.0|2050.0,850.0|2000.0,850.0|1950.0,850.0|1900.0,850.0|1850.0,850.0|1800.0,850.0|1750.0,850.0|1700.0,850.0|1650.0,850.0|1600.0,850.0|1550.0,850.0|1500.0,850.0|1450.0,850.0|1400.0,850.0|1350.0,850.0|1300.0,850.0|1250.0,850.0|1200.0,850.0|1150.0,850.0|1100.0,850.0|1050.0,850.0|1000.0,850.0|950.0,850.0|900.0,850.0|850.0,850.0|800.0,850.0|750.0,850.0|700.0,850.0|650.0,850.0|600.0,850.0|550.0,850.0|500.0,850.0|450.0,850.0|400.0,850.0|350.0,850.0|300.0,850.0|250.0,850.0|200.0,850.0|150.0,850.0|100.0,850.0|50.0,850.0|0.0,850.0|0.0,800.0|0.0,750.0|0.0,700.0|0.0,650.0|0.0,600.0|0.0,550.0|0.0,400.0|0.0,350.0|0.0,300.0|0.0,250.0|0.0,200.0|0.0,150.0|0.0,100.0|0.0,50.0|0.0,0.0|2200.0,850.0|2200.0,800.0|2200.0,750.0|2200.0,700.0|2200.0,650.0|2200.0,600.0|2150.0,400.0|2200.0,200.0|2200.0,150.0|2200.0,100.0|2200.0,50.0|2200.0,0.0|2150.0,0.0|2150.0,50.0|2150.0,100.0|2150.0,150.0|2150.0,200.0|2150.0,250.0|2150.0,350.0|2150.0,300.0|2200.0,250.0|2200.0,300.0|2200.0,350.0|2200.0,400.0|2200.0,550.0|2150.0,550.0|2150.0,600.0|2150.0,650.0|2150.0,700.0|2150.0,750.0|2150.0,800.0|0.0,450.0|2200.0,450.0|2150.0,450.0|2150.0,500.0|2200.0,500.0|0.0,500.0|1050.0,750.0|1100.0,750.0|1050.0,700.0|1000.0,750.0|700.0,750.0|1450.0,500.0|1400.0,500.0|1350.0,500.0|1300.0,500.0|1250.0,500.0|1200.0,500.0|1150.0,500.0|1100.0,500.0|1050.0,500.0|1000.0,500.0|950.0,500.0|1200.0,700.0|1250.0,400.0|950.0,550.0|950.0,600.0|950.0,650.0|950.0,700.0|950.0,750.0|50.0,750.0|100.0,750.0|150.0,750.0 +GOLDCOIN|BRONZECOIN|PEDESTAL|INTERDIMENSIONALPOWDER|PILLAR_|PILLAR_|PILLAR_|PILLAR_|PILLAR_|SILVERCOIN|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|HEALTHPOTION|HEALTHPOTION|HEALTHPOTION|HEALTHPOTION|HEALTHPOTION|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|PLACEHOLDER|ENEMY|PLAYER|PILLAR_|PILLAR_|PILLAR_|PILLAR_|PILLAR_|SPIKE|SPIKE|SPIKE diff --git a/Player.py b/Player.py index 9c45daf..1770ba4 100644 --- a/Player.py +++ b/Player.py @@ -7,6 +7,7 @@ from Actors import Actor from datetime import datetime, timedelta from Potion import Potion from Item import PotionItem +from Spike import Spike from Weapon import Sword from Particle import Dust @@ -29,7 +30,7 @@ class Player(Actor): for i in range(run_gif.n_frames): run_frames.append(pg.transform.scale(pil_to_game(get_gif_frame(run_gif, i)), (155, 155))) - #Player SFX + # Player SFX running_sound = pg.mixer.Sound("Assets/SFX/Running_Sound_Effect.wav") running_sound_channel = pg.mixer.Channel(1) sword_swing_sound = pg.mixer.Sound("Assets/SFX/Sword_Swing.wav") @@ -41,7 +42,7 @@ class Player(Actor): colour = (52, 94, 235) - def __init__(self, pos, collision_layer, collision_mask, can_hurt, heals): + def __init__(self, pos, collision_layer, collision_mask, can_hurt, heals, spikes): super().__init__(pos, collision_layer, collision_mask) # self.initial_position = pg.Vector2(pos) # self.dashCooldown = timedelta(seconds=2, microseconds=500000) @@ -55,7 +56,10 @@ class Player(Actor): # self.lastPressedRight = datetime.utcnow() # self.lastValueR = False self.areas = {"head": Area(self.position, pg.Vector2(0, self.height / 2), self.width, self.height / 2, Actor), - "body": Area(self.position,(0,0),self.width,self.height,PotionItem, self.add_potion)} + "body": Area(self.position, (0, 0), self.width, self.height, PotionItem, self.add_potion), + "body2": Area(self.position, (0, 0), self.width, self.height, Spike, self.die)} + + self.spike_layer = spikes self.heal_layer = heals self.potion_cooldown = 0 @@ -78,6 +82,8 @@ class Player(Actor): self.buffer = [] + def die(self): + self.dead = True def add_potion(self): if len(self.potion_bag) < 3: @@ -92,7 +98,7 @@ class Player(Actor): def attack(self, enemy, weapon, direction): self.friction = 0.9 - super().attack(enemy,weapon,direction) + super().attack(enemy, weapon, direction) def update(self, delta): @@ -106,12 +112,16 @@ class Player(Actor): # Get and handle input self.handle_input() - for i,heal in enumerate(self.heal_layer): + for i, heal in enumerate(self.heal_layer): if len(self.potion_bag) < 3 and self.areas["body"].is_colliding(heal): self.add_potion() self.heal_layer.remove(heal) break + for i in self.spike_layer: + if self.areas["body2"].is_colliding(i): + self.die() + if len(self.potion_bag) > 0: self.potion_bag[0].get_input(self) @@ -131,7 +141,7 @@ class Player(Actor): if self.on_ground == True and self.previous_ground_state == False: self.landing_sound_channel.play(self.landing_sound) - + if self.state == "IDLE": self.display_offsets["player"] = pg.Vector2(0, 0) @@ -186,7 +196,8 @@ class Player(Actor): self.display_offsets["player"] = pg.Vector2(-65, -35) if frame % 2 == 0 and self.on_ground: - Dust(pg.Vector2(self.get_collision_rect().midbottom) + pg.Vector2(math.copysign(1, self.velocity.x) * -self.width/2,-15), 16, self.direction) + Dust(pg.Vector2(self.get_collision_rect().midbottom) + pg.Vector2( + math.copysign(1, self.velocity.x) * -self.width / 2, -15), 16, self.direction) self.current_frame = (self.current_frame + 0.5) % self.run_gif.n_frames @@ -196,7 +207,7 @@ class Player(Actor): if self.on_ground == True and self.previous_ground_state == False: self.running_sound_channel.play(self.running_sound, -1) - + self.previous_state = self.state self.previous_ground_state = self.on_ground return self.position - center @@ -205,7 +216,6 @@ class Player(Actor): if self.stun_time > 0: return - pressed = pygame.key.get_pressed() if pressed[pg.K_w] or pressed[pg.K_UP] or pressed[pg.K_SPACE]: self.jump() @@ -214,7 +224,7 @@ class Player(Actor): if self.state != "ATTACK": if self.state != "RUN": self.current_frame = 0 - + self.state = "RUN" self.move_left() # if (self.lastValueL == False): @@ -235,7 +245,7 @@ class Player(Actor): if self.state != "ATTACK": if self.state != "RUN": self.current_frame = 0 - + self.state = "RUN" self.move_right() @@ -303,7 +313,7 @@ class Player(Actor): a = get_display_rect(self.get_collision_rect()) b = a.topleft + self.display_offsets["player"] - if pg.Rect(b,a.size).colliderect(screen_rect): + if pg.Rect(b, a.size).colliderect(screen_rect): surf.blit(self.display, b) # # for b in self.buffer: diff --git a/Spike.py b/Spike.py new file mode 100644 index 0000000..a16114d --- /dev/null +++ b/Spike.py @@ -0,0 +1,19 @@ +from Setup import * + + +class Spike: + width, height = 50, 50 + img = pg.transform.scale(pg.image.load("Assets/world/decor/SPIKE.png"), (50, 50)) + + def __init__(self, pos, collision_layer): + self.position = pg.Vector2(pos) + collision_layer.add(self) + + def update(self, delta): + pass + + def get_collision_rect(self): + return pg.Rect(self.position, (self.width, self.height)) + + def draw(self, surf): + surf.blit(self.img, get_display_rect(self.get_collision_rect())) diff --git a/World.py b/World.py index 15bf15f..c69f050 100644 --- a/World.py +++ b/World.py @@ -14,7 +14,7 @@ class World: with open(path.join("Levels", f'Level{level}.txt'), 'r') as f: file_contents = f.read().split("\n") - out = [[], center, "a", []] + out = [[], center, "a", [], []] for i in range(0, len(file_contents) - 1, 3): layer = file_contents[i].split("|") pos = file_contents[i + 1].split("|") @@ -34,6 +34,8 @@ class World: out[2] = (x, y) elif t == "HEALTHPOTION": out[3].append((x,y)) + elif t == "SPIKE": + out[4].append((x,y)) elif f"{t}.png" in listdir("Assets/world/decor"): self.blocks.append(Decor((x,y),self.collision_layer["none"],t)) else: -- 2.54.0