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

This commit is contained in:
Dominik Jagosz 2022-03-21 22:05:28 +01:00
parent e8aa87ff54
commit 90356ec6d8
3 changed files with 74 additions and 129 deletions

125
agenci.py
View File

@ -1,109 +1,98 @@
import random import random
import pygame from klasy import *
from enumy import *
from stale import *
class Agent1: # poleKoncoweDolne -> wiersz+bokWPolach-1 kolumna+bokWPolach-1
class Agent:
bok = BOK_AGENTA1 bok = BOK_AGENTA1
bok_w_polach = BOK_AGENTA1_W_POLACH bokWPolach = BOK_AGENTA1_W_POLACH
Agenci = []
def __init__(self, pole_lewe_gorne, tekstura, kierunek, droga): def __init__(self, Krata, poleStartoweGorne, tekstura, kierunek, droga):
self.pole_lewe_gorne = pole_lewe_gorne self.krata = Krata
self.hitbox = pygame.Rect(self.pole_lewe_gorne.x_lewego_boku, self.pole_lewe_gorne.y_gory, self.bok, self.bok) self.poleStartoweGorne = poleStartoweGorne
self.okreslHitbox()
self.okreslPoleKoncoweDolne()
self.tekstura = tekstura self.tekstura = tekstura
self.kierunek = kierunek self.kierunek = kierunek
self.droga = droga self.droga = droga
Agent1.Agenci.append(self) Krata.agent = self
def okreslHitbox(self):
self.hitbox = pygame.Rect(self.poleStartoweGorne.start, self.poleStartoweGorne.gora, self.bok, self.bok)
def okreslPoleKoncoweDolne(self):
wiersz = self.poleStartoweGorne.wiersz + self.bokWPolach - 1
kolumna = self.poleStartoweGorne.kolumna + self.bokWPolach - 1
self.poleKoncoweDolne = PoleKraty(self.krata, wiersz, kolumna)
def obierzNowyKierunek(self): def obierzNowyKierunek(self):
self.kierunek = KIERUNEK(random.randint(0, 3)) self.kierunek = Kierunek(random.randint(0, 3))
def okreslDlugoscDrogi(self): 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.poleStartoweGorne.wiersz)
elif self.kierunek == KIERUNEK.DOL: elif self.kierunek == Kierunek.DOL:
losowa_droga = random.randint(0, WYSOKOSC_OKNA - self.hitbox.y) losowa_droga = random.randint(0, (self.krata.liczbaPolPionowo - 1) - (
elif self.kierunek == KIERUNEK.LEWO: self.poleStartoweGorne.wiersz + self.bokWPolach - 1))
losowa_droga = random.randint(0, self.hitbox.x) elif self.kierunek == Kierunek.LEWO:
elif self.kierunek == KIERUNEK.PRAWO: losowa_droga = random.randint(0, self.poleStartoweGorne.kolumna)
losowa_droga = random.randint(0, SZEROKOSC_OKNA - self.hitbox.x) elif self.kierunek == Kierunek.PRAWO:
self.droga = losowa_droga - losowa_droga % KROK_AGENTA1 losowa_droga = random.randint(0, (self.krata.liczbaPolPoziomo - 1) - (
self.poleStartoweGorne.wiersz + self.bokWPolach - 1))
self.droga = losowa_droga
def idzWGore(self): def idzWGore(self):
if self.hitbox.y - KROK_AGENTA1 > 0: self.poleStartoweGorne.wiersz -= 1
self.hitbox.y -= KROK_AGENTA1
self.droga -= KROK_AGENTA1
else:
self.droga = 0
def idzWDol(self): def idzWDol(self):
if self.hitbox.y + KROK_AGENTA1 < WYSOKOSC_OKNA - self.hitbox.height: self.poleStartoweGorne.wiersz += 1
self.hitbox.y += KROK_AGENTA1
self.droga -= KROK_AGENTA1
else:
self.droga = 0
def idzWLewo(self): def idzWLewo(self):
if self.hitbox.x - KROK_AGENTA1 > 0: self.poleStartoweGorne.kolumna -= 1
self.hitbox.x -= KROK_AGENTA1
self.droga -= KROK_AGENTA1
else:
self.droga = 0
def idzWPrawo(self): def idzWPrawo(self):
if self.hitbox.x + KROK_AGENTA1 < SZEROKOSC_OKNA - self.hitbox.width: self.poleStartoweGorne.kolumna += 1
self.hitbox.x += KROK_AGENTA1
self.droga -= KROK_AGENTA1
else:
self.droga = 0
def czyWszedlesWInnegoAgenta(self): def wyszedlemPozaKrate(self):
for a in self.Agenci: if self.poleStartoweGorne.wiersz not in range(0, (self.krata.liczbaPolWPionie - 1) - (self.bokWPolach - 1)):
if a.hitbox.colliderect(self.hitbox) and a != self:
return True
return False return False
elif self.poleStartoweGorne.kolumna in range(0, (self.krata.liczbaPolWPoziomie - 1) - (self.bokWPolach - 1)):
return False
else:
return True
def ruszSie(self): def ruszSie(self):
if self.kierunek == KIERUNEK.GORA: if self.kierunek == Kierunek.GORA:
self.idzWGore() self.idzWGore()
elif self.kierunek == KIERUNEK.DOL: elif self.kierunek == Kierunek.DOL:
self.idzWDol() self.idzWDol()
elif self.kierunek == KIERUNEK.LEWO: elif self.kierunek == Kierunek.LEWO:
self.idzWLewo() self.idzWLewo()
elif self.kierunek == KIERUNEK.PRAWO: elif self.kierunek == Kierunek.PRAWO:
self.idzWPrawo() self.idzWPrawo()
if self.czyWszedlesWInnegoAgenta(): if self.wyszedlemPozaKrate():
self.cofnijSie() self.cofnijSie()
self.zawroc() self.zawroc()
self.okreslDlugoscDrogi() self.okreslDlugoscDrogi()
# self.ruszSie(Agenci)
def cofnijSie(self): def cofnijSie(self):
if self.kierunek == KIERUNEK.GORA: if self.kierunek == Kierunek.GORA:
self.idzWDol() self.idzWDol()
elif self.kierunek == KIERUNEK.DOL: elif self.kierunek == Kierunek.DOL:
self.idzWGore() self.idzWGore()
elif self.kierunek == KIERUNEK.LEWO: elif self.kierunek == Kierunek.LEWO:
self.idzWPrawo() self.idzWPrawo()
elif self.kierunek == KIERUNEK.PRAWO: elif self.kierunek == Kierunek.PRAWO:
self.idzWLewo() self.idzWLewo()
def zawroc(self): def zawroc(self):
if self.kierunek == KIERUNEK.GORA: if self.kierunek == Kierunek.GORA:
self.kierunek = KIERUNEK.DOL self.kierunek = Kierunek.DOL
elif self.kierunek == KIERUNEK.DOL: elif self.kierunek == Kierunek.DOL:
self.kierunek = KIERUNEK.GORA self.kierunek = Kierunek.GORA
elif self.kierunek == KIERUNEK.LEWO: elif self.kierunek == Kierunek.LEWO:
self.kierunek = KIERUNEK.PRAWO self.kierunek = Kierunek.PRAWO
elif self.kierunek == KIERUNEK.PRAWO: elif self.kierunek == Kierunek.PRAWO:
self.kierunek = KIERUNEK.LEWO self.kierunek = Kierunek.LEWO
def zaznacz_zajmowane_pola_na_kracie(self, Krata):
for wiersz in range(self.pole_lewe_gorne.wiersz, self.pole_lewe_gorne.wiersz + self.bok_w_polach):
for kolumna in range(self.pole_lewe_gorne.kolumna, self.pole_lewe_gorne.kolumna + self.bok_w_polach):
Krata.krata[wiersz][kolumna] = POLE.AGENT

