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") enemy1 = Utils.load_image("sprites/enemy_1.png") spaceship = Utils.load_image("sprites/spaceship_1_transp.png", (255,0,255)) 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) players = [ GameObject.Player("Player", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-175, 60, 60, spaceship), GameObject.Player2("Player2", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-175, 60, 60, spaceship) ] player1 = GameObject.Player("Player", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-175, 60, 60, spaceship) player2 = GameObject.Player2("Player2", screen,(screen.get_size()[0]/2)-17, screen.get_size()[1]-175, 60, 60, spaceship) game.loadlevels() spawned_enemys = list() i = 0 startpos_x = 50 startpos_y = 30 for enemys in range(80): tmp_weapon = weapons.Laserblaster("Laserblaster", startpos_x, startpos_y+60, 5, 10, 30, 1, 0, screen, testimage) tmp = GameObject.Enemy(F"Enemy-{i}", startpos_x,startpos_y,60,60, screen, enemy1) 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 += (tmp.width+15) i += 1 startpos_x = 500 startpos_y = 500 tmp_weapon = weapons.Laserblaster("Laserblaster", startpos_x, startpos_y+60, 5, 10, 30, 1, 0, screen, testimage) e1 = GameObject.Enemy(F"Enemy-{i}", startpos_x,startpos_y,60,60, screen, enemy1) e1.give_weapon(tmp_weapon) 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)) for player in players: player:GameObject.Player player.handle_input(event) for player in players: player:GameObject.Player if(player.keymap["left"] == True and player.pos_x > 0): player.move("left") #print("links") if(player.keymap["right"] == True and player.pos_x <= (screen.get_size()[0]-player.width)): player.move("right") player.update_interface() player.render(screen) game.run(screen) player1.firecontrol(screen) player2.firecontrol(screen) for key, obj in enumerate(GameObject.GameObject.objects): print(key, obj) #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(projectile.rect, enemy.rect)): #Check if only a playerhit despawn enemys if(projectile.name == "Player" or projectile.name == "Player2"): if len(players) == 2: players[0].points += 10 players[1].points += 10 else: players[0].points += 10 index = spawned_enemys.index(enemy) del spawned_enemys[index] index = GameObject.Projectile.shots.index(projectiles) del GameObject.Projectile.shots[index] index = GameObject.GameObject.objects.index(projectile) #Report playerkills by player if(projectile.name == "Player"): players[0].kills += 1 if(projectile.name == "Player2"): players[1].kills += 1 #TODO Buggy pygame colliderect is true until projectile passed the hole playrect # Life decrease only once! for player in players: player:GameObject.Player if(pygame.Rect.colliderect(projectile.rect, player.rect)): #print("Game-Over") player.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() rand = random.randint(0, 100) for enemy in spawned_enemys: enemy:GameObject.Enemy if rand == 20 and (enemy.pos_x != 0 or enemy.pos_x >= (screen.get_size()[0]+enemy.width)): enemy.move(5) #enemy.movementqueue.append(5) if rand == 50 and (enemy.pos_x != 0 or enemy.pos_x >= (screen.get_size()[0]+enemy.width)): enemy.move(-5) #enemy.movementqueue.append(-5) rand1 = random.randint(0, 1000) if rand1 == 50: enemy.fire(screen) enemy.render(screen) enemy.firecontrol(screen) 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)) clock.tick(60) pygame.display.flip() #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]