Witam, robię grę "Pacman" z użyciem pygame. Stwierdziłem, że ścianki najlepiej będzie zbudować z cegiełek w postaci obiektów, tak żeby nie kopiować dla każdej takiej cegiełki z osobna warunków, uniemożliwiających Pacmanowi przenikanie przez cegiełki. Warunki działają poprawnie, gdy to robię bez klas, wygląda to wtedy tak:
if (pac_x + pac_szer) > des_x and pac_y < (des_y + des_wys) and (pac_y + pac_szer) > des_y and (pac_x + pac_szer) < (des_x +5):
pac_x = des_x - pac_szer
if pac_x < (des_x + des_szer) and pac_y < (des_y + des_wys) and (pac_y + pac_szer) > des_y and pac_x > (des_x + des_szer - 5):
pac_x = des_x + des_szer
if pac_y < (des_y + des_wys) and (pac_x + pac_szer) > des_x and pac_x < (des_x + des_szer) and pac_y > (des_y + des_wys - 5):
pac_y = (des_y + des_wys)
if (pac_y + pac_szer) > des_y and (pac_x + pac_szer) > des_x and pac_x < (des_x + des_szer) and (pac_y + pac_szer) < (des_y + 5):
pac_y = des_y - pac_szer
pac to pakman, a des to deska/cegiełka
Ale kiedy zastosuję metodę obiektu, to już nie działa (nie wyskakuje żaden błąd, ale Pacman przenika przez ściankę. Klasa wygląda w tej chwili tak:
class Decha:
def __init__(self, x, y, szer, wys):
self.x = x
self.y = y
self.szer = szer
self.wys = wys
def wstaw(self, x, y):
screen.blit(des,(x,y))
def blokada(self, pac_x, pac_y):
if (pac_x + pac_szer) > self.x and pac_y < (self.y + self.wys) and (pac_y + pac_szer) > self.y and (pac_x + pac_szer) < (self.x +5):
pac_x = self.x - self.szer
return pac_x, pac_y
if pac_x < (self.x + self.szer) and pac_y < (self.y + self.wys) and (pac_y + pac_szer) > self.y and pac_x > (self.x + self.szer - 5):
pac_x = self.x + self.szer
return pac_x, pac_y
if pac_y < (self.y + self.wys) and (pac_x + pac_szer) > self.x and pac_x < (self.x + self.szer) and pac_y > (self.y + self.wys - 5):
pac_y = (self.y + self.wys)
return pac_x, pac_y
if (pac_y + pac_szer) > self.y and (pac_x + pac_szer) > self.x and pac_x < (self.x + self.szer) and (pac_y + pac_szer) < (self.y + 5):
pac_y = self.y - pac_szer
return pac_x, pac_y
Czy wie ktoś na czym polega problem? Oczywiście wywołuję tę metodę w odpowiednim miejscu:
deska1.blokada(pac_x,pac_y)
Była też wersja z jednym return pac_x, pac_y
oraz bez returna