244 lines
8.8 KiB
Python
244 lines
8.8 KiB
Python
import pygame
|
|
import game
|
|
import logger
|
|
import weapons
|
|
import interface
|
|
import GameObject
|
|
import Utils
|
|
import time
|
|
import random
|
|
import subprocess
|
|
|
|
|
|
pygame.init()
|
|
pygame.display.set_caption("TESTFENSTER")
|
|
pygame.mouse.set_visible(True)
|
|
|
|
RENDERING_SIZE = (1280,720)
|
|
WINDOWED_DEF_SIZE = (1280,720)
|
|
#pygame.key.set_repeat(1, 30)
|
|
window = pygame.display.set_mode((RENDERING_SIZE))
|
|
screen = pygame.Surface(RENDERING_SIZE)
|
|
|
|
log = logger.log("log.txt")
|
|
|
|
clock = pygame.time.Clock()
|
|
|
|
WEISS = (255,255,255)
|
|
SCHWARZ = (0,0,0)
|
|
GRUEN = (0,255,0)
|
|
ROT = (255,0,0)
|
|
|
|
log.writeln("Loading game...")
|
|
log.writeln("Loading images...")
|
|
|
|
|
|
image_enemy = Utils.load_image("Rastergrafik.png")
|
|
testimage = Utils.load_image("Rastergrafik.png")
|
|
|
|
log.writeln("Setup fonts...")
|
|
font1 = pygame.font.Font("/usr/share/fonts/TTF/Inconsolata-UltraExpandedExtraBold.ttf", 30)
|
|
font2 = pygame.font.Font("/usr/share/fonts/TTF/Inconsolata-UltraExpandedExtraBold.ttf", 12)
|
|
|
|
log.writeln("Get git revision hash...")
|
|
short_hash = subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD']).decode('ascii').strip()
|
|
hash_label = font2.render(F"git-hash: {short_hash}", 1, ROT)
|
|
log.writeln(F"Git-Hash: {short_hash}")
|
|
|
|
#testimage.set_colorkey((255,0,255), pygame.RLEACCELOK)
|
|
|
|
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)
|
|
|
|
healthbar1 = interface.Healthbar(screen, "Player1", 25, screen.get_size()[1]-80, 300, 10, player1.get_health())
|
|
|
|
game.loadlevels()
|
|
|
|
spawned_enemys = list()
|
|
|
|
i = 0
|
|
startpos_x = 50
|
|
startpos_y = 30
|
|
for enemys in range(10):
|
|
tmp_weapon = weapons.Laserblaster("Laserblaster", startpos_x, startpos_y, 5, 10, 30, 1, 0, screen, testimage)
|
|
tmp = GameObject.Enemy(F"Enemy-{i}", startpos_x,startpos_y,35,35, screen, testimage)
|
|
tmp.give_weapon(tmp_weapon)
|
|
if(startpos_x >= (screen.get_size()[0]-150)):
|
|
startpos_y += 50
|
|
startpos_x = 0
|
|
print(tmp.get_weapon())
|
|
spawned_enemys.append(tmp)
|
|
startpos_x += 50
|
|
|
|
i += 1
|
|
|
|
gamestate = True
|
|
|
|
milliseconds = pygame.time.get_ticks()
|
|
tmp_time = pygame.time.get_ticks()/1000
|
|
|
|
seconds = milliseconds/1000
|
|
|
|
tmp_seconds = 0
|
|
|
|
while(gamestate):
|
|
screen.fill((8,31,61))
|
|
|
|
for event in pygame.event.get():
|
|
if(event.type == pygame.QUIT):
|
|
del log
|
|
gamestate = False
|
|
if(event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
|
|
pygame.display.set_mode((RENDERING_SIZE))
|
|
gamestate = False
|
|
#Push F10 for fullscreen-mode
|
|
if(event.type == pygame.KEYDOWN and event.key == pygame.K_F10):
|
|
pygame.display.set_mode(RENDERING_SIZE, pygame.FULLSCREEN)
|
|
#Push F9 for window-mode
|
|
if(event.type == pygame.KEYDOWN and event.key == pygame.K_F9):
|
|
pygame.display.set_mode((RENDERING_SIZE))
|
|
player1.handle_input(event)
|
|
player2.handle_input(event)
|
|
|
|
if(player1.keymap["left"] == True and player1.pos_x > 0):
|
|
player1.move("left")
|
|
#print("links")
|
|
if(player1.keymap["right"] == True and player1.pos_x <= (screen.get_size()[0]-player1.width)):
|
|
player1.move("right")
|
|
#print("rechts")
|
|
if(player2.keymap["left"] == True and player2.pos_x > 0):
|
|
player2.move("left")
|
|
#print("links")
|
|
if(player2.keymap["right"] == True and player2.pos_x <= (screen.get_size()[0]-player2.width)):
|
|
player2.move("right")
|
|
#print("rechts")
|
|
|
|
#image = screen.blit(testimage, (pos_x, pos_y))
|
|
|
|
mouse_pos = pygame.mouse.get_pos()
|
|
#print(int(pygame.time.get_ticks()/1000))
|
|
|
|
#print(mouse_pos)
|
|
#print(image.topleft) #Gibt die Position einen Surfaces "obenlinks" aus
|
|
#print(image.size) #Gibt die Größe eines Surfaces aus
|
|
|
|
#max = tuple(map(lambda i, j : i+j, image.topleft, image.size))
|
|
#Wenn Mausposition X-Achse innerhalb Anfangsposition+Breite
|
|
#if(mouse_pos[0] <= max[0] and mouse_pos[0] >= image.topleft[0]):
|
|
#Wenn Mausposition Y-Achse innerhalb Anfangsposition+Höhe
|
|
#if(mouse_pos[1] <= max[1] and mouse_pos[1] >= image.topleft[1]):
|
|
#print("Treffer")
|
|
#pos_x = mouse_pos[0]
|
|
#pos_y = mouse_pos[1]
|
|
healthbar1.update(player1.get_health())
|
|
healthbar1.render(screen)
|
|
player1.firecontrol(screen)
|
|
player2.firecontrol(screen)
|
|
game.item_handler(screen)
|
|
|
|
#print("Spieler1 Lifes: ", player1.lifes)
|
|
#print("Spieler2 Lifes: ", player2.lifes)
|
|
|
|
#TODO If Playerposition are on the same x-axis then gamble hit by 50% chance
|
|
|
|
for projectiles in GameObject.Projectile.shots:
|
|
projectiles:dict
|
|
for key, projectile in projectiles.items():
|
|
projectile:GameObject.Projectile
|
|
#Check if player hits an enemy delete it
|
|
for enemy in spawned_enemys:
|
|
enemy:GameObject.Enemy
|
|
if(pygame.Rect.colliderect(player1.rect, player2.rect)):
|
|
#TODO: Laterrr!!
|
|
#print("Collision")
|
|
pass
|
|
if(pygame.Rect.colliderect(projectile.rect, enemy.rect)):
|
|
#print("HIT")
|
|
#Check if only a playerhit despawn enemys
|
|
if(projectile.name == "Player" or projectile.name == "Player2"):
|
|
player1.points += 10
|
|
player2.points += 10
|
|
index = spawned_enemys.index(enemy)
|
|
del spawned_enemys[index]
|
|
index = GameObject.Projectile.shots.index(projectiles)
|
|
del GameObject.Projectile.shots[index]
|
|
#print(F"Player-Points: {player1.points}")
|
|
#print(F"Player-Points: {player2.points}")
|
|
if(projectile.name == "Player"):
|
|
player1.kills += 1
|
|
|
|
if(projectile.name == "Player2"):
|
|
player2.kills += 1
|
|
|
|
#TODO Buggy pygame colliderect is true until projectile passed the hole playrect
|
|
# Life decrease only once!
|
|
if(pygame.Rect.colliderect(projectile.rect, player1.rect)):
|
|
#print("Game-Over")
|
|
player1.get_damage(enemy.get_weapon().damage)
|
|
try:
|
|
index = GameObject.Projectile.shots.index(projectiles)
|
|
del GameObject.Projectile.shots[index]
|
|
except:
|
|
print("Error on indexing projectile")
|
|
#TODO Add Gameover event
|
|
if(pygame.Rect.colliderect(projectile.rect, player2.rect)):
|
|
#print("Game-Over")
|
|
player1.get_damage(enemy.get_weapon().damage)
|
|
try:
|
|
index = GameObject.Projectile.shots.index(projectiles)
|
|
del GameObject.Projectile.shots[index]
|
|
except:
|
|
print("Error on indexing projectile")
|
|
#TODO Add Gameover event
|
|
|
|
#Check for bullets out of playground and delete it
|
|
if((projectile.pos_y > screen.get_size()[1]) or (projectile.pos_y < 0)):
|
|
#print(F"Lösche: {projectile}")
|
|
index = GameObject.Projectile.shots.index(projectiles)
|
|
del GameObject.Projectile.shots[index]
|
|
|
|
milliseconds = pygame.time.get_ticks()
|
|
seconds = milliseconds / 1000
|
|
now = time.time_ns()
|
|
|
|
#print("Playerkills 1:", player1.kills)
|
|
#print("Playerkills 2:", player2.kills)
|
|
|
|
#print(F"Player 1 Health: {player1.get_health()}")
|
|
#print(F"Player 2 Health: {player2.get_health()}")
|
|
player1.render(screen)
|
|
player2.render(screen)
|
|
#print(int(seconds), "\r")
|
|
|
|
rand = random.randint(0, 100)
|
|
for enemy in spawned_enemys:
|
|
enemy:GameObject.Enemy
|
|
if rand == 20:
|
|
enemy.move(5)
|
|
#enemy.movementqueue.append(5)
|
|
if rand == 50:
|
|
enemy.move(-5)
|
|
#enemy.movementqueue.append(-5)
|
|
rand1 = random.randint(0, 1000)
|
|
if rand1 == 50:
|
|
enemy.fire(screen)
|
|
|
|
enemy.render(screen)
|
|
|
|
enemy.firecontrol(screen)
|
|
|
|
label1 = font1.render(F"Score: {player1.points}", True, (255,0,0))
|
|
fps_label = font2.render(F"FPS: {int(clock.get_fps())}", True, (255,0,0))
|
|
screen.blit(label1, ((screen.get_size()[0]/2)-(label1.get_size()[0]/2), screen.get_size()[1]-50))
|
|
screen.blit(fps_label, (screen.get_size()[0]-fps_label.get_size()[0]-10, screen.get_size()[1]-25))
|
|
screen.blit(hash_label, (25, screen.get_size()[1] -25))
|
|
|
|
#Scales the mainsurface
|
|
scaled_win = pygame.transform.scale(screen, window.get_size())
|
|
#Blits the mainsurface to the mainwindow
|
|
window.blit(scaled_win, (0, 0))
|
|
|
|
#if(mouse_pos <= (image.topleft+image.size) and mouse_pos >= image.topleft):
|
|
# print("HIIIIITTT!!!!")
|
|
clock.tick(60)
|
|
pygame.display.flip() |