import pygame import pygame_menu import random as rand 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() __last_pos_x = int() __last_pos_y = int() __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.__inital_pos_x = posx_init self.__initial_pos_y = posx_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): # Update this --redraw each 10 pixels or self_size 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), rand.randint(1,MAINSCREEN_SIZE[0]), rand.randint(1,MAINSCREEN_SIZE[1]), rand.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(10) #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.hide() 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()