Files
python-tests/pygame-test.py

181 lines
5.7 KiB
Python

import pygame
import pygame_menu
import random as rand
from copy import deepcopy
import modules.User as User
from modules.GameObject import *
pygame.init()
MAINSCREEN_SIZE = (1024,768)
MAINSCREEN = pygame.display.set_mode(MAINSCREEN_SIZE)
pygame.display.set_caption("Testgame")
WEISS = ( 255, 255, 255)
SCHWARZ = (0,0,0)
active = True
clock = pygame.time.Clock()
#TODO: Make Grid for running Rect
#Behandelt später die Hauptschleife und Klassenobjekte
class Game():
__state = {"win":False, "lose":False, "paused":False}
def __init__(self) -> None:
pass
#Handles all collided objects an adds it as Playerfollower
def start_game():
menu.disable()
return 0
def apply_name(input):
print(input)
if(len(input) <= 0):
print("Kein Name eingegeben!")
else:
if(User.select(input) == False):
User.createuser(input)
elif(User.select(input) == True):
print("Es existiert bereits ein Spieler mit diesem Namen!")
print(F"Hallo {User.getusername()}, dein letztes Spiel war am: {User.getlastlogin()} mit einem Highscore von: {User.gethighscore()}")
menu.disable()
#TODO: Add function for save name
pass
count_follower = 0
def append_follwer(x,y):
print("x: "+str(x), "y: "+str(y))
newfollower = Follower("Follower "+str(count_follower), MAINSCREEN, MAINSCREEN_SIZE, is_rect=True, rect_size=(x,y))
colided_objects.append(newfollower)
User = User.User()
menu = pygame_menu.Menu("Snake v1.0", 400, 300,)
menu.add.text_input("Name: ", onreturn=(apply_name))
menu.add.button('Play', start_game)
menu.add.button('Quit', pygame_menu.events.EXIT)
menu.mainloop(MAINSCREEN)
def spawn_entities(x:int, list_of_objects:list):
count = 0
for y in range(x):
rect_size = 60
Entity = GameObject("Entitiy-"+str(count), MAINSCREEN, MAINSCREEN_SIZE, rand.randint(1,MAINSCREEN_SIZE[0]), rand.randint(1,MAINSCREEN_SIZE[1]), rand.randint(1,15), is_rect=True, rect_size=(rect_size,rect_size))
Entity.get_name(True)
list_of_objects.append(Entity)
count += 1
Player = GameObject("Player", MAINSCREEN, MAINSCREEN_SIZE, 10, 10, 10, is_player=False, is_rect=True, rect_size=(50,50))
background = pygame.surface.Surface((640,480))
x = 3600
invert = False
colided_objects = list()
spawned_entities = list()
spawn_entities(30, spawned_entities)
count_hidden_entities = 0
count_spawend_enities = len(spawned_entities)
print("Es wurden " + str(count_spawend_enities)+ " Objekte gespawnt")
#Fenster-Hauptschleife
while active == True:
MAINSCREEN.fill((255,255,255))
for event in pygame.event.get():
if (event.type == pygame.QUIT):
print("Programm wird geschlossen!")
print(spawned_entities, end="\n")
active = False
elif (event.type == pygame.KEYDOWN):
if (event.key == pygame.K_UP):
print("Keydown")
Player.change_direction("up")
elif (event.key == pygame.K_DOWN):
print("Keydown")
Player.change_direction("down")
elif (event.key == pygame.K_RIGHT):
print("Keydown")
Player.change_direction("right")
elif (event.key == pygame.K_LEFT):
print("Keydown")
Player.change_direction("left")
Player.draw()
Player.update_pos_lastframe(Player.get_position()[0], Player.get_position()[1], True)
Player.move(5)
print("Aktuelle Position: " + str(Player.get_position()))
#print("Aktuell kollidierte Objekte: ", str(count_hidden_entities))
#Spawns the Entities
for y in spawned_entities:
y:GameObject
y.draw()
if(y.is_collided() == True):
#Der erste Follower folgt dem Spieler, alle übrigen folgen den vorherien Verfolgern
y.hide()
pass
if(y.is_collided() == False):
if(y.collide(Player)):
count_hidden_entities += 1
xy = y.get_rect_size()
append_follwer(xy[0], xy[1])
count_follower += 1
#Zeichnet alle Verfolgerobjekte, sofern sie vorliegend sind
#TODO: Follower sollen ab dem zweiten Objekt dem vorangegangenen Objekt folgen und nicht dem player
#if(colided_objects):
# colided_objects[0].set_position_player(Player.get_position(), Player.get_playermovedirection(), True)
i=0
if(colided_objects):
pass
#TODO:Berechne Position follower Objekte anhand Position aus letztem Frame
for follower in colided_objects:
follower:Follower
if(i >= 0):
colided_objects[0].set_position_player(Player.get_position(), Player.get_playermovedirection(), True)
pass
if(i > 0 and i <= len(colided_objects)):
#colided_objects[i].set_position_player(follower.set_position(colided_objects[i-1].get_position()), Player.get_playermovedirection(), True)
pass
follower.draw()
i += 1
if(count_hidden_entities == count_spawend_enities):
print("WIN!!!")
menu.enable()
menu.add.label("WIN", "win", 10)
menu.mainloop(MAINSCREEN)
break
if(x == 0):
for y in spawned_entities:
y.hide()
pass
x -= 1
"""Drawing Lines test
pos = 0
for x in range(20):
pos += 60
pygame.draw.line(MAINSCREEN, (0,0,0), (pos,0),(pos,MAINSCREEN_SIZE[1]))"""
#print("Objekt-Koordinaten= X: "+str(rect1.x)+" Y: "+str(rect1.y)+"", end="\r")
#Displayflip sorgt dafür, dass das Fenster entsprechend der Tickrate aktualisiert wird
#pygame.display.flip()
pygame.display.flip()
clock.tick(60)
pygame.quit()