253 lines
8.6 KiB
Python
253 lines
8.6 KiB
Python
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) |