214 lines
6.6 KiB
Python
214 lines
6.6 KiB
Python
import pygame
|
|
import pygame_menu
|
|
import random as rnd
|
|
|
|
pygame.init()
|
|
MAINSCREEN_SIZE = (1024,768)
|
|
MAINSCREEN = pygame.display.set_mode(MAINSCREEN_SIZE)
|
|
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)
|
|
__size_rect = {"x":50, "y":50}
|
|
__movespeed = int()
|
|
__rectobjekt = pygame.Rect
|
|
__surface = MAINSCREEN
|
|
__hide = 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 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 <= -self.__size_rect["y"]):
|
|
self.__pos_y = MAINSCREEN_SIZE[1]
|
|
|
|
elif(self.__movedirection['down']):
|
|
if(not speed): self.__pos_y += MOVE_SPEED
|
|
else: self.__pos_y += speed[0]
|
|
if(self.__pos_y >= MAINSCREEN_SIZE[1]):
|
|
self.__pos_y = -self.__size_rect["y"]
|
|
|
|
elif(self.__movedirection['left']):
|
|
if(not speed): self.__pos_x -= MOVE_SPEED
|
|
else: self.__pos_x -= speed[0]
|
|
if(self.__pos_x <= -self.__size_rect["x"]):
|
|
self.__pos_x = MAINSCREEN_SIZE[0]
|
|
|
|
elif(self.__movedirection['right']):
|
|
if(not speed): self.__pos_x += MOVE_SPEED
|
|
else: self.__pos_x += speed[0]
|
|
if(self.__pos_x >= MAINSCREEN_SIZE[0]):
|
|
self.__pos_x = -self.__size_rect["x"]
|
|
|
|
|
|
#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.__hide == False):
|
|
self.__rectobjekt = pygame.draw.rect(self.__surface, self.__color, [self.__pos_x, self.__pos_y,self.__size_rect["x"],self.__size_rect["y"]])
|
|
|
|
def get_rect(self):
|
|
return self.__rectobjekt
|
|
|
|
def get_movespeed(self):
|
|
return self.__movespeed
|
|
|
|
def is_collided(self) -> bool:
|
|
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()) and not self.is_collided()):
|
|
print("Kollision\n") #Funktioniert für das erste!
|
|
self.set_collided()
|
|
#self.hide() #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 hide(self):
|
|
if(self.__hide != True):
|
|
print("Gameoject mit der ID " + self.__name + " gelöscht!")
|
|
self.__hide = True
|
|
"""TODO: Delete obeject function"""
|
|
|
|
|
|
def spawn_entities(x:int):
|
|
Objects = list()
|
|
count = 0
|
|
for y in range(x):
|
|
Objects.append(GameObject("Entitiy-"+str(count), rnd.randint(1,MAINSCREEN_SIZE[0]), rnd.randint(1,MAINSCREEN_SIZE[1]), rnd.randint(1,15)))
|
|
count += 1
|
|
for x in Objects:
|
|
print(x)
|
|
return list(Objects)
|
|
|
|
|
|
Player = GameObject("Player", 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!")
|
|
print(spawned_entities)
|
|
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(2)
|
|
|
|
for y in spawned_entities:
|
|
y:GameObject
|
|
y.draw()
|
|
y.collide(Player)
|
|
if(y.is_collided() == True):
|
|
y.hide()
|
|
|
|
|
|
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() |