Rewrite Gameobjects

Added new movementfunction
Code cleanup

Todo: Remove old class and update code for new one
This commit is contained in:
2024-01-29 21:47:43 +01:00
parent a3269826bf
commit 92fd4a4cb2
2 changed files with 96 additions and 49 deletions

View File

@@ -7,9 +7,9 @@ class GameObject():
_size_rect_x:int _size_rect_x:int
_size_rect_y:int _size_rect_y:int
__movespeed = int() __movespeed = int()
__rectobjekt:pygame.Rect _rectobjekt:pygame.Rect
__surface:pygame.Surface _surface:pygame.Surface
__mainscreensize:tuple _mainscreensize:tuple
__hide = False __hide = False
__collided = False __collided = False
__is_player = False __is_player = False
@@ -33,8 +33,8 @@ class GameObject():
self.count += 1 self.count += 1
self.__pos_lf_x = 0 self.__pos_lf_x = 0
self.__pos_lf_y = 0 self.__pos_lf_y = 0
self.__surface = surface self._surface = surface
self.__mainscreensize = mainscreensize self._mainscreensize = mainscreensize
self.__score = 0 self.__score = 0
self.__imagepath = image self.__imagepath = image
self.__imageloaded = 0 self.__imageloaded = 0
@@ -44,7 +44,7 @@ class GameObject():
#font = pygame.font.SysFont(None, 70) #font = pygame.font.SysFont(None, 70)
#text = font.render("TEST", True, (0,0,0) ) #text = font.render("TEST", True, (0,0,0) )
if(not self.__hide): 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]) 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): def get_name(self, debug=False):
if(debug): if(debug):
@@ -57,7 +57,7 @@ class GameObject():
return (self._pos_x, self._pos_y) return (self._pos_x, self._pos_y)
def get_rect(self): def get_rect(self):
return self.__rectobjekt return self._rectobjekt
def get_rect_size(self): def get_rect_size(self):
return (self._size_rect_x, self._size_rect_y) return (self._size_rect_x, self._size_rect_y)
@@ -72,7 +72,7 @@ class GameObject():
return self.__score return self.__score
def get_surface(self) -> pygame.Surface: def get_surface(self) -> pygame.Surface:
return self.__surface return self._surface
def has_follower(self): def has_follower(self):
return self.__has_follower return self.__has_follower
@@ -105,7 +105,7 @@ class GameObject():
#print(GameObject.get_rect()) #print(GameObject.get_rect())
"""TODO: Hitbox with Objectsize""" """TODO: Hitbox with Objectsize"""
if(pygame.rect.Rect.colliderect(self.__rectobjekt, GameObject.get_rect()) and not self.is_collided()): if(pygame.rect.Rect.colliderect(self._rectobjekt, GameObject.get_rect()) and not self.is_collided()):
print("Kollision\n") #Funktioniert für das erste! print("Kollision\n") #Funktioniert für das erste!
self.set_collided() self.set_collided()
return True return True
@@ -118,6 +118,24 @@ class GameObject():
self.__hide = True self.__hide = True
"""TODO: Delete obeject function""" """TODO: Delete obeject function"""
class GameObject_new():
def __init__(self, name:str, surface:pygame.surface.Surface, surface_size:tuple, init_pos_x, init_pos_y, visibility:bool = True) -> None:
self._name = name
self._surface = surface
self._surface_size = surface_size
self._position = [init_pos_x, init_pos_y]
self._visibility = visibility
def printall_attributes(self):
print(self._name)
print(self._surface)
print(self._surface_size)
print(self._position)
print(self._visibility)
def get_position(self) -> tuple:
return self._position
class Block(GameObject): class Block(GameObject):
@@ -146,17 +164,18 @@ class Block(GameObject):
def get_score(self) -> int: def get_score(self) -> int:
return self.__score return self.__score
class Player(GameObject): class Player(GameObject_new):
#Later handles the Player-Gameobject #Later handles the Player-Gameobject
def __init__(self, name: str, surface, mainscreensize: tuple, posx_init: int = 0, posy_init: int = 0, move_speed: int = 0, is_player: bool = False, is_rect: bool = True, color: tuple = (0, 0, 0), rect_size: tuple = (10, 10), image=str()) -> None: def __init__(self, name: str, surface: pygame.Surface, surface_size: tuple, init_pos_x, init_pos_y, visibility: bool = True,
super().__init__(name, surface, mainscreensize, posx_init, posy_init, move_speed, is_player, is_rect, color, rect_size, image) size:int = 10
) -> None:
self.__mainscreensize = mainscreensize self._size = size
print(self.__mainscreensize) self._score = 0
super().__init__(name, surface, surface_size, init_pos_x, init_pos_y, visibility)
super().set_position((150, 550))
__movedirection = {"up":False, "down":False, "left":False, "right":False} __movedirection = {"up":False, "down":False, "left":False, "right":False}
__snake_body = [[100,100], [100,140], [100,180], [100,220]]
__test_counter = 0
def user_test_func(self): def user_test_func(self):
pass pass
@@ -170,34 +189,53 @@ class Player(GameObject):
def move(self, *speed:int): def move(self, *speed:int):
MOVE_SPEED = 1 MOVE_SPEED = 1
#self.__rectobjekt.x += MOVE_SPEED if(self.__test_counter == 15):
objectpos = super().get_position() self.__test_counter = 0
if(self.__movedirection['up']):
if(not speed): self._position[1] -= MOVE_SPEED
else: self._position[1] -= speed[0]
if(self._position[1] <= -self._size):
self._position[1] = self._surface_size[1]
if(self.__movedirection['up']): elif(self.__movedirection['down']):
if(not speed): self._pos_y -= MOVE_SPEED if(not speed): self._position[1] += MOVE_SPEED
else: self._pos_y -= speed[0] else: self._position[1] += speed[0]
if(self._pos_y <= -self._size_rect_y): if(self._position[1] >= self._surface_size[1]):
self._pos_y = self.__mainscreensize[1] self._position[1] = -self._size
elif(self.__movedirection['down']): elif(self.__movedirection['left']):
if(not speed): self._pos_y += MOVE_SPEED if(not speed): self._position[0] -= MOVE_SPEED
else: self._pos_y += speed[0] else: self._position[0] -= speed[0]
if(self._pos_y >= self.__mainscreensize[1]): if(self._position[0] <= -self._size):
self._pos_y = -self._size_rect_y self._position[0] = self._surface_size[0]
elif(self.__movedirection['left']): elif(self.__movedirection['right']):
if(not speed): self._pos_x -= MOVE_SPEED if(not speed): self._position[0] += MOVE_SPEED
else: self._pos_x -= speed[0] else: self._position[0] += speed[0]
if(self._pos_x <= -self._size_rect_x): if(self._position[0] >= self._surface_size[0]):
self._pos_x = self.__mainscreensize[0] self._position[0] = -self._size
self.__test_counter+=1
elif(self.__movedirection['right']): def draw(self):
if(not speed): self._pos_x += MOVE_SPEED if(self.__test_counter == 15):
else: self._pos_x += speed[0] self.__snake_body.insert(0, list(self._position))
if(self._pos_x >= self.__mainscreensize[0]): for pos in self.__snake_body:
self._pos_x = -self._size_rect_x pygame.draw.rect(self._surface, (0,0,0), pygame.Rect(pos[0], pos[1], self._size, self._size))
print(pos)
if(self.__test_counter == 15):
self.__snake_body.pop()
def add_body(self):
self.__snake_body.insert(0,list(self._position))
def get_rect_size(self):
return self._size
def get_player_score(self) -> int:
return self._score
"""
class GOIMAGE(GameObject): class GOIMAGE(GameObject):
def __init__(self, name: str, surface, mainscreensize: tuple, posx_init: int = 0, posy_init: int = 0, move_speed: int = 0, is_player: bool = False, is_rect: bool = True, color: tuple = (0, 0, 0), rect_size: tuple = (10, 10), image=str()) -> None: def __init__(self, name: str, surface, mainscreensize: tuple, posx_init: int = 0, posy_init: int = 0, move_speed: int = 0, is_player: bool = False, is_rect: bool = True, color: tuple = (0, 0, 0), rect_size: tuple = (10, 10), image=str()) -> None:
super().__init__(name, surface, mainscreensize, posx_init, posy_init, move_speed, is_player, is_rect, color, rect_size, image) super().__init__(name, surface, mainscreensize, posx_init, posy_init, move_speed, is_player, is_rect, color, rect_size, image)
@@ -209,4 +247,4 @@ class GOIMAGE(GameObject):
def draw(self): def draw(self):
surface = self.get_surface() surface = self.get_surface()
surface.blit(self.__image, self.get_position()) surface.blit(self.__image, self.get_position())"""

