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 import random
from klasy import * from krata import *
class Agent: class Agent:
bok = BOK_AGENTA1 bok = BOK_AGENTA1
bokWPolach = BOK_AGENTA1_W_POLACH bokWPolach = BOK_AGENTA1_W_POLACH
def __init__(self, Krata, poleStartoweGorne, tekstura, kierunek, droga): def __init__(self, Krata, poleStartoweGorne, tekstura):
self.krata = Krata self.krata = Krata
self.poleStartoweGorne = poleStartoweGorne self.poleStartoweGorne = poleStartoweGorne
self.okreslHitbox()
self.okreslPoleKoncoweDolne()
self.tekstura = tekstura self.tekstura = tekstura
self.kierunek = kierunek self.okreslPolozenie()
self.droga = droga self.obierzNowyKierunek()
self.okreslDlugoscDrogi()
Krata.agent = self 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): def okreslHitbox(self):
self.hitbox = pygame.Rect(self.poleStartoweGorne.start, self.poleStartoweGorne.gora, self.bok, self.bok) 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 kolumna = self.poleStartoweGorne.kolumna + self.bokWPolach - 1
self.poleKoncoweDolne = PoleKraty(self.krata, wiersz, kolumna) self.poleKoncoweDolne = PoleKraty(self.krata, wiersz, kolumna)
def obierzNowyKierunek(self): def wyszedlemPozaKrate(self):
self.kierunek = Kierunek(random.randint(0, 3)) 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): def zawroc(self):
losowa_droga = None
if self.kierunek == Kierunek.GORA: if self.kierunek == Kierunek.GORA:
losowa_droga = random.randint(0, self.poleStartoweGorne.wiersz) self.kierunek = Kierunek.DOL
elif self.kierunek == Kierunek.DOL: elif self.kierunek == Kierunek.DOL:
losowa_droga = random.randint(0, (self.krata.liczbaPolPionowo - 1) - ( self.kierunek = Kierunek.GORA
self.poleStartoweGorne.wiersz + self.bokWPolach - 1))
elif self.kierunek == Kierunek.LEWO: elif self.kierunek == Kierunek.LEWO:
losowa_droga = random.randint(0, self.poleStartoweGorne.kolumna) self.kierunek = Kierunek.PRAWO
elif self.kierunek == Kierunek.PRAWO: elif self.kierunek == Kierunek.PRAWO:
losowa_droga = random.randint(0, (self.krata.liczbaPolPoziomo - 1) - ( self.kierunek = Kierunek.LEWO
self.poleStartoweGorne.wiersz + self.bokWPolach - 1))
self.droga = losowa_droga 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): def idzWGore(self):
self.poleStartoweGorne.wiersz -= 1 self.poleStartoweGorne.wiersz -= 1
@ -53,45 +115,3 @@ class Agent:
def idzWPrawo(self): def idzWPrawo(self):
self.poleStartoweGorne.kolumna += 1 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) self.krata[rzad].append(ZawartoscPola.PUSTE)
def wyswietlKrate(self): def wyswietlKrate(self):
self.narysujKrate()
self.narysujAgenta()
pygame.display.update()
def narysujKrate(self):
self.okno.fill(SZARY1) self.okno.fill(SZARY1)
for rzad in range(self.liczbaPolPionowo): for rzad in range(self.liczbaPolPionowo):
for kolumna in range(self.liczbaPolPoziomo): for kolumna in range(self.liczbaPolPoziomo):
start = (self.odstepMiedzyPolami + self.bokPola) * kolumna + self.odstepMiedzyPolami start = (self.odstepMiedzyPolami + self.bokPola) * kolumna + self.odstepMiedzyPolami
gora = (self.odstepMiedzyPolami + self.bokPola) * rzad + self.odstepMiedzyPolami gora = (self.odstepMiedzyPolami + self.bokPola) * rzad + self.odstepMiedzyPolami
pygame.draw.rect(self.okno, BIALY, [start, gora, self.bokPola, self.bokPola]) pygame.draw.rect(self.okno, BIALY, [start, gora, self.bokPola, self.bokPola])
pygame.display.update()
def wyswietlAgenta(self): def narysujAgenta(self):
self.okno.blit(self.agent.tekstura, (self.agent.hitbox.x, self.agent.hitbox.y)) if self.agent is not None:
pygame.display.update() self.okno.blit(self.agent.tekstura, (self.agent.hitbox.x, self.agent.hitbox.y))
self.agent.ruszSie()

View File

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

View File

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