From 4b12f09ebda4118b684481d18404a3064b59be3b Mon Sep 17 00:00:00 2001 From: Lyzzy Date: Thu, 22 Feb 2024 20:34:45 +0000 Subject: [PATCH] Dateien nach "/" hochladen --- main.py | 17 +++++++--- viecher.py | 92 ++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 84 insertions(+), 25 deletions(-) diff --git a/main.py b/main.py index d4c669f..bcbf72b 100644 --- a/main.py +++ b/main.py @@ -27,8 +27,11 @@ def quitGame(): quit() def play(screen, clock, running, background, isblack, WIDTH, HEIGHT): - objects = [] - objects.append(MainCharacter('Herbert', 100, 'reddy.png', 125, 5, 1, 1, 50)) + main = [MainCharacter('Herbert', 100, 'reddy.png', 500, 500, 125, 5, 1, 1, 50)] + mobs=[] + mobs.append(Skeleton('s1', 50, 'reddy.png', 250, 250, 125, 5, 1, 1, 200)) + objects = [main,mobs] + while running: screen.fill('#000000') events = pygame.event.get() @@ -42,9 +45,13 @@ def play(screen, clock, running, background, isblack, WIDTH, HEIGHT): # fill the screen with an image to clear the screen screen.blit(bg, (0, 0)) """ - for obj in objects: - obj.update(pygame.key.get_pressed()) - obj.draw(screen) + for thing in objects[0]: + thing.update(pygame.key.get_pressed()) + thing.draw(screen) + + for mob in objects[1]: + mob.update(objects) + mob.draw(screen) # flip() the display to put your work on screen pygame.display.flip() diff --git a/viecher.py b/viecher.py index 1cb3211..ebf6f10 100644 --- a/viecher.py +++ b/viecher.py @@ -1,14 +1,15 @@ import pygame +vec = pygame.math.Vector2 fps = 60 -class Character(): - def __init__(self, name, ms, sprite) -> None: +class Objects(): + def __init__(self, name, ms, sprite, x, y) -> None: self.name = name self.speed = ms with open(f'art/images/{sprite}') as i: self.sprite = pygame.image.load(i) - self.x = 524 - self.y = 524 + self.x = x + self.y = y self.hidden = False self.rect = pygame.Rect(self.x, self.y, self.sprite.get_width(), self.sprite.get_height()) @@ -20,13 +21,13 @@ class Character(): screen.blit(self.sprite, self.rect) -class NPC(Character): +class NPC(Objects): pass -class Fighter(Character): - def __init__(self, name, ms, sprite, health, damage, level, asp, atr) -> None: - super().__init__(name, ms, sprite) +class Fighter(Objects): + def __init__(self, name, ms, sprite, x, y, health, damage, level, asp, atr) -> None: + super().__init__(name, ms, sprite, x, y) self.health = health self.damage = damage self.level = level @@ -34,23 +35,74 @@ class Fighter(Character): self.attack_range = atr class MainCharacter(Fighter): - def __init__(self, name, ms, sprite, health, damage, level, asp, atr, weapon=None, shield=None) -> None: - super().__init__(name, ms, sprite, health, damage, level, asp, atr) + 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.attack_spell = weapon self.shield_spell = shield self.talking = False def update(self, keys): - if keys[pygame.K_w]: - self.y -= self.speed / fps - if keys[pygame.K_a]: - self.x -= self.speed / fps - if keys[pygame.K_s]: - self.y += self.speed / fps - if keys[pygame.K_d]: - self.x += self.speed / fps + moveto=vec(0,0) + if keys[pygame.K_w] or keys[pygame.K_UP]: + moveto += vec(0,-1) + if keys[pygame.K_a] or keys[pygame.K_LEFT]: + moveto += vec(-1,0) + if keys[pygame.K_s] or keys[pygame.K_DOWN]: + moveto += vec(0,1) + if keys[pygame.K_d] or keys[pygame.K_RIGHT]: + moveto += vec(1,0) + if not moveto == vec(0,0): + moveto.scale_to_length(self.speed) + self.x += moveto[0] / fps + self.y += moveto[1] / fps + + + class Mobs(Fighter): - def __init__(self, name, ms, sprite, health, damage, level, asp, atr, drops) -> None: - super().__init__(name, ms, sprite, health, damage, level, asp, atr) + 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) self.drops = drops * (self.level / 2) + +class Skeleton(Mobs): + def __init__(self, name, ms, sprite, x, y, health, damage, level, asp, atr, drops=0) -> None: + super().__init__(name, ms, sprite, x, y, health, damage, level, asp, atr, drops) + self.canAttack=True + + def follow(self,obj): + x=obj[0][0].x + y=obj[0][0].y + moveto = vec(x,y) - vec(self.x,self.y) + if not (moveto).length()<=self.attack_range: + moveto.scale_to_length(self.speed) + self.x += moveto[0]/fps + self.y += moveto[1]/fps + else: + self.attack(moveto,obj) + + def attack(self,moveto,obj): + if self.canAttack==True: + obj[1].append(Arrow("arrow",100,self.x,self.y,moveto)) + self.canAttack=False + + def cooldown(self): + pass + + + def update(self,obj): + self.follow(obj) + + +class Weapons(Objects): + def __init__(self, name, ms, sprite, x, y, moveto) -> None: + super().__init__(name, ms, sprite, x, y) + +class Arrow(Weapons): + def __init__(self, name, ms, x, y, moveto, sprite="textbox.png") -> None: + super().__init__(name, ms, sprite, x, y, moveto) + self.moveto = moveto + + def update(self,objects): + self.moveto.scale_to_length(self.speed) + self.x += self.moveto[0]/fps + self.y += self.moveto[1]/fps \ No newline at end of file