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("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", MAINSCREEN, MAINSCREEN_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) 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", MAINSCREEN, MAINSCREEN_SIZE, init_pos_x=rand.randint(0, MAINSCREEN_SIZE[0]-40), init_pos_y=rand.randint(0, MAINSCREEN_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()) MAINSCREEN.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() pygame.display.flip() clock.tick(60) pygame.quit()