Files
python-tests/pygame-test.py
2023-12-27 19:36:55 +01:00

210 lines
6.3 KiB
Python

import pygame
import pygame_menu
import random as rnd
pygame.init()
MAINSCREEN = pygame.display.set_mode((640,480))
pygame.display.set_caption("Testgame")
WEISS = ( 255, 255, 255)
active = True
clock = pygame.time.Clock()
# Definieren der Variablen
ballpos_x = 10
ballpos_y = 10
#TODO: Make Grid for running Rect
class GameObject():
__name = str()
__pos_x = int()
__pos_y = int()
__color = (0,0,0)
__rect_size = []
__movespeed = int()
__rectobjekt = pygame.Rect
__surface = MAINSCREEN
__removed = False
__collided = False
__movedirection = {"up":False, "down":False, "left":False, "right":False}
def __init__(self, name:str, posx_init:int=0, posy_init:int=0, move_speed:int=0) -> None:
self.__name = name
self.__pos_x = posx_init
self.__pos_y = posy_init
self.__movespeed = move_speed
#self.__rectobjekt = rect
def __del__(self):
#print("\nKlasse gelöscht", end="\n")
pass
def change_direction(self, direction:dict):
if(direction):
for key in self.__movedirection.keys():
self.__movedirection[key] = False
self.__movedirection[direction] = True
print(direction)
pass
def move(self, *speed:int):
MOVE_SPEED = 1
#self.__rectobjekt.x += MOVE_SPEED
if(self.__movedirection['up']):
if(not speed): self.__pos_y -= MOVE_SPEED
else: self.__pos_y -= speed[0]
if(self.__pos_y <= -100):
self.__pos_y += 580
elif(self.__movedirection['down']):
if(not speed): self.__pos_y += MOVE_SPEED
else: self.__pos_y += speed[0]
if(self.__pos_y >= (self.__surface.get_size()[1])): self.__pos_y = -100
elif(self.__movedirection['left']):
if(not speed): self.__pos_x -= MOVE_SPEED
else: self.__pos_x -= speed[0]
if(self.__pos_x <= -100): self.__pos_x = 680
elif(self.__movedirection['right']):
if(not speed): self.__pos_x += MOVE_SPEED
else: self.__pos_x += speed[0]
if(self.__pos_x >= (self.__surface.get_size()[0])): self.__pos_x = -100
print("Objekt-Koordinaten "+self.__name+"= X: "+str(self.__rectobjekt.x)+" Y: "+str(self.__rectobjekt.y), end="\r")
def draw(self):
#font = pygame.font.SysFont(None, 70)
#text = font.render("TEST", True, (0,0,0) )
if(self.__removed == False):
self.__rectobjekt = pygame.draw.rect(self.__surface, self.__color, [self.__pos_x, self.__pos_y,20,20])
def get_rect(self):
return self.__rectobjekt
def get_movespeed(self):
return self.__movespeed
def is_collided(self):
return self.__collided
def set_collided(self):
self.__collided = True
def collide(self, GameObject):
#print(GameObject)
#print(GameObject.get_rect())
"""TODO: Hitbox with Objectsize"""
if(pygame.rect.Rect.colliderect(self.__rectobjekt, GameObject.get_rect())):
print("\nKollision") #Funktioniert für das erste!
self.set_collided()
self.remove() #Löscht das Objekt nach einem Zusammenstoß mit Playerobject
def draw_follower(self, *Entities:tuple):
"""Für alle Collidierten Gameobjects"""
for x in Entities:
y = GameObject(x)
if(y.is_collided() == True):
print("REST")
def remove(self):
print("Gameoject mit der ID " + self.__name + " gelöscht!")
self.__removed = True
"""TODO: Delete obeject function"""
def spawn_entities(x:int):
Objects = list()
for y in range(x):
Objects.append(GameObject("TEST", rnd.randint(1,640), rnd.randint(1,480), rnd.randint(1,10)))
for x in Objects:
print(x)
return tuple(Objects)
Player = GameObject("Testobject", 10, 10)
background = pygame.surface.Surface((640,480))
x = 3600
invert = False
spawned_entities = spawn_entities(50) #Spawnt eine definierte Anzahl an GameObjekten
#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!")
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.move(5)
for y in spawned_entities:
y.draw()
y.collide(Player)
y.remove
Player.draw_follower(spawned_entities)
if(x == 0):
for y in spawned_entities:
y.remove()
pass
x -= 1
"""
rect1 = pygame.draw.rect(MAINSCREEN, (0,0,0), [ballpos_x,ballpos_y,100,100])
if(not invert):
#if ballpos_x <= (MAINSCREEN.get_size()[0]): ballpos_x += 1
if ballpos_y <= (MAINSCREEN.get_size()[1]): ballpos_y += 1
#if(ballpos_x >= MAINSCREEN.get_size()[0]): ballpos_x = int(-100)
if(ballpos_y >= MAINSCREEN.get_size()[1]): ballpos_y = int(-100)
"""
"""
Lässt das Rechteck diagonal auf- und ablaufen
if(not invert):
if ballpos_x < (MAINSCREEN.get_size()[0]-100): ballpos_x += 1
if ballpos_y < (MAINSCREEN.get_size()[1]-100): ballpos_y += 1
else:
if ballpos_x != 0: ballpos_x -= 1
if ballpos_y != 0: ballpos_y -= 1
if(ballpos_x == (MAINSCREEN.get_size()[0]-100) and ballpos_y == (MAINSCREEN.get_size()[1]-100)):
invert = True
if(ballpos_x == 0 and ballpos_y == 0):
invert = False
"""
#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()