Files
python-tests/pygame-test.py

179 lines
5.6 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)
PLAYGROUND = pygame.Surface((1024,728))
pygame.display.set_caption("Snake_v1")
my_font = pygame.font.SysFont('times new roman', 26)
my_font2 = pygame.font.SysFont('times new roman', 32)
my_font3 = pygame.font.SysFont('times new roman', 46)
WEISS = ( 255, 255, 255)
SCHWARZ = (0,0,0)
GRUEN = (0, 255, 0)
ROT = (255,0,0)
active = True
clock = pygame.time.Clock()
#TODO: Make Grid for running Rect
"""TODO: Add new controlstructure for User-class on first login
Actually buggy if player logsin the first time, because there is no playerselected before there was an insterquery!!!
Make a live scoreboard
"""
#Behandelt später die Hauptschleife und Klassenobjekte
class Game():
__state = {"win":False, "lose":False, "paused":False}
def __init__(self) -> None:
pass
def scoreboard(self):
pass
def spawn_fruit(self):
pass
def spawn_player(self):
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
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)
player = Player("Player", PLAYGROUND, PLAYGROUND.get_size(), 100, 100, size=40)
def spawn_entities(x:int, list_of_objects:list):
count = 0
for y in range(x):
rect_size = 80
Entity = Block("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
background = pygame.surface.Surface((640,480))
x = 3600
invert = False
counter = 0
#TESTOBJECT = GameObject_new("Testobjekt", MAINSCREEN, MAINSCREEN_SIZE, 0, 0)
#print(help(TESTOBJECT))
#TESTOBJECT.printall_attributes()
#Fenster-Hauptschleife+
spawn_fruit = True
game_started = False
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):
game_started = True
player.change_direction("up")
elif (event.key == pygame.K_DOWN):
game_started = True
player.change_direction("down")
elif (event.key == pygame.K_RIGHT):
game_started = True
player.change_direction("right")
elif (event.key == pygame.K_LEFT):
game_started = True
player.change_direction("left")
text_surface_score = my_font.render('Score: '+str(player.get_player_score()), True, (0, 0, 0))
text_surface_player = my_font.render("Player: " + User.getusername(), True, SCHWARZ, None)
PLAYGROUND.fill((255,255,255))
MAINSCREEN.blit(text_surface_score, (MAINSCREEN_SIZE[0]/2-text_surface_score.get_size()[0]/2,0)) #Paints the Scoreboard in Top/Center
MAINSCREEN.blit(text_surface_player, (10, 0))
if(spawn_fruit == True):
fruit = Fruit("Fruit", PLAYGROUND, PLAYGROUND.get_size(), init_pos_x=rand.randint(0, PLAYGROUND.get_size()[0]-40), init_pos_y=rand.randint(0, PLAYGROUND.get_size()[1]-40), color=ROT, rect_size=40, score_points=10)
spawn_fruit = False
if(fruit):
fruit.draw()
player.draw()
if(game_started == True and player.collide_self() == False):
player.move(40)
if(player.collide_self()):
game_started == False
gameovertext = my_font2.render("Game Over!", True, SCHWARZ)
if(player.get_player_score() > User.gethighscore()):
User.update_user_highscore(player.get_player_score())
PLAYGROUND.blit(gameovertext, (MAINSCREEN_SIZE[0]/2-gameovertext.get_size()[0]/2, MAINSCREEN_SIZE[1]/2-gameovertext.get_size()[1]/2))
if(player.collide_fruit(fruit.get_rect()) == True and fruit):
player.add_body()
player.inc_score(fruit.get_score_points())
del fruit
spawn_fruit=True
#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)
#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()
MAINSCREEN.blit(PLAYGROUND, (0,40))
pygame.display.flip()
clock.tick(60)
pygame.quit()