diff --git a/data/models/fruit_1_1_scaled.svg b/data/models/fruit_1_1_scaled.svg
index 4a48ec5..bd5b1b3 100644
--- a/data/models/fruit_1_1_scaled.svg
+++ b/data/models/fruit_1_1_scaled.svg
@@ -10,6 +10,9 @@
xml:space="preserve"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
sodipodi:docname="fruit_1_1_scaled.svg"
+ inkscape:export-filename="fruit_1_1_scaled_2_orange.png"
+ inkscape:export-xdpi="6.0476189"
+ inkscape:export-ydpi="6.0476189"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
@@ -63,25 +66,25 @@
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
+
+
diff --git a/modules/GameObject.py b/modules/GameObject.py
index 314c834..c0a7337 100644
--- a/modules/GameObject.py
+++ b/modules/GameObject.py
@@ -1,6 +1,7 @@
import pygame
import random as rand
+
class GameObject():
"""TODO Install a body array with positions of mainbody and adders"""
@@ -175,6 +176,7 @@ class Player(GameObject_new):
self.__snake_body = [[100,100+size], [100,100+size*2], [100,100+size*3], [100,size*5]]
super().__init__(name, surface, surface_size, init_pos_x, init_pos_y, visibility)
self.__snake = {"head":"data/models/snake_head_1.png", "body":"data/models/snake_body_1.png", "tail":""}
+ self._startmoving = False
__movedirection = {"up":False, "down":False, "left":False, "right":False}
@@ -253,6 +255,8 @@ class Player(GameObject_new):
image = pygame.image.load(self.__snake["body"])
image = pygame.transform.scale(image, (30,40))
image = pygame.transform.rotate(image, 270)
+
+
surface.blit(image, (0,5))
self._surface.blit(surface, (pos[0], pos[1]))
#print((pos[0], pos[1]))
diff --git a/modules/Game_new.py b/modules/Game_new.py
new file mode 100644
index 0000000..0c2a1fc
--- /dev/null
+++ b/modules/Game_new.py
@@ -0,0 +1,30 @@
+#Behandelt später die Hauptschleife und Klassenobjekte
+class Game():
+ def __init__(self) -> None:
+ self.__state = {
+ "started":False,
+ "playermove":False,
+ "win":False,
+ "lose":False,
+ "paused":False,
+ "menu":False
+ }
+
+ def get_state(self, state):
+ return self.__state[state]
+
+ def change_state(self, state):
+ """Toggles the selected game state"""
+ if(not self.__state[state]):
+ self.__state[state] = True
+ else:
+ self.__state[state] = False
+
+ def scoreboard(self):
+ pass
+
+ def spawn_fruit(self):
+ pass
+
+ def spawn_player(self):
+ pass
diff --git a/modules/User.py b/modules/User.py
index 0d20d5e..c929de7 100644
--- a/modules/User.py
+++ b/modules/User.py
@@ -139,6 +139,7 @@ class User:
return self.__all_listed_users
def checkuserdb(self):
+ """Checks for existing user, else return false"""
cursor = self.__sqlhandle.cursor()
rows=cursor.execute("SELECT * FROM user")
rows_count =len(list(rows))
diff --git a/pygame-test.py b/pygame-test.py
index 37a8258..a2d031c 100644
--- a/pygame-test.py
+++ b/pygame-test.py
@@ -1,8 +1,8 @@
import pygame
import pygame_menu
import random as rand
-from copy import deepcopy
import modules.User as User
+import modules.Game_new as Game
from modules.GameObject import *
pygame.init()
@@ -12,47 +12,36 @@ MAINSCREEN = pygame.display.set_mode(MAINSCREEN_SIZE)
PLAYGROUND = pygame.Surface((1024,728))
pygame.display.set_caption("Snake_v1")
+
+WEISS = (255,255,255)
+SCHWARZ = (0,0,0)
+GRUEN = (0,255,0)
+ROT = (255,0,0)
+
+### FONTS ###
+
+fonts = {
+ "font1" : pygame.font.SysFont("times new roman", 18),
+ "font2" : pygame.font.SysFont("times new roman", 26),
+ "font3" : pygame.font.SysFont("times new roman", 32),
+ "font4" : pygame.font.SysFont("times new roman", 48)
+}
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)
+### TEXTLABELS ###
+surface_text_noplayer = fonts["font2"].render("Es existiert noch kein Spieler", True, SCHWARZ)
+surface_text_inputplayername = fonts["font1"].render("Bitte gib einen Namen ein: ", True, SCHWARZ)
+
+
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):
@@ -65,18 +54,25 @@ def apply_name(input):
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
+
+surface_menu = pygame.Surface((400, 500))
+surface_menu.fill((244,244,244))
+surface_menu_rect = surface_menu.get_rect()
+
+def percent_from_screen(base:int, percent:int) -> int:
+
+ perc_hundred = base/100
+
+ return int(perc_hundred*percent)
+
+
+
+game = Game.Game()
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)
@@ -103,84 +99,94 @@ invert = False
counter = 0
-#TESTOBJECT = GameObject_new("Testobjekt", MAINSCREEN, MAINSCREEN_SIZE, 0, 0)
-#print(help(TESTOBJECT))
-#TESTOBJECT.printall_attributes()
-
-#Fenster-Hauptschleife+
+#Fenster-Hauptschleife
spawn_fruit = True
game_started = False
+text = ""
+
+game.change_state("menu")
while active == True:
- MAINSCREEN.fill((255,255,255))
+ MAINSCREEN.fill((55,148,38))
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
- if(player.get_playermovedirection()["down"] != True):
- player.change_direction("up")
- elif (event.key == pygame.K_DOWN):
- game_started = True
- if(player.get_playermovedirection()["up"] != True):
- player.change_direction("down")
- elif (event.key == pygame.K_RIGHT):
- game_started = True
- if(player.get_playermovedirection()["left"] != True):
- player.change_direction("right")
- elif (event.key == pygame.K_LEFT):
- game_started = True
- if(player.get_playermovedirection()["right"] != True):
- player.change_direction("left")
-
+ if(game.get_state("started")):
+ if (event.type == pygame.KEYDOWN):
+ if (event.key == pygame.K_UP):
+ game_started = True
+ if(player.get_playermovedirection()["down"] != True):
+ player.change_direction("up")
+ elif (event.key == pygame.K_DOWN):
+ game_started = True
+ if(player.get_playermovedirection()["up"] != True):
+ player.change_direction("down")
+ elif (event.key == pygame.K_RIGHT):
+ game_started = True
+ if(player.get_playermovedirection()["left"] != True):
+ player.change_direction("right")
+ elif (event.key == pygame.K_LEFT):
+ game_started = True
+ if(player.get_playermovedirection()["right"] != True):
+ player.change_direction("left")
+
+ if(game.get_state("menu")):
+ if(event.type == pygame.KEYDOWN):
+ print(event.unicode)
+ text += event.unicode
+
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))
+ text_test = my_font.render("Test", True, SCHWARZ, None)
- 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, sprite=fruits[rand.randint(0, len(fruits)-1)])
- spawn_fruit = False
+ text_out = my_font.render(text, True, SCHWARZ, None)
- if(fruit):
- fruit.draw()
+
+
+ pygame.draw.line(MAINSCREEN, SCHWARZ, (0,38), (MAINSCREEN_SIZE[0], 38), 2)
+
+ PLAYGROUND.fill((244,244,244))
+ PLAYGROUND.blit(text_out, (MAINSCREEN_SIZE[0]/2, MAINSCREEN_SIZE[1]/2))
+ #pygame.draw.rect(surface_menu, (0,0,0), (0,0,400,500), 1, 7)
+ #PLAYGROUND.blit(surface_menu, (20,20))
+
+ if(User.checkuserdb() == False):
+ PLAYGROUND.blit(surface_text_noplayer, (MAINSCREEN_SIZE[0]/2 - surface_text_noplayer.get_width()/2, 10))
+ PLAYGROUND.blit(surface_text_inputplayername, (MAINSCREEN_SIZE[0]/2 - surface_text_inputplayername.get_width()/2, 40))
- player.draw()
- if(game_started == True and player.collide_self() == False):
- player.move(40)
+ if(game.get_state("started")):
+ 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, sprite=fruits[rand.randint(0, len(fruits)-1)])
+ spawn_fruit = False
- 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(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()
-
+ 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
MAINSCREEN.blit(PLAYGROUND, (0,40))
pygame.display.flip()