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) #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()