diff --git a/.idea/Sztuczna_Inteligencja_Gr16.iml b/.idea/Sztuczna_Inteligencja_Gr16.iml index f754d4e..eeb3c1e 100644 --- a/.idea/Sztuczna_Inteligencja_Gr16.iml +++ b/.idea/Sztuczna_Inteligencja_Gr16.iml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 89fb180..94f623a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/Ikony/forklift.png b/Ikony/forklift.png deleted file mode 100644 index 0ac059f..0000000 Binary files a/Ikony/forklift.png and /dev/null differ diff --git a/agenci.py b/agenci.py index 509f288..6b22093 100644 --- a/agenci.py +++ b/agenci.py @@ -1,11 +1,17 @@ import random +import pygame + from stale import * class Agent1: - def __init__(self, hitbox, tekstura, kierunek, droga): - self.hitbox = hitbox + bok = BOK_AGENTA1 + bok_w_polach = BOK_AGENTA1_W_POLACH + + def __init__(self, pole_lewe_gorne, tekstura, kierunek, droga): + self.pole_lewe_gorne = pole_lewe_gorne + self.hitbox = pygame.Rect(self.pole_lewe_gorne.x_lewego_boku, self.pole_lewe_gorne.y_gory, self.bok, self.bok) self.tekstura = tekstura self.kierunek = kierunek self.droga = droga @@ -93,3 +99,8 @@ class Agent1: self.kierunek = KIERUNEK.PRAWO elif self.kierunek == KIERUNEK.PRAWO: 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[wiersz][kolumna] = POLE.AGENT diff --git a/main.py b/main.py index 2a2409e..5f859b9 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,5 @@ import os -import pygame - from agenci import * from stale import * @@ -9,18 +7,44 @@ OKNO = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA)) pygame.display.set_caption("Okno1") Agenci1 = [] +Krata = [] +for rzad in range(LICZBA_POL_W_PIONIE): + Krata.append([]) + for kolumna in range(LICZBA_POL_W_POZIOMIE): + Krata[rzad].append(POLE.PUSTE) -def wyswietl_okno(): - OKNO.fill(JASNOSZARY1) + +def wyswietl_krate(): + OKNO.fill(SZARY1) + for rzad in range(LICZBA_POL_W_PIONIE): + for kolumna in range(LICZBA_POL_W_POZIOMIE): + pygame.draw.rect(OKNO, BIALY, [(ODSTEP_MIEDZY_POLAMI + BOK_POLA) * kolumna + ODSTEP_MIEDZY_POLAMI, + (ODSTEP_MIEDZY_POLAMI + BOK_POLA) * rzad + ODSTEP_MIEDZY_POLAMI, + BOK_POLA, BOK_POLA]) + + +def wyswietl_agentow(): for a in Agenci1: OKNO.blit(a.tekstura, (a.hitbox.x, a.hitbox.y)) if a.droga == 0: a.obierzNowyKierunek() a.okreslDlugoscDrogi() - a.ruszSie(Agenci1) + # 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[wiersz][kolumna] != POLE.PUSTE: + wynik = False + break + if wynik == False: + break + return wynik + + def dodaj_agenta1(): los = None if len(Agenci1) in range(0, 40): @@ -36,17 +60,18 @@ def dodaj_agenta1(): elif los == 5 and len(Agenci1) > 6: pom = 'traktor_ikona.png' if pom != None: - x, y = random.randint(0, SZEROKOSC_OKNA - BOK_AGENTA1), random.randint(0, WYSOKOSC_OKNA - BOK_AGENTA1) - hitbox = pygame.Rect(x, y, BOK_AGENTA1, BOK_AGENTA1) - warunek = True - for a in Agenci1: - if a.hitbox.colliderect(hitbox): - warunek = False - break - if warunek: + 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(Agenci1) == 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)) - Agenci1.append(Agent1(hitbox, ikona, KIERUNEK.GORA, 0)) + nowy_agent = Agent1(pole_lewe_gorne, ikona, KIERUNEK.GORA, 0) + nowy_agent.zaznacz_zajmowane_pola_na_kracie(Krata) + Agenci1.append(nowy_agent) + # print(Krata) def main(): @@ -58,7 +83,8 @@ def main(): if event.type == pygame.QUIT: warunek_dzialania = False break - wyswietl_okno() + wyswietl_krate() + wyswietl_agentow() dodaj_agenta1() pygame.quit() diff --git a/stale.py b/stale.py index 7e36106..1d8be71 100644 --- a/stale.py +++ b/stale.py @@ -1,12 +1,24 @@ from enum import Enum FPS = 120 + +# SZEROKOSC_OKNA = 1500 +# WYSOKOSC_OKNA = 750 + +LICZBA_POL_W_POZIOMIE = 60 +LICZBA_POL_W_PIONIE = 30 +BOK_POLA = 20 +ODSTEP_MIEDZY_POLAMI = 5 +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 + +BOK_AGENTA1_W_POLACH = 3 +BOK_AGENTA1 = BOK_AGENTA1_W_POLACH * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) - ODSTEP_MIEDZY_POLAMI KROK_AGENTA1 = 2 -SZEROKOSC_OKNA = 1280 -WYSOKOSC_OKNA = 960 -BOK_AGENTA1 = 100 + BIALY = (255, 255, 255) JASNOSZARY1 = (200, 200, 200) +SZARY1 = (150, 150, 150) ZIELONY1 = (26, 122, 26) @@ -15,3 +27,19 @@ class KIERUNEK(Enum): DOL = 1 LEWO = 2 PRAWO = 3 + + +class POLE(Enum): + PUSTE = 0 + AGENT = 1 + LAWA = 2 + + +class Pole(): + bok = BOK_POLA + + def __init__(self, wiersz, kolumna): + self.wiersz = wiersz + self.kolumna = kolumna + self.x_lewego_boku = (Pole.bok + ODSTEP_MIEDZY_POLAMI) * kolumna + ODSTEP_MIEDZY_POLAMI + self.y_gory = (Pole.bok + ODSTEP_MIEDZY_POLAMI) * wiersz + ODSTEP_MIEDZY_POLAMI