Wózki nie najeżdżają na siebie. Dodanie funkcjonalności agentom.

This commit is contained in:
Dominik Jagosz 2022-03-09 16:08:26 +01:00
parent e7d28ad14a
commit 61c8f63437
3 changed files with 96 additions and 47 deletions

View File

@ -1,16 +1,8 @@
import random import random
from enum import Enum
from stale import * from stale import *
class KIERUNEK(Enum):
GORA = 0
DOL = 1
LEWO = 2
PRAWO = 3
class Agent1: class Agent1:
def __init__(self, hitbox, tekstura, kierunek, droga): def __init__(self, hitbox, tekstura, kierunek, droga):
self.hitbox = hitbox self.hitbox = hitbox
@ -20,6 +12,8 @@ class Agent1:
def obierzNowyKierunek(self): def obierzNowyKierunek(self):
self.kierunek = KIERUNEK(random.randint(0, 3)) self.kierunek = KIERUNEK(random.randint(0, 3))
def okreslDlugoscDrogi(self):
losowa_droga = None losowa_droga = None
if self.kierunek == KIERUNEK.GORA: if self.kierunek == KIERUNEK.GORA:
losowa_droga = random.randint(0, self.hitbox.y) losowa_droga = random.randint(0, self.hitbox.y)
@ -31,28 +25,71 @@ class Agent1:
losowa_droga = random.randint(0, SZEROKOSC_OKNA - self.hitbox.x) losowa_droga = random.randint(0, SZEROKOSC_OKNA - self.hitbox.x)
self.droga = losowa_droga - losowa_droga % KROK_AGENTA1 self.droga = losowa_droga - losowa_droga % KROK_AGENTA1
def ruszSie(self): def idzWGore(self):
if self.kierunek == KIERUNEK.GORA:
if self.hitbox.y - KROK_AGENTA1 > 0: if self.hitbox.y - KROK_AGENTA1 > 0:
self.hitbox.y -= KROK_AGENTA1 self.hitbox.y -= KROK_AGENTA1
self.droga -= KROK_AGENTA1 self.droga -= KROK_AGENTA1
else: else:
self.droga = 0 self.droga = 0
elif self.kierunek == KIERUNEK.DOL:
def idzWDol(self):
if self.hitbox.y + KROK_AGENTA1 < WYSOKOSC_OKNA - self.hitbox.height: if self.hitbox.y + KROK_AGENTA1 < WYSOKOSC_OKNA - self.hitbox.height:
self.hitbox.y += KROK_AGENTA1 self.hitbox.y += KROK_AGENTA1
self.droga -= KROK_AGENTA1 self.droga -= KROK_AGENTA1
else: else:
self.droga = 0 self.droga = 0
elif self.kierunek == KIERUNEK.LEWO:
def idzWLewo(self):
if self.hitbox.x - KROK_AGENTA1 > 0: if self.hitbox.x - KROK_AGENTA1 > 0:
self.hitbox.x -= KROK_AGENTA1 self.hitbox.x -= KROK_AGENTA1
self.droga -= KROK_AGENTA1 self.droga -= KROK_AGENTA1
else: else:
self.droga = 0 self.droga = 0
elif self.kierunek == KIERUNEK.PRAWO:
def idzWPrawo(self):
if self.hitbox.x + KROK_AGENTA1 < SZEROKOSC_OKNA - self.hitbox.width: if self.hitbox.x + KROK_AGENTA1 < SZEROKOSC_OKNA - self.hitbox.width:
self.hitbox.x += KROK_AGENTA1 self.hitbox.x += KROK_AGENTA1
self.droga -= KROK_AGENTA1 self.droga -= KROK_AGENTA1
else: else:
self.droga = 0 self.droga = 0
def czyWszedlesWInnegoAgenta(self, Agenci):
for a in Agenci:
if a.hitbox.colliderect(self.hitbox) and a != self:
return True
return False
def ruszSie(self, Agenci):
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.czyWszedlesWInnegoAgenta(Agenci):
self.cofnijSie()
self.zawroc()
self.okreslDlugoscDrogi()
# self.ruszSie(Agenci)
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

30
main.py
View File

@ -7,7 +7,6 @@ from stale import *
OKNO = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA)) OKNO = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA))
pygame.display.set_caption("Okno1") pygame.display.set_caption("Okno1")
Agenci1 = [] Agenci1 = []
@ -17,24 +16,34 @@ def wyswietl_okno():
OKNO.blit(a.tekstura, (a.hitbox.x, a.hitbox.y)) OKNO.blit(a.tekstura, (a.hitbox.x, a.hitbox.y))
if a.droga == 0: if a.droga == 0:
a.obierzNowyKierunek() a.obierzNowyKierunek()
a.ruszSie() a.okreslDlugoscDrogi()
a.ruszSie(Agenci1)
pygame.display.update() pygame.display.update()
def dodaj_agenta1(): def dodaj_agenta1():
los = random.randint(1, 240) los = None
if len(Agenci1) < 50: if len(Agenci1) in range(0, 40):
los = random.randint(1, 150)
elif len(Agenci1) in range(40, 50):
los = random.randint(1, 15)
if los != None:
pom = None pom = None
if los in (1, 2) or len(Agenci1) == 0: if los in (1, 2) or len(Agenci1) == 0:
pom = 'wozek.png' pom = 'wozek.png'
elif los in (2, 3): elif los in (3, 4):
pom = 'wozek_ze_skrzynka.png' pom = 'wozek_ze_skrzynka.png'
elif los == 4 and len(Agenci1) > 6: elif los == 5 and len(Agenci1) > 6:
pom = 'traktor_ikona.png' pom = 'traktor_ikona.png'
if pom != None: if pom != None:
hitbox = pygame.Rect(random.randint(0, SZEROKOSC_OKNA - BOK_AGENTA1), x, y = random.randint(0, SZEROKOSC_OKNA - BOK_AGENTA1), random.randint(0, WYSOKOSC_OKNA - BOK_AGENTA1)
random.randint(0, WYSOKOSC_OKNA - BOK_AGENTA1), BOK_AGENTA1, hitbox = pygame.Rect(x, y, BOK_AGENTA1, BOK_AGENTA1)
BOK_AGENTA1) warunek = True
for a in Agenci1:
if a.hitbox.colliderect(hitbox):
warunek = False
break
if warunek:
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))
Agenci1.append(Agent1(hitbox, ikona, KIERUNEK.GORA, 0)) Agenci1.append(Agent1(hitbox, ikona, KIERUNEK.GORA, 0))
@ -49,12 +58,9 @@ def main():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
warunek_dzialania = False warunek_dzialania = False
break break
wyswietl_okno() wyswietl_okno()
dodaj_agenta1() dodaj_agenta1()
pygame.quit() pygame.quit()
main() main()
pygame.quit()

View File

@ -1,11 +1,17 @@
from enum import Enum
FPS = 120 FPS = 120
KROK_AGENTA1 = 2 KROK_AGENTA1 = 2
SZEROKOSC_OKNA = 1280 SZEROKOSC_OKNA = 1280
WYSOKOSC_OKNA = 960 WYSOKOSC_OKNA = 960
BOK_AGENTA1 = 100 BOK_AGENTA1 = 100
BIALY = (255, 255, 255) BIALY = (255, 255, 255)
JASNOSZARY1 = (200, 200, 200) JASNOSZARY1 = (200, 200, 200)
ZIELONY1 = (26, 122, 26) ZIELONY1 = (26, 122, 26)
class KIERUNEK(Enum):
GORA = 0
DOL = 1
LEWO = 2
PRAWO = 3