Agent porusza się losowo po kracie zajmując 9 pól.

This commit is contained in:
Dominik Jagosz 2022-03-22 11:20:58 +01:00
parent adece3ebc9
commit 21fccb422f
4 changed files with 92 additions and 67 deletions

138
agent.py
View File

@ -1,22 +1,49 @@
import random
from klasy import *
from krata import *
class Agent:
bok = BOK_AGENTA1
bokWPolach = BOK_AGENTA1_W_POLACH
def __init__(self, Krata, poleStartoweGorne, tekstura, kierunek, droga):
def __init__(self, Krata, poleStartoweGorne, tekstura):
self.krata = Krata
self.poleStartoweGorne = poleStartoweGorne
self.okreslHitbox()
self.okreslPoleKoncoweDolne()
self.tekstura = tekstura
self.kierunek = kierunek
self.droga = droga
self.okreslPolozenie()
self.obierzNowyKierunek()
self.okreslDlugoscDrogi()
Krata.agent = self
def ruszSie(self):
if self.droga <= 0:
self.obierzNowyKierunek()
self.okreslDlugoscDrogi()
self.zrobKrokWMoimKierunku()
self.droga -= 1
self.okreslPolozenie()
if self.wyszedlemPozaKrate():
self.cofnijSie()
self.zawroc()
self.okreslDlugoscDrogi()
def obierzNowyKierunek(self):
self.kierunek = Kierunek(random.randint(0, 3))
if self.maxDlugoscDrogiWMoimKierunku() < 1:
self.obierzNowyKierunek()
def okreslDlugoscDrogi(self):
self.droga = random.randint(1, self.maxDlugoscDrogiWMoimKierunku())
def cofnijSie(self):
self.zrobKrokWOdwrotnymKierunku()
self.okreslPolozenie()
def okreslPolozenie(self):
self.okreslPoleKoncoweDolne()
self.okreslHitbox()
def okreslHitbox(self):
self.hitbox = pygame.Rect(self.poleStartoweGorne.start, self.poleStartoweGorne.gora, self.bok, self.bok)
@ -25,22 +52,57 @@ class Agent:
kolumna = self.poleStartoweGorne.kolumna + self.bokWPolach - 1
self.poleKoncoweDolne = PoleKraty(self.krata, wiersz, kolumna)
def obierzNowyKierunek(self):
self.kierunek = Kierunek(random.randint(0, 3))
def wyszedlemPozaKrate(self):
if self.poleStartoweGorne.wiersz < 0:
return True
elif self.poleKoncoweDolne.wiersz > self.krata.liczbaPolPionowo - 1:
return True
elif self.poleStartoweGorne.kolumna < 0:
return True
elif self.poleKoncoweDolne.kolumna > self.krata.liczbaPolPoziomo - 1:
return True
else:
return False
def okreslDlugoscDrogi(self):
losowa_droga = None
def zawroc(self):
if self.kierunek == Kierunek.GORA:
losowa_droga = random.randint(0, self.poleStartoweGorne.wiersz)
self.kierunek = Kierunek.DOL
elif self.kierunek == Kierunek.DOL:
losowa_droga = random.randint(0, (self.krata.liczbaPolPionowo - 1) - (
self.poleStartoweGorne.wiersz + self.bokWPolach - 1))
self.kierunek = Kierunek.GORA
elif self.kierunek == Kierunek.LEWO:
losowa_droga = random.randint(0, self.poleStartoweGorne.kolumna)
self.kierunek = Kierunek.PRAWO
elif self.kierunek == Kierunek.PRAWO:
losowa_droga = random.randint(0, (self.krata.liczbaPolPoziomo - 1) - (
self.poleStartoweGorne.wiersz + self.bokWPolach - 1))
self.droga = losowa_droga
self.kierunek = Kierunek.LEWO
def maxDlugoscDrogiWMoimKierunku(self):
if self.kierunek == Kierunek.GORA:
return self.poleStartoweGorne.wiersz
elif self.kierunek == Kierunek.DOL:
return self.krata.liczbaPolPionowo - self.poleKoncoweDolne.wiersz - 1
elif self.kierunek == Kierunek.LEWO:
return self.poleStartoweGorne.kolumna
elif self.kierunek == Kierunek.PRAWO:
return self.krata.liczbaPolPoziomo - self.poleKoncoweDolne.kolumna - 1
def zrobKrokWMoimKierunku(self):
if self.kierunek == Kierunek.GORA:
self.idzWGore()
elif self.kierunek == Kierunek.DOL:
self.idzWDol()
elif self.kierunek == Kierunek.LEWO:
self.idzWLewo()
elif self.kierunek == Kierunek.PRAWO:
self.idzWPrawo()
def zrobKrokWOdwrotnymKierunku(self):
if self.kierunek == Kierunek.GORA:
self.idzWDol()
elif self.kierunek == Kierunek.DOL:
self.idzWGore()
elif self.kierunek == Kierunek.LEWO:
self.idzWPrawo()
elif self.kierunek == Kierunek.PRAWO:
self.idzWLewo()
def idzWGore(self):
self.poleStartoweGorne.wiersz -= 1
@ -53,45 +115,3 @@ class Agent:
def idzWPrawo(self):
self.poleStartoweGorne.kolumna += 1
def wyszedlemPozaKrate(self):
if self.poleStartoweGorne.wiersz not in range(0, (self.krata.liczbaPolWPionie - 1) - (self.bokWPolach - 1)):
return False
elif self.poleStartoweGorne.kolumna in range(0, (self.krata.liczbaPolWPoziomie - 1) - (self.bokWPolach - 1)):
return False
else:
return True
def ruszSie(self):
if self.kierunek == Kierunek.GORA:
self.idzWGore()
elif self.kierunek == Kierunek.DOL:
self.idzWDol()
elif self.kierunek == Kierunek.LEWO:
self.idzWLewo()
elif self.kierunek == Kierunek.PRAWO:
self.idzWPrawo()
if self.wyszedlemPozaKrate():
self.cofnijSie()
self.zawroc()
self.okreslDlugoscDrogi()
def cofnijSie(self):
if self.kierunek == Kierunek.GORA:
self.idzWDol()
elif self.kierunek == Kierunek.DOL:
self.idzWGore()
elif self.kierunek == Kierunek.LEWO:
self.idzWPrawo()
elif self.kierunek == Kierunek.PRAWO:
self.idzWLewo()
def zawroc(self):
if self.kierunek == Kierunek.GORA:
self.kierunek = Kierunek.DOL
elif self.kierunek == Kierunek.DOL:
self.kierunek = Kierunek.GORA
elif self.kierunek == Kierunek.LEWO:
self.kierunek = Kierunek.PRAWO
elif self.kierunek == Kierunek.PRAWO:
self.kierunek = Kierunek.LEWO

