From f6827b5f056413e6b95a797b58dbad4759969fc2 Mon Sep 17 00:00:00 2001 From: Lyzzy Date: Fri, 1 Mar 2024 21:50:39 +0000 Subject: [PATCH] revert 8b2dab980bdca32c87be19b604f40d547fbef8de revert Schaden Gegner, Buch, Angriff --- main.py | 46 +++++--------- viecher.py | 178 ++++++++++------------------------------------------- 2 files changed, 49 insertions(+), 175 deletions(-) diff --git a/main.py b/main.py index 840dfae..0b04ece 100644 --- a/main.py +++ b/main.py @@ -39,11 +39,9 @@ def genRooms(WIDTH, HEIGHT, type:str): def play(screen, clock, running, background, isblack, WIDTH, HEIGHT): main = [MainCharacter('Herbert', 100, 'oldman.png', 500, 500, 20, 5, 1, 1, 50)] - mobs = [Skeleton(i, random.randint(40, 60), 'reddy.png', random.randint(20,1000), random.randint(20,700), 5, 1, 1, 1, 200) for i in range(0,random.randint(2, 8))] + mobs=[Skeleton(i, random.randint(40, 60), 'reddy.png', random.randint(20,1000), random.randint(20,700), 125, 1, 1, 1, 200) for i in range(0,random.randint(2, 8))] others = [] - npcs = [NPC('name', 100, 'reddy.png', 1, 200, 200)] - objects = [main, mobs, npcs, others] - freeze = False #Gameplay is freezed in certain situations + objects = [main, mobs, others] while running: screen.fill('#000000') @@ -51,9 +49,6 @@ def play(screen, clock, running, background, isblack, WIDTH, HEIGHT): for event in events: if event.type == pygame.QUIT: quitGame() - elif event.type == pygame.KEYDOWN: - if event.key == pygame.K_e: #when book is open gameplay is freezed - freeze = not freeze # RENDER YOUR GAME HERE """with open(background, 'r') as i: bg = pygame.image.load(i) @@ -61,28 +56,20 @@ def play(screen, clock, running, background, isblack, WIDTH, HEIGHT): # fill the screen with an image to clear the screen screen.blit(bg, (0, 0)) """ - if not freeze: - for thing in objects[0]: - thing.book.hidden = not freeze - if not thing.update(pygame.key.get_pressed(), objects): - menu(screen, clock, running, background, isblack, WIDTH, HEIGHT) - thing.draw(screen) + for thing in objects[0]: + if not thing.update(pygame.key.get_pressed()): + menu(screen, clock, running, background, isblack, WIDTH, HEIGHT) + thing.draw(screen) + + for mob in objects[1]: + mob.update(objects) + mob.draw(screen) + + for thing in objects[2]: + thing.update(objects) + thing.draw(screen) + - for mob in objects[1]: - mob.update(objects) - mob.draw(screen) - - for npc in objects[2]: - npc.update(pygame.key.get_pressed(), objects) - npc.draw(screen) - - for thing in objects[3]: - thing.update(objects) - thing.draw(screen) - else: - objects[0][0].book.hidden = not freeze - objects[0][0].book.draw(screen) - objects[0][0].book.update() # flip() the display to put your work on screen pygame.display.flip() @@ -183,9 +170,8 @@ def main(): #objects.append(Button(WIDTH / 2 - 80, HEIGHT / 2 - 72, 160, 64, 'medieval', 48, "Play", play)) #objects.append(Button(WIDTH / 2 - 80, HEIGHT / 2, 160, 64, 'medieval', 48, "Options", uwu)) #objects.append(Button(WIDTH / 2 - 80, HEIGHT / 2 + 72, 160, 64, 'medieval', 48, "Exit game", quitGame)) - menu(screen, clock, running, background, isblack, WIDTH, HEIGHT) test(screen, clock, running, background, isblack, WIDTH, HEIGHT) - + menu(screen, clock, running, background, isblack, WIDTH, HEIGHT) """while running: for event in pygame.event.get(): if event.type == pygame.QUIT: diff --git a/viecher.py b/viecher.py index 701347b..f3f07bd 100644 --- a/viecher.py +++ b/viecher.py @@ -45,6 +45,7 @@ class Objects(): self.x = x self.y = y self.hidden = False + self.rect = pg.Rect(self.x, self.y, self.sprite.get_width(), self.sprite.get_height()) def draw(self, screen): @@ -53,59 +54,9 @@ class Objects(): self.rect.x, self.rect.y = self.x, self.y screen.blit(self.sprite, self.rect) + class NPC(Objects): - def __init__(self, name, ms, sprite, convo_act, x, y) -> None: - self.talking = False - self.hidden = True - super().__init__(name, ms, sprite, x, y) - self.conversation = Convo('Hallo', convo_act, 'person') - - def talk(self, objects): - self.talking = True - objects[0][0].talking = True - self.conversation.hidden = False - - def draw(self, screen): - super().draw(screen) - if self.talking == True: - self.conversation.draw(screen) - - def update(self, keys, objects): - if self.talking: - self.conversation.update(keys, objects) - -class Convo(): - def __init__(self, text, convo_act, person, x = 140, y = 600, width = 1000, height = 100, font='simple', font_size = 20) -> None: - self.x = x - self.y = y - self.width = width - self.height = height - self.hidden = False - self.font = pg.font.Font(f'fonts/{fonts[font]}', font_size) - with open('art/images/label.png', 'r') as tb: - self.box = pg.image.load(tb) - self.box = pg.transform.scale(self.box, (width, height)) - self.labelRect = pg.Rect(self.x, self.y, self.width, self.height) - self.labelSurf = self.font.render(text, True, '#1E90FF') - - - def draw(self, screen): - if self.hidden: - return - self.box.blit(self.labelSurf, [ - self.labelRect.width/2 - self.labelSurf.get_rect().width/2, - self.labelRect.height/2 - self.labelSurf.get_rect().height/2 - ]) - screen.blit(self.box, self.labelRect) - - def update(self, keys, objects): - if keys[pg.K_SPACE]: - objects[0][0].book.addspell('fireball') - self.talking = False - objects[0][0].talking = False - self.hidden = True - - + pass class Fighter(Objects): @@ -118,16 +69,18 @@ class Fighter(Objects): self.attack_range = atr self.lastHurt = pg.time.get_ticks() self.lastAttack = pg.time.get_ticks() - self.hurtCooldown = 0 + self.hurtCooldown = 250 + class MainCharacter(Fighter): - def __init__(self, name, ms, sprite, x, y, health, damage, level, asp, atr) -> None: + def __init__(self, name, ms, sprite, x, y, health, damage, level, asp, atr, weapon=None, shield=None) -> None: super().__init__(name, ms, sprite, x, y, health, damage, level, asp, atr) - self.book = Book(0, 0, [], None, None) + self.attack_spell = weapon + self.shield_spell = shield self.talking = False self.level = Level(1000, 38, level, 150, 40, f'will to live: {level}%', 'simple', 20) - self.health = Hearts(health, sprite=['fullheart.png', 'fullheart.png', 'fullheart.png', 'fullheart.png', 'fullheart.png'], x=900, y= 50, hurtCooldown=self.hurtCooldown) + self.health = Hearts(health, sprite=['fullheart.png', 'fullheart.png', 'fullheart.png', 'fullheart.png', 'fullheart.png'], x=900, y= 50) def draw(self, screen): if self.hidden: @@ -136,11 +89,9 @@ class MainCharacter(Fighter): screen.blit(self.sprite, self.rect) self.health.draw(screen) self.level.draw(screen) - self.book.draw(screen) - def hurt(self, damage, objects): - if not self.talking: - self.health.hurt(damage) + def hurt(self, damage): + self.health.hurt(damage) def walk(self, keys, objects): moveto = vec(0, 0) @@ -155,40 +106,26 @@ class MainCharacter(Fighter): if not moveto == vec(0, 0): moveto.scale_to_length(self.speed) self.x += moveto[0] / fps - self.y += moveto[1] / fps + self.y += moveto[1] / fps touches = pg.sprite.spritecollideany(self, objects[1] + objects[2]) if touches is not None: - self.x -= moveto[0]*1.5 / fps #change later - self.y -= moveto[1]*1.5 / fps #change later - if isinstance(touches, NPC): - touches.talk(objects) - - def attack(self, obj, moveto = vec(0,1)): - if self.lastAttack + self.attack_speed * 1000 < pg.time.get_ticks(): - if self.book.current_sp == 'fireball': - weapon = Fireball('fb1', 100, self.x, self.y, moveto, 5) - else: - return - obj[3].append(weapon) - self.lastAttack = pg.time.get_ticks() + self.x -= moveto[0] / fps #change later + self.y -= moveto[1] / fps #change later def update(self, keys, objects): - if not self.talking: - self.walk(keys, objects) - if keys[pg.K_f]: - self.attack(objects) + self.walk(keys, objects) if self.health.health <= 0: return False else: return True class Hearts(): - def __init__(self, health, sprite, x, y, hurtCooldown) -> None: + def __init__(self, health, sprite, x, y) -> None: self.x = x self.y = y self.health = health self.lastHurt = pg.time.get_ticks() - self.hurtCooldown = hurtCooldown + self.hurtCooldown = 1000 self.hidden = False self.sprite=[] for parts in sprite: @@ -252,32 +189,6 @@ class Level(): ]) screen.blit(self.box, self.labelRect) -class Book(): - def __init__(self, x, y, spells, current_spell, current_shield) -> None: - with open(f'art/images/book.png') as i: - self.sprite = pg.image.load(i) - self.sprite = pg.transform.scale(self.sprite, (1280, 720)) - self.x = x - self.y = y - self.hidden = True - self.rect = pg.Rect(self.x, self.y, self.sprite.get_width(), self.sprite.get_height()) - self.sp_list = spells - self.current_sp = current_spell - - def draw(self, screen): - if self.hidden: - return - self.rect.x, self.rect.y = self.x, self.y - screen.blit(self.sprite, self.rect) - - def addspell(self, spell): - if spell not in self.sp_list: - self.sp_list.append(spell) - self.current_sp = spell - def update(self): - pass - - class Mobs(Fighter): def __init__(self, name, ms, sprite, x, y, health, damage, level, asp, atr, drops) -> None: super().__init__(name, ms, sprite, x, y, health, damage, level, asp, atr) @@ -300,14 +211,8 @@ class Skeleton(Mobs): def attack(self, moveto, obj): if self.lastAttack + self.attack_speed * 1000 < pg.time.get_ticks(): - obj[3].append(Arrow("arrow", 200, self.x, self.y, moveto, self.damage)) + obj[1].append(Arrow("arrow", 200, self.x, self.y, moveto, self.damage)) self.lastAttack = pg.time.get_ticks() - - def hurt(self, damage, objects): - self.health -= damage - if self.health <= 0: - self.hidden = True - objects[1].remove(self) def update(self, obj): self.chase(obj) @@ -318,44 +223,27 @@ class Weapons(Objects): super().__init__(name, ms, sprite, x, y) self.moveto = moveto self.damage = damage + + +class Arrow(Weapons): + def __init__(self, name, ms, x, y, moveto, damage, sprite="arrow.png") -> None: + super().__init__(name, ms, sprite, x, y, moveto, damage) pos = vec(1,0) angle = pos.angle_to(moveto) with open(f'art/images/{sprite}') as i: self.sprite = pg.transform.rotate(pg.image.load(i), -angle) + + def move(self): + self.moveto.scale_to_length(self.speed) + self.x += self.moveto[0] / fps + self.y += self.moveto[1] / fps - def die(self, objects, kills): - touches = pg.sprite.spritecollideany(self, objects[0] + objects[1]) - if touches is not None and isinstance(touches, kills): - touches.hurt(self.damage, objects) + def die(self, objects): + touches = pg.sprite.spritecollideany(self, objects[0]) + if touches is not None and isinstance(touches, MainCharacter): + touches.hurt(self.damage) self.hidden = True - objects[3].remove(self) - -class Spells(Weapons): - def __init__(self, name, ms, sprite, x, y, moveto, damage) -> None: - super().__init__(name, ms, sprite, x, y, moveto, damage) - -class Fireball(Spells): - def __init__(self, name, ms, x, y, moveto, damage, sprite = 'fireball.png') -> None: - super().__init__(name, ms, sprite, x, y, moveto, damage) - - def move(self): - self.moveto.scale_to_length(self.speed) - self.x += self.moveto[0] / fps - self.y += self.moveto[1] / fps def update(self, objects): self.move() - self.die(objects, Mobs) - -class Arrow(Weapons): - def __init__(self, name, ms, x, y, moveto, damage, sprite = 'arrow.png') -> None: - super().__init__(name, ms, sprite, x, y, moveto, damage) - - def move(self): - self.moveto.scale_to_length(self.speed) - self.x += self.moveto[0] / fps - self.y += self.moveto[1] / fps - - def update(self, objects): - self.move() - self.die(objects, MainCharacter) + self.die(objects)