Edited player class
Added lifes for players Edited life decrease for player after it gets hit
This commit is contained in:
@@ -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
86
test.py
@@ -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!!!!")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user