View File

@ -55,14 +55,19 @@ class Krata:
self.krata[rzad].append(ZawartoscPola.PUSTE)
def wyswietlKrate(self):
self.narysujKrate()
self.narysujAgenta()
pygame.display.update()
def narysujKrate(self):
self.okno.fill(SZARY1)
for rzad in range(self.liczbaPolPionowo):
for kolumna in range(self.liczbaPolPoziomo):
start = (self.odstepMiedzyPolami + self.bokPola) * kolumna + self.odstepMiedzyPolami
gora = (self.odstepMiedzyPolami + self.bokPola) * rzad + self.odstepMiedzyPolami
pygame.draw.rect(self.okno, BIALY, [start, gora, self.bokPola, self.bokPola])
pygame.display.update()
def wyswietlAgenta(self):
def narysujAgenta(self):
if self.agent is not None:
self.okno.blit(self.agent.tekstura, (self.agent.hitbox.x, self.agent.hitbox.y))
pygame.display.update()
self.agent.ruszSie()

View File

@ -6,6 +6,7 @@ Okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA))
pygame.display.set_caption("Okno1")
Krata = Krata(Okno)
#
def dodaj_agenta():
pole_lewe_gorne = PoleKraty(Krata, random.randint(0, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH),
@ -13,10 +14,11 @@ def dodaj_agenta():
pom = 'test1_ikona.png'
ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', pom)),
(BOK_AGENTA1, BOK_AGENTA1))
Agent(Krata, pole_lewe_gorne, ikona, Kierunek.GORA, 0)
Agent(Krata, pole_lewe_gorne, ikona)
def main():
dodaj_agenta()
klatkaz = pygame.time.Clock()
warunek_dzialania = True
while warunek_dzialania:
@ -26,8 +28,6 @@ def main():
warunek_dzialania = False
break
Krata.wyswietlKrate()
dodaj_agenta()
Krata.wyswietlAgenta()
pygame.quit()

View File

@ -1,4 +1,4 @@
FPS = 1
FPS = 10
# SZEROKOSC_OKNA = 1500
# WYSOKOSC_OKNA = 750