View File

@@ -71,7 +71,7 @@ menu.add.button('Play', start_game)
menu.add.button('Quit', pygame_menu.events.EXIT) menu.add.button('Quit', pygame_menu.events.EXIT)
menu.mainloop(MAINSCREEN) menu.mainloop(MAINSCREEN)
player = Player("Player", MAINSCREEN, MAINSCREEN_SIZE, 10, 10, 10, is_player=False, is_rect=True, color=(0,255,0) ,rect_size=(80,80)) player = Player("Player", MAINSCREEN, MAINSCREEN_SIZE, 100, 100, size=40)
def spawn_entities(x:int, list_of_objects:list): def spawn_entities(x:int, list_of_objects:list):
count = 0 count = 0
@@ -79,10 +79,7 @@ def spawn_entities(x:int, list_of_objects:list):
rect_size = 80 rect_size = 80
Entity = Block("Entitiy-"+str(count), MAINSCREEN, MAINSCREEN_SIZE, 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 = Block("Entitiy-"+str(count), MAINSCREEN, MAINSCREEN_SIZE, 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) Entity.get_name(True)
if(Entity.get_position() > player.get_position() + player.get_rect_size() or Entity.get_position() < player.get_position() + player.get_rect_size()): list_of_objects.append(Entity)
list_of_objects.append(Entity)
else:
print("Object zu nach an Spieler")
count += 1 count += 1
@@ -93,7 +90,7 @@ x = 3600
invert = False invert = False
colided_objects = list() colided_objects = list()
spawned_entities = list() spawned_entities = list()
spawn_entities(20, spawned_entities) spawn_entities(2, spawned_entities)
count_hidden_entities = 0 count_hidden_entities = 0
count_spawend_enities = len(spawned_entities) count_spawend_enities = len(spawned_entities)
print("Es wurden " + str(count_spawend_enities)+ " Objekte gespawnt") print("Es wurden " + str(count_spawend_enities)+ " Objekte gespawnt")
@@ -101,6 +98,12 @@ print("Es wurden " + str(count_spawend_enities)+ " Objekte gespawnt")
testx = 10 testx = 10
testy = 10 testy = 10
counter = 0
#TESTOBJECT = GameObject_new("Testobjekt", MAINSCREEN, MAINSCREEN_SIZE, 0, 0)
#print(help(TESTOBJECT))
#TESTOBJECT.printall_attributes()
#Fenster-Hauptschleife+ #Fenster-Hauptschleife+
while active == True: while active == True:
MAINSCREEN.fill((255,255,255)) MAINSCREEN.fill((255,255,255))
@@ -126,12 +129,18 @@ while active == True:
text_surface = my_font.render('Score: '+str(player.get_player_score()), False, (0, 0, 0)) text_surface = my_font.render('Score: '+str(player.get_player_score()), False, (0, 0, 0))
MAINSCREEN.blit(text_surface, (0,0)) MAINSCREEN.blit(text_surface, (0,0))
player.draw() player.draw()
player.update_pos_lastframe(player.get_position()[0], player.get_position()[1], False) player.move(40)
player.move(5) if(counter == 300):
player.add_body()
counter = 0
counter += 1
#print("Aktuelle Position: " + str(player.get_position())) #print("Aktuelle Position: " + str(player.get_position()))
#print("Aktuell kollidierte Objekte: ", str(count_hidden_entities)) #print("Aktuell kollidierte Objekte: ", str(count_hidden_entities))
#Spawns the Entities #Spawns the Entities
"""
for y in spawned_entities: for y in spawned_entities:
y:Block y:Block
y.draw() y.draw()
@@ -147,7 +156,7 @@ while active == True:
count_hidden_entities += 1 count_hidden_entities += 1
xy = y.get_rect_size() xy = y.get_rect_size()
append_follwer(xy[0], xy[1]) append_follwer(xy[0], xy[1])
count_follower += 1 count_follower += 1"""
#Zeichnet alle Verfolgerobjekte, sofern sie vorliegend sind #Zeichnet alle Verfolgerobjekte, sofern sie vorliegend sind
#TODO: Follower sollen ab dem zweiten Objekt dem vorangegangenen Objekt folgen und nicht dem player #TODO: Follower sollen ab dem zweiten Objekt dem vorangegangenen Objekt folgen und nicht dem player