From 040a226c2eec5e5349a014f019dba17a3c3ead55 Mon Sep 17 00:00:00 2001 From: administrator Date: Mon, 1 Jan 2024 15:30:51 +0100 Subject: [PATCH] Debuged change of rectsize on collision with player rect --- pygame-test.py | 68 ++++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/pygame-test.py b/pygame-test.py index 73ce7f7..cbca767 100644 --- a/pygame-test.py +++ b/pygame-test.py @@ -26,9 +26,10 @@ class GameObject(): __pos_x = int() __pos_y = int() __color = (0,0,0) - __size_rect = {"x":0, "y":0} + __size_rect_x:int + __size_rect_y:int __movespeed = int() - __rectobjekt = pygame.Rect + __rectobjekt:pygame.Rect #Hier bitte ändern!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! __surface = MAINSCREEN __hide = False __collided = False @@ -47,8 +48,8 @@ class GameObject(): self.__movespeed = move_speed self.__is_player = is_player self.__is_rect = is_rect - self.__size_rect["x"] = rect_size[0] - self.__size_rect["y"] = rect_size[1] + self.__size_rect_x = rect_size[0] + self.__size_rect_y = rect_size[1] #self.__rectobjekt = rect @@ -67,26 +68,26 @@ class GameObject(): 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"]): + 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"] + 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"]): + 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"] + self.__pos_x = -self.__size_rect_x #print("Objekt-Koordinaten "+self.__name+"= X: "+str(self.__rectobjekt.x)+" Y: "+str(self.__rectobjekt.y), end="\r") @@ -94,12 +95,8 @@ class GameObject(): 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 - if(self.__is_player == True): - self.__updatepos(self.__pos_x, self.__pos_y) - self.__rectobjekt = pygame.draw.rect(self.__surface, self.__color, [self.__last_pos_x, self.__last_pos_y,self.__size_rect["x"],self.__size_rect["y"]]) - else: - self.__rectobjekt = pygame.draw.rect(self.__surface, self.__color, [self.__pos_x, self.__pos_y,self.__size_rect["x"],self.__size_rect["y"]]) + if(not self.__hide): + 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_name(self, debug=False): if(debug): @@ -114,6 +111,9 @@ class GameObject(): def get_rect(self): return self.__rectobjekt + def get_rect_size(self): + return (self.__size_rect_x, self.__size_rect_y) + def get_movespeed(self): return self.__movespeed @@ -126,12 +126,6 @@ class GameObject(): def set_follower(self): self.__has_follower = True - def __updatepos(self, posx, posy): - if posx == (self.__last_pos_x + self.__size_rect["x"]): self.__last_pos_x = self.__pos_x - if posy == (self.__last_pos_y + self.__size_rect["y"]): self.__last_pos_y = self.__pos_y - print("x= "+str(self.__last_pos_x)+" y= "+str(self.__last_pos_y), end="\r") - pass - def is_collided(self) -> bool: return self.__collided @@ -191,36 +185,41 @@ def apply_name(): #TODO: Add function for save name pass +count_follower = 0 + +def append_follwer(x,y): + print("x: "+str(x), "y: "+str(y)) + newfollower = Follower("Follower "+str(count_follower), is_rect=True, rect_size=(x,y)) + colided_objects.append(newfollower) + 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) -def spawn_entities(x:int): - Objects = list() +def spawn_entities(x:int, list_of_objects:list): count = 0 for y in range(x): - Entity = GameObject("Entitiy-"+str(count), rand.randint(1,MAINSCREEN_SIZE[0]), rand.randint(1,MAINSCREEN_SIZE[1]), rand.randint(1,15), is_rect=True, rect_size=(100,100)) + rect_size = rand.randint(50, 100) + Entity = GameObject("Entitiy-"+str(count), rand.randint(1,MAINSCREEN_SIZE[0]), rand.randint(1,MAINSCREEN_SIZE[1]), rand.randint(1,15), is_rect=True, rect_size=(rect_size,rect_size)) Entity.get_name(True) - Objects.append(Entity) + list_of_objects.append(Entity) count += 1 - for x in Objects: - print(x) - return list(Objects) -Player = GameObject("Player", 10, 10, 10, is_player=False, is_rect=True, rect_size=(20,20)) +Player = GameObject("Player", 10, 10, 10, is_player=False, is_rect=True, rect_size=(50,50)) background = pygame.surface.Surface((640,480)) x = 3600 invert = False -spawned_entities = spawn_entities(10) #Spawnt eine definierte Anzahl an GameObjekten +colided_objects = list() +spawned_entities = list() +spawn_entities(30, spawned_entities) count_hidden_entities = 0 count_spawend_enities = len(spawned_entities) print("Es wurden " + str(count_spawend_enities)+ " Objekte gespawnt") -colided_objects = list() #Fenster-Hauptschleife while active == True: @@ -247,7 +246,6 @@ while active == True: Player.draw() Player.move(5) print("Aktuell kollidierte Objekte: ", str(count_hidden_entities)) - #Spawns the Entities for y in spawned_entities: y:GameObject @@ -261,7 +259,13 @@ while active == True: count_hidden_entities += 1 #TODO Hardcopy der Gameobjects calss // Funktion manipuliert aktive Gameobjekte, welche mit vererbter Klasse instanziert werden #Grund hierfür, konnte noch nicht ausfindig gemacht werden! - colided_objects.append(Follower(y.get_name(), is_rect=True, rect_size=(50,50))) + xy = y.get_rect_size() + append_follwer(xy[0], xy[1]) + count_follower += 1 + + for follower in colided_objects: + follower:Follower + follower.draw() if(count_hidden_entities == count_spawend_enities):