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_y:int
__movespeed = int()
__rectobjekt:pygame.Rect
__surface:pygame.Surface
__mainscreensize:tuple
_rectobjekt:pygame.Rect
_surface:pygame.Surface
_mainscreensize:tuple
__hide = False
__collided = False
__is_player = False
@@ -33,8 +33,8 @@ class GameObject():
self.count += 1
self.__pos_lf_x = 0
self.__pos_lf_y = 0
self.__surface = surface
self.__mainscreensize = mainscreensize
self._surface = surface
self._mainscreensize = mainscreensize
self.__score = 0
self.__imagepath = image
self.__imageloaded = 0
@@ -44,7 +44,7 @@ class GameObject():
#font = pygame.font.SysFont(None, 70)
#text = font.render("TEST", True, (0,0,0) )
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):
if(debug):
@@ -57,7 +57,7 @@ class GameObject():
return (self._pos_x, self._pos_y)
def get_rect(self):
return self.__rectobjekt
return self._rectobjekt
def get_rect_size(self):
return (self._size_rect_x, self._size_rect_y)
@@ -72,7 +72,7 @@ class GameObject():
return self.__score
def get_surface(self) -> pygame.Surface:
return self.__surface
return self._surface
def has_follower(self):
return self.__has_follower
@@ -105,7 +105,7 @@ class GameObject():
#print(GameObject.get_rect())
"""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!
self.set_collided()
return True
@@ -118,6 +118,24 @@ class GameObject():
self.__hide = True
"""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):
@@ -146,17 +164,18 @@ class Block(GameObject):
def get_score(self) -> int:
return self.__score
class Player(GameObject):
class Player(GameObject_new):
#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:
super().__init__(name, surface, mainscreensize, posx_init, posy_init, move_speed, is_player, is_rect, color, rect_size, image)
self.__mainscreensize = mainscreensize
print(self.__mainscreensize)
super().set_position((150, 550))
def __init__(self, name: str, surface: pygame.Surface, surface_size: tuple, init_pos_x, init_pos_y, visibility: bool = True,
size:int = 10
) -> None:
self._size = size
self._score = 0
super().__init__(name, surface, surface_size, init_pos_x, init_pos_y, visibility)
__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):
pass
@@ -170,34 +189,53 @@ class Player(GameObject):
def move(self, *speed:int):
MOVE_SPEED = 1
#self.__rectobjekt.x += MOVE_SPEED
objectpos = super().get_position()
if(self.__test_counter == 15):
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']):
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 = self.__mainscreensize[1]
elif(self.__movedirection['down']):
if(not speed): self._position[1] += MOVE_SPEED
else: self._position[1] += speed[0]
if(self._position[1] >= self._surface_size[1]):
self._position[1] = -self._size
elif(self.__movedirection['down']):
if(not speed): self._pos_y += MOVE_SPEED
else: self._pos_y += speed[0]
if(self._pos_y >= self.__mainscreensize[1]):
self._pos_y = -self._size_rect_y
elif(self.__movedirection['left']):
if(not speed): self._position[0] -= MOVE_SPEED
else: self._position[0] -= speed[0]
if(self._position[0] <= -self._size):
self._position[0] = self._surface_size[0]
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 = self.__mainscreensize[0]
elif(self.__movedirection['right']):
if(not speed): self._position[0] += MOVE_SPEED
else: self._position[0] += speed[0]
if(self._position[0] >= self._surface_size[0]):
self._position[0] = -self._size
self.__test_counter+=1
elif(self.__movedirection['right']):
if(not speed): self._pos_x += MOVE_SPEED
else: self._pos_x += speed[0]
if(self._pos_x >= self.__mainscreensize[0]):
self._pos_x = -self._size_rect_x
def draw(self):
if(self.__test_counter == 15):
self.__snake_body.insert(0, list(self._position))
for pos in self.__snake_body:
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):
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)
@@ -209,4 +247,4 @@ class GOIMAGE(GameObject):
def draw(self):
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.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):
count = 0
@@ -79,10 +79,7 @@ def spawn_entities(x:int, list_of_objects:list):
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.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)
else:
print("Object zu nach an Spieler")
list_of_objects.append(Entity)
count += 1
@@ -93,7 +90,7 @@ x = 3600
invert = False
colided_objects = list()
spawned_entities = list()
spawn_entities(20, spawned_entities)
spawn_entities(2, spawned_entities)
count_hidden_entities = 0
count_spawend_enities = len(spawned_entities)
print("Es wurden " + str(count_spawend_enities)+ " Objekte gespawnt")
@@ -101,6 +98,12 @@ print("Es wurden " + str(count_spawend_enities)+ " Objekte gespawnt")
testx = 10
testy = 10
counter = 0
#TESTOBJECT = GameObject_new("Testobjekt", MAINSCREEN, MAINSCREEN_SIZE, 0, 0)
#print(help(TESTOBJECT))
#TESTOBJECT.printall_attributes()
#Fenster-Hauptschleife+
while active == True:
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))
MAINSCREEN.blit(text_surface, (0,0))
player.draw()
player.update_pos_lastframe(player.get_position()[0], player.get_position()[1], False)
player.move(5)
player.move(40)
if(counter == 300):
player.add_body()
counter = 0
counter += 1
#print("Aktuelle Position: " + str(player.get_position()))
#print("Aktuell kollidierte Objekte: ", str(count_hidden_entities))
#Spawns the Entities
"""
for y in spawned_entities:
y:Block
y.draw()
@@ -147,7 +156,7 @@ while active == True:
count_hidden_entities += 1
xy = y.get_rect_size()
append_follwer(xy[0], xy[1])
count_follower += 1
count_follower += 1"""
#Zeichnet alle Verfolgerobjekte, sofern sie vorliegend sind
#TODO: Follower sollen ab dem zweiten Objekt dem vorangegangenen Objekt folgen und nicht dem player