import pygame import interface #Statics spawned_enemys = list() class GameObject(object): objects = list() def __init__(self, name, pos_x, pos_y, width, height, image=None) -> None: self.name = name self.pos_x:int = pos_x self.pos_y:int = pos_y self.width:int = width self.height:int = height self.image = image self.rect:pygame.Rect self.objects.append(self) def get_objectinfo(self): print(F"Gameobject-Info: \n", F"Name: {self.name}\n", F"Position x: {self.pos_x} y: {self.pos_y}\n", F"Size = width: {self.width} height: {self.height}" ) def render(self, screen:pygame.Surface): if(self.image is not None): self.rect = screen.blit(self.image, (self.pos_x, self.pos_y, self.width, self.height)) else: self.rect = pygame.draw.rect(screen, (255,0,0), (self.pos_x, self.pos_y, self.width, self.height)) return def setpos(self, pos_x, pos_y): self.pos_x = pos_x self.pos_y = pos_y def setsize(self, width, height): self.width = width self.height = height def __del__(self): #Remove objectpoint on delete from static if(len(self.objects) > 0): print(F"Remove: {self}") self.objects.remove(self) class Player(GameObject): def __init__(self, name, screen, pos_x, pos_y, width, height, image=None) -> None: super().__init__(name, pos_x, pos_y, width, height, image) self._speed = 8 self.screen:pygame.Surface = screen self.points = 0 self._health = 100 self.lifes = 2 self.kills = 0 #self._healthbar = pygame.rect.Rect((15, self.screen.get_size()[1]-50, 100, 20)) self.healthbar = interface.Healthbar(screen, "Player1", 25, screen.get_size()[1]-80, 300, 10, self.get_health()) self.keymap = {"up":False, "down":False, "left":False, "right":False} def handle_input(self, event:pygame.event.EventType): if(event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT): self.keymap["left"] = True elif(event.type == pygame.KEYUP and event.key == pygame.K_LEFT): self.keymap["left"] = False if(event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT): self.keymap["right"] = True elif(event.type == pygame.KEYUP and event.key == pygame.K_RIGHT): self.keymap["right"] = False if(event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE): #Fiiirrreee in the hole #print("Feuer!") self.fire(self.screen) def get_health(self): return self._health def get_damage(self, damage:int): if((self._health - damage) <= 0): self._health = 0 else: self._health -= damage def move(self, x=0, y=0): if x != 0: self.pos_x += x if y != 0: self.pos_y += y def move(self, direction): if(direction == "left"): self.pos_x -= self._speed if(direction == "right"): self.pos_x += self._speed def update_interface(self): self.healthbar.update(self._health) self.healthbar.render(self.screen) def fire(self, screen): projectile_width = 6 projectile_height = 10 shot = Projectile(self.name, self.pos_x+(self.width/2)-(projectile_width/2), self.pos_y-projectile_height, projectile_width, projectile_height, screen, 8) #Maybe change this by another subroutine in Projectiles class def firecontrol(self, screen): if(len(Projectile.shots) > 0): for objects in Projectile.shots: objects:dict for key, object in objects.items(): object:Projectile if(key == "Player"or key == "Player2"): object.animate("UP") #print("Playerschuss!") if(key == "Enemy"): #print(object.pos_x, " ", object.pos_y) pass def get_health(self): return self._health class Player2(Player): def __init__(self, name, screen, pos_x, pos_y, width, height, image=None) -> None: super().__init__(name, screen, pos_x, pos_y, width, height, image) self.healthbar = interface.Healthbar(screen, "Player1", screen.get_size()[0]-320, screen.get_size()[1]-80, 300, 10, self.get_health()) def handle_input(self, event:pygame.event.EventType): if(event.type == pygame.KEYDOWN and event.key == pygame.K_a): self.keymap["left"] = True elif(event.type == pygame.KEYUP and event.key == pygame.K_a): self.keymap["left"] = False if(event.type == pygame.KEYDOWN and event.key == pygame.K_d): self.keymap["right"] = True elif(event.type == pygame.KEYUP and event.key == pygame.K_d): self.keymap["right"] = False if(event.type == pygame.KEYDOWN and event.key == pygame.K_t): #Fiiirrreee in the hole #print("Feuer!") self.fire(self.screen) def firecontrol(self, screen): if(len(Projectile.shots) > 0): for objects in Projectile.shots: objects:dict for key, object in objects.items(): object:Projectile if(key == "Enemy"): object.animate("DOWN") class Enemy(GameObject): movementqueue = list() def __init__(self, name, pos_x, pos_y, width, height, screen, image=None) -> None: super().__init__(name, pos_x, pos_y, width, height, image) self.screen = screen self.movespeed = 10 self._target_x = 0 self._target_y = 0 self.weapon:Weapons = None def fire(self, screen): self.weapon.fire() def firecontrol(self, screen): if(len(Projectile.shots) > 0): for objects in Projectile.shots: objects:dict for key, object in objects.items(): object:Projectile if(key == "Enemy"): object.animate("DOWN") def move(self, x=0, y=0): if(x != 0): self.pos_x += x self.weapon.pos_x = self.pos_x+(self.width/2) if(y != 0): self.pos_y += y def give_weapon(self, weapon): self.weapon = weapon def get_weapon(self): return self.weapon def movementqueue_run(self): pass class Projectile(GameObject): shots = list() _id_count = 0 def __init__(self, name, pos_x, pos_y, width, height, screen, speed:int=None, image=None) -> None: super().__init__(name, pos_x, pos_y, width, height, image) self.screen:pygame.Surface = screen self._id_count += 1 if speed is None: self.speed = 10 else: self.speed = speed self.shot = {name:self} #self.shot = {"id":self._id_count, name:self} self.shots.append(self.shot) def animate(self, direction): self.rect = pygame.draw.rect(self.screen, (190,4,21), (self.pos_x, self.pos_y, self.width, self.height)) if(direction == "UP"): self.pos_y -= self.speed if(direction == "DOWN"): self.pos_y += self.speed if(self.pos_y >= self.screen.get_size()[1]): pass class Weapons(GameObject): def __init__(self, name, pos_x, pos_y, width, height, damage, firerate, duration, screen, image=None) -> None: super().__init__(name, pos_x, pos_y, width, height, image) #self.type = type self.damage = damage self.firerate = firerate self.duration = duration self.sprite = "" self.mountingpos = list() self.soundfile = "" def fire(self): print(F"Feuere: {self.name}") class Item(GameObject): def __init__(self, name, pos_x, pos_y, width, height, image=None) -> None: super().__init__(name, pos_x, pos_y, width, height, image) self.speed = 2 def move(self, x:int, y:int): self.pos_x += x self.pos_y += y pass class item_extra_life(Item): def __init__(self, name, pos_x, pos_y, width, height, image=None) -> None: super().__init__(name, pos_x, pos_y, width, height, image) self.speed = 10 class barricade1(GameObject): def __init__(self, name, pos_x, pos_y, width, height, image=None) -> None: super().__init__(name, pos_x, pos_y, width, height, image)