Edited player class

Added lifes for players
Edited life decrease for player after it gets hit
This commit is contained in:
Christian
2024-08-12 11:27:10 +02:00
parent 2a0c495e22
commit 04639f6778
2 changed files with 79 additions and 54 deletions

View File

@@ -11,7 +11,6 @@ class GameObject(object):
self.image = image self.image = image
self.rect:pygame.Rect self.rect:pygame.Rect
self.objects.append(self) self.objects.append(self)
self.keymap = {"up":False, "down":False, "left":False, "right":False} self.keymap = {"up":False, "down":False, "left":False, "right":False}
def get_objectinfo(self): def get_objectinfo(self):
@@ -23,7 +22,7 @@ class GameObject(object):
def render(self, screen:pygame.Surface): def render(self, screen:pygame.Surface):
if(self.image is not None): if(self.image is not None):
self.rect = screen.blit(self.image, (self.pos_x, self.pos_y, )) self.rect = screen.blit(self.image, (self.pos_x, self.pos_y))
else: else:
print("Kein Image hinterlegt!") print("Kein Image hinterlegt!")
return return
@@ -42,6 +41,7 @@ class Player(GameObject):
self._speed = 10 self._speed = 10
self.screen = screen self.screen = screen
self.points = 0 self.points = 0
self.lifes = 2
def handle_input(self, event:pygame.event.EventType): def handle_input(self, event:pygame.event.EventType):
if(event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT): if(event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT):
@@ -113,24 +113,32 @@ class Player2(Player):
print("Feuer!") print("Feuer!")
self.fire(self.screen) 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): class Enemy(GameObject):
shots_fired = list()
def __init__(self, name, pos_x, pos_y, width, height, screen, image=None) -> None: def __init__(self, name, pos_x, pos_y, width, height, screen, image=None) -> None:
super().__init__(name, pos_x, pos_y, width, height, image) super().__init__(name, pos_x, pos_y, width, height, image)
self.screen = screen
def fire(self, screen): def fire(self, screen):
#print("Schieße!!!!") #print("Schieße!!!!")
shot = Projectile("Enemy", self.pos_x+(self.width/2),self.pos_y+self.height,5,10, screen) shot = Projectile("Enemy", self.pos_x+(self.width/2),self.pos_y+self.height,5,10, screen, 2)
self.shots_fired.append(shot)
def shoot(self): def firecontrol(self, screen):
if(len(self.shots_fired) > 0): if(len(Projectile.shots) > 0):
for shots in self.shots_fired: for objects in Projectile.shots:
shots:Projectile objects:dict
shots.animate("DOWN") for key, object in objects.items():
object:Projectile
if(key == "Enemy"):
object.animate("DOWN")
def move(self, x=0, y=0): def move(self, x=0, y=0):
if(x != 0): if(x != 0):
@@ -140,15 +148,19 @@ class Enemy(GameObject):
class Projectile(GameObject): class Projectile(GameObject):
shots = list() shots = list()
def __init__(self, name, pos_x, pos_y, width, height, screen, image=None) -> None: _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) super().__init__(name, pos_x, pos_y, width, height, image)
self.screen:pygame.Surface = screen self.screen:pygame.Surface = screen
self.speed = 10 self._id_count += 1
if speed is None:
self.speed = 10
else:
self.speed = speed
self.shot = {name:self} self.shot = {name:self}
#self.shot = {"id":self._id_count, name:self}
self.shots.append(self.shot) self.shots.append(self.shot)
def animate(self, direction): def animate(self, direction):
self.rect = pygame.draw.rect(self.screen, (190,4,21), (self.pos_x, self.pos_y, self.width, self.height)) self.rect = pygame.draw.rect(self.screen, (190,4,21), (self.pos_x, self.pos_y, self.width, self.height))
if(direction == "UP"): if(direction == "UP"):
@@ -157,7 +169,6 @@ class Projectile(GameObject):
self.pos_y += self.speed self.pos_y += self.speed
if(self.pos_y >= self.screen.get_size()[1]): if(self.pos_y >= self.screen.get_size()[1]):
pass pass
#print()
class Item(GameObject): class Item(GameObject):
def __init__(self, name, pos_x, pos_y, width, height, image=None) -> None: def __init__(self, name, pos_x, pos_y, width, height, image=None) -> None:

86
test.py
View File

