Wózki nie najeżdżają na siebie. Dodanie funkcjonalności agentom.
This commit is contained in:
parent
e8aa87ff54
commit
90356ec6d8
127
agenci.py
127
agenci.py
@ -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 False
|
||||||
return True
|
elif self.poleStartoweGorne.kolumna in range(0, (self.krata.liczbaPolWPoziomie - 1) - (self.bokWPolach - 1)):
|
||||||
return False
|
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
|
|
||||||
|
68
main.py
68
main.py
@ -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))
|
random.randint(0, LICZBA_POL_W_POZIOMIE - BOK_AGENTA1_W_POLACH))
|
||||||
if a.droga == 0:
|
pom = 'test1_ikona.png'
|
||||||
a.obierzNowyKierunek()
|
ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', pom)),
|
||||||
a.okreslDlugoscDrogi()
|
(BOK_AGENTA1, BOK_AGENTA1))
|
||||||
# a.ruszSie(Agenci1)
|
nowy_agent = Agent(Krata, pole_lewe_gorne, ikona, Kierunek.GORA, 0)
|
||||||
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))
|
|
||||||
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'
|
|
||||||
ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', pom)),
|
|
||||||
(BOK_AGENTA1, BOK_AGENTA1))
|
|
||||||
nowy_agent = Agent1(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()
|
||||||
|
|
||||||
|
|
||||||
|
8
stale.py
8
stale.py
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user