From 2286458632d4b9231e4943d290326f6779acdf67 Mon Sep 17 00:00:00 2001 From: administrator Date: Mon, 25 Dec 2023 20:52:59 +0100 Subject: [PATCH] Objectsclass with movement implemented TODO: Check for bordercollision and change of direction --- pygame-test.py | 125 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 96 insertions(+), 29 deletions(-) diff --git a/pygame-test.py b/pygame-test.py index ee73ea5..83fa4bb 100644 --- a/pygame-test.py +++ b/pygame-test.py @@ -1,7 +1,7 @@ import pygame pygame.init() -screen = pygame.display.set_mode((640,480)) +MAINSCREEN = pygame.display.set_mode((640,480)) pygame.display.set_caption("Testgame") WEISS = ( 255, 255, 255) @@ -9,12 +9,6 @@ active = True clock = pygame.time.Clock() - -Testobjekt = {"name":"testobjekt", - "posx":0, - "posy":0 - } - # Definieren der Variablen ballpos_x = 10 ballpos_y = 10 @@ -23,30 +17,77 @@ class GameObjekt(): __name = str() __pos_x = int() __pos_y = int() + __color = (0,0,0) __rectobjekt = pygame.Rect + __surface = MAINSCREEN + + __movedirection = {"up":False, "down":False, "left":False, "right":False} - def __init__(self, name:str, posx:int, posy:int, *rect:pygame.Rect) -> None: + def __init__(self, name:str, posx_init:int=0, posy_init:int=0) -> None: self.__name = name - self.__pos_x = posx - self.__pos_y = posy - self.__rectobjekt = rect + self.__pos_x = posx_init + self.__pos_y = posy_init + #self.__rectobjekt = rect + + def change_direction(self, direction:dict): + if(direction): + self.__movedirection[direction] = True + print(self.__movedirection[direction]) pass - def move(self, x): - MOVE_SPEED = 5 + def move(self, *speed:int): + MOVE_SPEED = 1 #self.__rectobjekt.x += MOVE_SPEED - print(self.__rectobjekt) + + if(self.__movedirection['up']): + self.__movedirection['down'] = False + if(not speed): self.__pos_y -= MOVE_SPEED + else: self.__pos_y -= speed[0] + if(self.__pos_y <= -100): + self.__pos_y += 580 + + if(self.__movedirection['down']): + self.__movedirection['up'] = False + if(not speed): self.__pos_y += MOVE_SPEED + else: self.__pos_y += speed[0] + if(self.__pos_y >= (self.__surface.get_size()[1])+100): self.__pos_y = -100 + + if(self.__movedirection['left']): + self.__movedirection['right'] = False + if(not speed): self.__pos_x += MOVE_SPEED + else: self.__pos_x += speed[0] + + if(self.__movedirection['right']): + self.__movedirection['left'] = False + if(not speed): self.__pos_x += MOVE_SPEED + else: self.__pos_x -= speed[0] + + for key, value in self.__movedirection.items(): + value = False + + print("Objekt-Koordinaten= X: "+str(self.__rectobjekt.x)+" Y: "+str(self.__rectobjekt.y)+"", end="\r") + self.__movedirection['up'] = False + self.__movedirection['down'] = False + self.__movedirection['left'] = False + self.__movedirection['right'] = False + + def draw(self): + #font = pygame.font.SysFont(None, 70) + #text = font.render("TEST", True, (0,0,0) ) + self.__rectobjekt = pygame.draw.rect(self.__surface, self.__color, [self.__pos_x, self.__pos_y,100,100]) + + def get_rect(self): + return self.__rectobjekt -background = pygame.Surface((640,480)) #Erstellt eine Obfläche mit der Größe des Fensters -rect2 = pygame.draw.rect(background,(0,255,255),(20,20,40,40)) +object1 = GameObjekt("Testobject") -rect1 = pygame.draw.ellipse(screen, (0,0,0), [ballpos_x, ballpos_y, 20, 20]) -Player = GameObjekt("Test", 0,0,rect1) +background = pygame.surface.Surface((640,480)) - +invert = False #Fenster-Hauptschleife -while active == True: +while active == True: + MAINSCREEN.fill((255,255,255)) for event in pygame.event.get(): if (event.type == pygame.QUIT): print("Programm wird geschlossen!") @@ -54,31 +95,57 @@ while active == True: elif (event.type == pygame.KEYDOWN): if (event.key == pygame.K_UP): print("Keydown") - print(rect2.x) - background.get_rect() - #rect1.move(ballpos_x, ballpos_y) - Player.move(5) - ballpos_y -= 10 + object1.change_direction("up") + elif (event.key == pygame.K_DOWN): print("Keydown") + object1.change_direction("down") #rect1.move(ballpos_x, ballpos_y) - ballpos_y += 10 + elif (event.key == pygame.K_RIGHT): print("Keydown") + object1.change_direction("right") #rect1.move(ballpos_x, ballpos_y) ballpos_x += 10 elif (event.key == pygame.K_LEFT): print("Keydown") + object1.change_direction("left") #rect1.move(ballpos_x, ballpos_y) ballpos_x -= 10 - + object1.draw() + object1.move(10) + + """ + 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() - rect2.move(100, 10) - screen.blit(background,(0,0)) pygame.display.flip() clock.tick(60)