@@ -9,35 +9,36 @@ pygame.init()
pygame.display.set_caption("TESTFENSTER") pygame.display.set_caption("TESTFENSTER")
pygame.mouse.set_visible(True) pygame.mouse.set_visible(True)
#pygame.key.set_repeat(1, 30) #pygame.key.set_repeat(1, 30)
screen = pygame.display.set_mode((1024,768)) screen = pygame.display.set_mode((1024,768)) #TODO Add fullscreen mode
clock = pygame.time.Clock() clock = pygame.time.Clock()
image_enemy = Utils.load_image("Rastergrafik.png") image_enemy = Utils.load_image("Rastergrafik.png")
testimage = Utils.load_image("Rastergrafik.png") testimage = Utils.load_image("Rastergrafik.png")
font1 = pygame.font.SysFont("Arial", 32) font1 = pygame.font.Font("/usr/share/fonts/TTF/Inconsolata-UltraExpandedExtraBold.ttf", 30)
#testimage.set_colorkey((255,0,255), pygame.RLEACCELOK) #testimage.set_colorkey((255,0,255), pygame.RLEACCELOK)
enemy = GameObject.Enemy("Enemy-1", (screen.get_size()[0]/2) -30,30,35,35, screen, testimage)
player1 = GameObject.Player("Player", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-100, 35, 35, testimage) player1 = GameObject.Player("Player", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-100, 35, 35, testimage)
player2 = GameObject.Player2("Player2", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-100, 35, 35, testimage) player2 = GameObject.Player2("Player2", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-100, 35, 35, testimage)
spawned_enemys = list() spawned_enemys = list()
i = 0 i = 0
startpos_x = 0 startpos_x = 50
for enemys in range(15): startpos_y = 30
spawned_enemys.append(GameObject.Enemy(F"Enemy-{i}", startpos_x,30,35,35, screen, testimage)) for enemys in range(80):
startpos_x += 50 tmp = GameObject.Enemy(F"Enemy-{i}", startpos_x,startpos_y,35,35, screen, testimage)
i += 1 if(startpos_x >= (screen.get_size()[0]-150)):
startpos_y += 50
startpos_x = 0
spawned_enemys.append(tmp)
startpos_x += 50
i += 1
gamestate = True gamestate = True
pos_x = 50
pos_y = 50
while(gamestate): while(gamestate):
@@ -82,30 +83,44 @@ while(gamestate):
player1.firecontrol(screen) player1.firecontrol(screen)
player2.firecontrol(screen) player2.firecontrol(screen)
print("Spieler1 Lifes: ", player1.lifes)
print("Spieler2 Lifes: ", player2.lifes)
for projectiles in GameObject.Projectile.shots: for projectiles in GameObject.Projectile.shots:
projectiles:dict projectiles:dict
for key, projectile in projectiles.items(): for key, projectile in projectiles.items():
projectile:GameObject.Projectile projectile:GameObject.Projectile
#Check if player hits an enemy delete it #Check if player hits an enemy delete it
print(projectile.rect)
for enemy in spawned_enemys: for enemy in spawned_enemys:
enemy:GameObject.Enemy enemy:GameObject.Enemy
if(pygame.Rect.colliderect(projectile.rect, enemy.rect)): if(pygame.Rect.colliderect(projectile.rect, enemy.rect)):
print("HIT") #print("HIT")
player1.points += 10 #Check if only a playerhit despawn enemys
player2.points += 10 if(projectile.name == "Player" or projectile.name == "Player2"):
index = spawned_enemys.index(enemy) player1.points += 10
del spawned_enemys[index] player2.points += 10
index = GameObject.Projectile.shots.index(projectiles) index = spawned_enemys.index(enemy)
del GameObject.Projectile.shots[index] del spawned_enemys[index]
print(F"Player-Points: {player1.points}") index = GameObject.Projectile.shots.index(projectiles)
print(F"Player-Points: {player2.points}") del GameObject.Projectile.shots[index]
print(F"Player-Points: {player1.points}")
print(F"Player-Points: {player2.points}")
#TODO Buggy pygame colliderect is true until projectile passed the hole playrect
# Life decrease only once!
if(pygame.Rect.colliderect(projectile.rect, player1.rect)): if(pygame.Rect.colliderect(projectile.rect, player1.rect)):
print("Game-Over") #print("Game-Over")
player1.lifes -= 1
index = GameObject.Projectile.shots.index(projectiles)
del GameObject.Projectile.shots[index]
#TODO Add Gameover event #TODO Add Gameover event
if(pygame.Rect.colliderect(projectile.rect, player2.rect)): if(pygame.Rect.colliderect(projectile.rect, player2.rect)):
print("Game-Over") #print("Game-Over")
player2.lifes -= 1
index = GameObject.Projectile.shots.index(projectiles)
del GameObject.Projectile.shots[index]
#TODO Add Gameover event #TODO Add Gameover event
#Check for bullets out of playground and delete it #Check for bullets out of playground and delete it
@@ -119,22 +134,21 @@ while(gamestate):
rand = random.randint(0, 100) rand = random.randint(0, 100)
for enemy in spawned_enemys: for enemy in spawned_enemys:
enemy:GameObject.Enemy enemy:GameObject.Enemy
if rand == 20:
if rand == 50:
enemy.fire(screen)
if rand == 20:
enemy.move(5) enemy.move(5)
if rand == 50: if rand == 50:
enemy.move(-5) enemy.move(-5)
enemy.shoot() rand1 = random.randint(0, 1000)
enemy.render(screen) if rand1 == 50:
enemy.fire(screen)
enemy.render(screen)
enemy.firecontrol(screen)
label1 = font1.render(F"Score: {player1.points}", True, (255,0,0)) label1 = font1.render(F"Score: {player1.points}", True, (255,0,0))
screen.blit(label1, ((screen.get_size()[0]/2)-(label1.get_size()[0]/2), screen.get_size()[1]-50)) screen.blit(label1, ((screen.get_size()[0]/2)-(label1.get_size()[0]/2), screen.get_size()[1]-50))
#if(mouse_pos <= (image.topleft+image.size) and mouse_pos >= image.topleft): #if(mouse_pos <= (image.topleft+image.size) and mouse_pos >= image.topleft):
# print("HIIIIITTT!!!!") # print("HIIIIITTT!!!!")