60
main.py
View File

@ -1,63 +1,19 @@
import os import os
from klasy import *
from agenci import * from agenci 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")
Krata = Krata(OKNO) Krata = Krata(Okno)
def wyswietl_agentow(): def dodaj_agenta():
for a in Agent1.Agenci: pole_lewe_gorne = PoleKraty(Krata, random.randint(0, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH),
OKNO.blit(a.tekstura, (a.hitbox.x, a.hitbox.y))
if a.droga == 0:
a.obierzNowyKierunek()
a.okreslDlugoscDrogi()
# a.ruszSie(Agenci1)
pygame.display.update()
def czy_wylosowane_dla_agenta_pola_sa_puste(pole_lewe_gorne):
wynik = True
for wiersz in range(pole_lewe_gorne.wiersz, pole_lewe_gorne.wiersz + BOK_AGENTA1_W_POLACH):
for kolumna in range(pole_lewe_gorne.kolumna, pole_lewe_gorne.kolumna + BOK_AGENTA1_W_POLACH):
if Krata.krata[wiersz][kolumna] != POLE.PUSTE:
wynik = False
break
if wynik == False:
break
return wynik
def dodaj_agenta1():
los = None
if len(Agent1.Agenci) in range(0, 40):
los = random.randint(1, 150)
elif len(Agent1.Agenci) in range(40, 50):
los = random.randint(1, 15)
if los != None:
pom = None
if los in (1, 2) or len(Agent1.Agenci) == 0:
pom = 'wozek.png'
elif los in (3, 4):
pom = 'wozek_ze_skrzynka.png'
elif los == 5 and len(Agent1.Agenci) > 6:
pom = 'traktor_ikona.png'
if pom != None:
pole_lewe_gorne = Pole(random.randint(0, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH),
random.randint(0, LICZBA_POL_W_POZIOMIE - BOK_AGENTA1_W_POLACH)) random.randint(0, LICZBA_POL_W_POZIOMIE - BOK_AGENTA1_W_POLACH))
if len(Agent1.Agenci) == 0:
pole_lewe_gorne = Pole(0, 0)
if czy_wylosowane_dla_agenta_pola_sa_puste(pole_lewe_gorne):
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))
nowy_agent = Agent1(pole_lewe_gorne, ikona, KIERUNEK.GORA, 0) nowy_agent = Agent(Krata, pole_lewe_gorne, ikona, Kierunek.GORA, 0)
nowy_agent.zaznacz_zajmowane_pola_na_kracie(Krata)
Agent1.Agenci.append(nowy_agent)
# print(Krata)
def main(): def main():
@ -69,9 +25,9 @@ def main():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
warunek_dzialania = False warunek_dzialania = False
break break
Krata.wyswietl_krate() Krata.wyswietlKrate()
wyswietl_agentow() dodaj_agenta()
dodaj_agenta1() Krata.wyswietlAgenta()
pygame.quit() pygame.quit()

View File

@ -1,12 +1,12 @@
FPS = 120 FPS = 1
# SZEROKOSC_OKNA = 1500 # SZEROKOSC_OKNA = 1500
# WYSOKOSC_OKNA = 750 # WYSOKOSC_OKNA = 750
LICZBA_POL_W_POZIOMIE = 60 LICZBA_POL_W_POZIOMIE = 80
LICZBA_POL_W_PIONIE = 30 LICZBA_POL_W_PIONIE = 40
BOK_POLA = 20 BOK_POLA = 20
ODSTEP_MIEDZY_POLAMI = 5 ODSTEP_MIEDZY_POLAMI = 1
SZEROKOSC_OKNA = LICZBA_POL_W_POZIOMIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI SZEROKOSC_OKNA = LICZBA_POL_W_POZIOMIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI
WYSOKOSC_OKNA = LICZBA_POL_W_PIONIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI WYSOKOSC_OKNA = LICZBA_POL_W_PIONIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI