Files
test/test.py
Christian 89c5dcc6d1 Added requirements.txt
Fixed projectilespawn from enemys
2024-08-26 22:03:26 +02:00

244 lines
8.5 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")
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]