From 9ca4f821e1f86cdfebc270a2b46b6c592dd56523 Mon Sep 17 00:00:00 2001 From: Dominik Jagosz Date: Thu, 10 Mar 2022 19:41:05 +0100 Subject: [PATCH 1/6] =?UTF-8?q?Stworzenie=20kraty=20(prawdziwej,=20z=20pol?= =?UTF-8?q?ami).=20Losowanie=20na=20ni=C4=85=20agent=C3=B3w=20zajmuj=C4=85?= =?UTF-8?q?cych=20nxn=20p=C3=B3l.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/Sztuczna_Inteligencja_Gr16.iml | 2 +- .idea/misc.xml | 2 +- Ikony/forklift.png | Bin 1038 -> 0 bytes agenci.py | 15 ++++++- main.py | 56 ++++++++++++++++++++------- stale.py | 34 ++++++++++++++-- 6 files changed, 87 insertions(+), 22 deletions(-) delete mode 100644 Ikony/forklift.png 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 0ac059f3f8ebec210c462681335cc04b989155e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1038 zcmV+p1o8WcP)fM&uRo54kJ40*GK zvH`u^_TJ-%SvOf*qM!Fqo)6DC=YM|B%K>g{2~oV@d~43z1mq<(68fywLoY1_kO`=} z0X{@bWAXAw`#cSg7WTKr_S<&8n67Esgb-Z${g>}|B?a)wOq&Lz8c{mpcwlHE9$Bp`e$y9`7h07L)~F@>vZD0|B0a9%cy=*3u}B4uNF&A!aJ*-#63 zVR#B*uY=Q8ZmZev&}YUI0t5-g2T(46wE)(t!f=$hNAAqOBTy<;OJQsgiLFF@IMrdJ zp0Ap}v)NZQfl!*CIkxkOqJcFDZ@}Q9#X*~@(*fT%{6^;%>b{b7b1KCo%OjO_O~nu9 zU8tzZzo=_b`tZ+LE8)ik05H4&a5Agz#=hBH=QurnY`bMHVuNWK0BHd8EdUC)=FAO;(yl%8#r>)7ESF6v3Vt6R(+^d* z&8=HCpYs6#=~fNz>}ZYdI#wlBYZ~sk+l|5DG0cRnLYtqN1rWJ$7-$l} z*^hfY%iUQS885%^Fo+0m9ci(A^i$!$!TZ{sM8GcZIn-{rpcB9*v)XZKjbvd%{X^v_ z-n1U0;{m+-<|mM<>@*^g(HqC7umodoFl^teI+OysK1h(NL~uSO0AMgyyG%yG44Tm_ zD@UenQ3jl$bE{HOaQ>GelbE-*`wxB_ z|LcJA+NNfE%CaXnZpg*Jr7H+dU+Z4M16%xlzj1S&0sw>kUE?` 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 From e8aa87ff5469e01740c33ea57fe94b45343cc8b9 Mon Sep 17 00:00:00 2001 From: Dominik Jagosz Date: Mon, 21 Mar 2022 19:41:34 +0100 Subject: [PATCH 2/6] =?UTF-8?q?W=C3=B3zki=20nie=20naje=C5=BCd=C5=BCaj?= =?UTF-8?q?=C4=85=20na=20siebie.=20Dodanie=20funkcjonalno=C5=9Bci=20agento?= =?UTF-8?q?m.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/Sztuczna_Inteligencja_Gr16.iml | 2 +- .idea/misc.xml | 2 +- agenci.py | 13 +++++---- main.py | 40 +++++++++------------------- stale.py | 25 ----------------- 5 files changed, 23 insertions(+), 59 deletions(-) diff --git a/.idea/Sztuczna_Inteligencja_Gr16.iml b/.idea/Sztuczna_Inteligencja_Gr16.iml index eeb3c1e..74d515a 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 94f623a..89fb180 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/agenci.py b/agenci.py index 6b22093..2674685 100644 --- a/agenci.py +++ b/agenci.py @@ -1,6 +1,7 @@ import random import pygame +from enumy import * from stale import * @@ -8,6 +9,7 @@ from stale import * class Agent1: bok = BOK_AGENTA1 bok_w_polach = BOK_AGENTA1_W_POLACH + Agenci = [] def __init__(self, pole_lewe_gorne, tekstura, kierunek, droga): self.pole_lewe_gorne = pole_lewe_gorne @@ -15,6 +17,7 @@ class Agent1: self.tekstura = tekstura self.kierunek = kierunek self.droga = droga + Agent1.Agenci.append(self) def obierzNowyKierunek(self): self.kierunek = KIERUNEK(random.randint(0, 3)) @@ -59,13 +62,13 @@ class Agent1: else: self.droga = 0 - def czyWszedlesWInnegoAgenta(self, Agenci): - for a in Agenci: + def czyWszedlesWInnegoAgenta(self): + for a in self.Agenci: if a.hitbox.colliderect(self.hitbox) and a != self: return True return False - def ruszSie(self, Agenci): + def ruszSie(self): if self.kierunek == KIERUNEK.GORA: self.idzWGore() elif self.kierunek == KIERUNEK.DOL: @@ -74,7 +77,7 @@ class Agent1: self.idzWLewo() elif self.kierunek == KIERUNEK.PRAWO: self.idzWPrawo() - if self.czyWszedlesWInnegoAgenta(Agenci): + if self.czyWszedlesWInnegoAgenta(): self.cofnijSie() self.zawroc() self.okreslDlugoscDrogi() @@ -103,4 +106,4 @@ class Agent1: 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 + Krata.krata[wiersz][kolumna] = POLE.AGENT diff --git a/main.py b/main.py index 5f859b9..8b42107 100644 --- a/main.py +++ b/main.py @@ -1,30 +1,16 @@ import os +from klasy import * + from agenci import * -from stale import * 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_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]) +Krata = Krata(OKNO) def wyswietl_agentow(): - for a in Agenci1: + for a in Agent1.Agenci: OKNO.blit(a.tekstura, (a.hitbox.x, a.hitbox.y)) if a.droga == 0: a.obierzNowyKierunek() @@ -37,7 +23,7 @@ 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: + if Krata.krata[wiersz][kolumna] != POLE.PUSTE: wynik = False break if wynik == False: @@ -47,30 +33,30 @@ def czy_wylosowane_dla_agenta_pola_sa_puste(pole_lewe_gorne): def dodaj_agenta1(): los = None - if len(Agenci1) in range(0, 40): + if len(Agent1.Agenci) in range(0, 40): los = random.randint(1, 150) - elif len(Agenci1) in range(40, 50): + 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(Agenci1) == 0: + 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(Agenci1) > 6: + 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(Agenci1) == 0: + 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)), (BOK_AGENTA1, BOK_AGENTA1)) nowy_agent = Agent1(pole_lewe_gorne, ikona, KIERUNEK.GORA, 0) nowy_agent.zaznacz_zajmowane_pola_na_kracie(Krata) - Agenci1.append(nowy_agent) + Agent1.Agenci.append(nowy_agent) # print(Krata) @@ -83,7 +69,7 @@ def main(): if event.type == pygame.QUIT: warunek_dzialania = False break - wyswietl_krate() + Krata.wyswietl_krate() wyswietl_agentow() dodaj_agenta1() pygame.quit() diff --git a/stale.py b/stale.py index 1d8be71..daa130a 100644 --- a/stale.py +++ b/stale.py @@ -1,5 +1,3 @@ -from enum import Enum - FPS = 120 # SZEROKOSC_OKNA = 1500 @@ -20,26 +18,3 @@ BIALY = (255, 255, 255) JASNOSZARY1 = (200, 200, 200) SZARY1 = (150, 150, 150) ZIELONY1 = (26, 122, 26) - - -class KIERUNEK(Enum): - GORA = 0 - 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 From 90356ec6d83f3b152f00f500e7202fd7211a8888 Mon Sep 17 00:00:00 2001 From: Dominik Jagosz Date: Mon, 21 Mar 2022 22:05:28 +0100 Subject: [PATCH 3/6] =?UTF-8?q?W=C3=B3zki=20nie=20naje=C5=BCd=C5=BCaj?= =?UTF-8?q?=C4=85=20na=20siebie.=20Dodanie=20funkcjonalno=C5=9Bci=20agento?= =?UTF-8?q?m.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agenci.py | 127 +++++++++++++++++++++++++----------------------------- main.py | 68 ++++++----------------------- stale.py | 8 ++-- 3 files changed, 74 insertions(+), 129 deletions(-) diff --git a/agenci.py b/agenci.py index 2674685..74e470c 100644 --- a/agenci.py +++ b/agenci.py @@ -1,109 +1,98 @@ import random -import pygame -from enumy import * - -from stale import * +from klasy import * -class Agent1: +# poleKoncoweDolne -> wiersz+bokWPolach-1 kolumna+bokWPolach-1 +class Agent: bok = BOK_AGENTA1 - bok_w_polach = BOK_AGENTA1_W_POLACH - Agenci = [] + bokWPolach = 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) + def __init__(self, Krata, poleStartoweGorne, tekstura, kierunek, droga): + self.krata = Krata + self.poleStartoweGorne = poleStartoweGorne + self.okreslHitbox() + self.okreslPoleKoncoweDolne() self.tekstura = tekstura self.kierunek = kierunek 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): - self.kierunek = KIERUNEK(random.randint(0, 3)) + self.kierunek = Kierunek(random.randint(0, 3)) def okreslDlugoscDrogi(self): losowa_droga = None - if self.kierunek == KIERUNEK.GORA: - losowa_droga = random.randint(0, self.hitbox.y) - elif self.kierunek == KIERUNEK.DOL: - losowa_droga = random.randint(0, WYSOKOSC_OKNA - self.hitbox.y) - elif self.kierunek == KIERUNEK.LEWO: - losowa_droga = random.randint(0, self.hitbox.x) - elif self.kierunek == KIERUNEK.PRAWO: - losowa_droga = random.randint(0, SZEROKOSC_OKNA - self.hitbox.x) - self.droga = losowa_droga - losowa_droga % KROK_AGENTA1 + if self.kierunek == Kierunek.GORA: + losowa_droga = random.randint(0, self.poleStartoweGorne.wiersz) + elif self.kierunek == Kierunek.DOL: + losowa_droga = random.randint(0, (self.krata.liczbaPolPionowo - 1) - ( + self.poleStartoweGorne.wiersz + self.bokWPolach - 1)) + elif self.kierunek == Kierunek.LEWO: + losowa_droga = random.randint(0, self.poleStartoweGorne.kolumna) + elif self.kierunek == Kierunek.PRAWO: + losowa_droga = random.randint(0, (self.krata.liczbaPolPoziomo - 1) - ( + self.poleStartoweGorne.wiersz + self.bokWPolach - 1)) + self.droga = losowa_droga def idzWGore(self): - if self.hitbox.y - KROK_AGENTA1 > 0: - self.hitbox.y -= KROK_AGENTA1 - self.droga -= KROK_AGENTA1 - else: - self.droga = 0 + self.poleStartoweGorne.wiersz -= 1 def idzWDol(self): - if self.hitbox.y + KROK_AGENTA1 < WYSOKOSC_OKNA - self.hitbox.height: - self.hitbox.y += KROK_AGENTA1 - self.droga -= KROK_AGENTA1 - else: - self.droga = 0 + self.poleStartoweGorne.wiersz += 1 def idzWLewo(self): - if self.hitbox.x - KROK_AGENTA1 > 0: - self.hitbox.x -= KROK_AGENTA1 - self.droga -= KROK_AGENTA1 - else: - self.droga = 0 + self.poleStartoweGorne.kolumna -= 1 def idzWPrawo(self): - if self.hitbox.x + KROK_AGENTA1 < SZEROKOSC_OKNA - self.hitbox.width: - self.hitbox.x += KROK_AGENTA1 - self.droga -= KROK_AGENTA1 - else: - self.droga = 0 + self.poleStartoweGorne.kolumna += 1 - def czyWszedlesWInnegoAgenta(self): - for a in self.Agenci: - if a.hitbox.colliderect(self.hitbox) and a != self: - return True - return False + 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: + if self.kierunek == Kierunek.GORA: self.idzWGore() - elif self.kierunek == KIERUNEK.DOL: + elif self.kierunek == Kierunek.DOL: self.idzWDol() - elif self.kierunek == KIERUNEK.LEWO: + elif self.kierunek == Kierunek.LEWO: self.idzWLewo() - elif self.kierunek == KIERUNEK.PRAWO: + elif self.kierunek == Kierunek.PRAWO: self.idzWPrawo() - if self.czyWszedlesWInnegoAgenta(): + if self.wyszedlemPozaKrate(): self.cofnijSie() self.zawroc() self.okreslDlugoscDrogi() - # self.ruszSie(Agenci) def cofnijSie(self): - if self.kierunek == KIERUNEK.GORA: + if self.kierunek == Kierunek.GORA: self.idzWDol() - elif self.kierunek == KIERUNEK.DOL: + elif self.kierunek == Kierunek.DOL: self.idzWGore() - elif self.kierunek == KIERUNEK.LEWO: + elif self.kierunek == Kierunek.LEWO: self.idzWPrawo() - elif self.kierunek == KIERUNEK.PRAWO: + 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 - - 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 + 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 diff --git a/main.py b/main.py index 8b42107..6809479 100644 --- a/main.py +++ b/main.py @@ -1,63 +1,19 @@ import os -from klasy 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") -Krata = Krata(OKNO) +Krata = Krata(Okno) -def wyswietl_agentow(): - for a in Agent1.Agenci: - 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)) - 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 dodaj_agenta(): + pole_lewe_gorne = PoleKraty(Krata, random.randint(0, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH), + random.randint(0, LICZBA_POL_W_POZIOMIE - BOK_AGENTA1_W_POLACH)) + pom = 'test1_ikona.png' + ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', pom)), + (BOK_AGENTA1, BOK_AGENTA1)) + nowy_agent = Agent(Krata, pole_lewe_gorne, ikona, Kierunek.GORA, 0) def main(): @@ -69,9 +25,9 @@ def main(): if event.type == pygame.QUIT: warunek_dzialania = False break - Krata.wyswietl_krate() - wyswietl_agentow() - dodaj_agenta1() + Krata.wyswietlKrate() + dodaj_agenta() + Krata.wyswietlAgenta() pygame.quit() diff --git a/stale.py b/stale.py index daa130a..35dbd3d 100644 --- a/stale.py +++ b/stale.py @@ -1,12 +1,12 @@ -FPS = 120 +FPS = 1 # SZEROKOSC_OKNA = 1500 # WYSOKOSC_OKNA = 750 -LICZBA_POL_W_POZIOMIE = 60 -LICZBA_POL_W_PIONIE = 30 +LICZBA_POL_W_POZIOMIE = 80 +LICZBA_POL_W_PIONIE = 40 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 WYSOKOSC_OKNA = LICZBA_POL_W_PIONIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI From 2d05a136a0ace1cab1d0ff6e18106357726a22fa Mon Sep 17 00:00:00 2001 From: Dominik Jagosz Date: Mon, 21 Mar 2022 22:12:01 +0100 Subject: [PATCH 4/6] =?UTF-8?q?W=C3=B3zki=20nie=20naje=C5=BCd=C5=BCaj?= =?UTF-8?q?=C4=85=20na=20siebie.=20Dodanie=20funkcjonalno=C5=9Bci=20agento?= =?UTF-8?q?m.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agenci.py => agent.py | 5 ++-- enumy.py | 14 +++++++++ klasy.py | 68 +++++++++++++++++++++++++++++++++++++++++++ main.py | 4 +-- stale.py | 6 ++-- 5 files changed, 89 insertions(+), 8 deletions(-) rename agenci.py => agent.py (93%) create mode 100644 enumy.py create mode 100644 klasy.py diff --git a/agenci.py b/agent.py similarity index 93% rename from agenci.py rename to agent.py index 74e470c..9ad45a0 100644 --- a/agenci.py +++ b/agent.py @@ -3,7 +3,6 @@ import random from klasy import * -# poleKoncoweDolne -> wiersz+bokWPolach-1 kolumna+bokWPolach-1 class Agent: bok = BOK_AGENTA1 bokWPolach = BOK_AGENTA1_W_POLACH @@ -35,12 +34,12 @@ class Agent: losowa_droga = random.randint(0, self.poleStartoweGorne.wiersz) elif self.kierunek == Kierunek.DOL: losowa_droga = random.randint(0, (self.krata.liczbaPolPionowo - 1) - ( - self.poleStartoweGorne.wiersz + self.bokWPolach - 1)) + self.poleStartoweGorne.wiersz + self.bokWPolach - 1)) elif self.kierunek == Kierunek.LEWO: losowa_droga = random.randint(0, self.poleStartoweGorne.kolumna) elif self.kierunek == Kierunek.PRAWO: losowa_droga = random.randint(0, (self.krata.liczbaPolPoziomo - 1) - ( - self.poleStartoweGorne.wiersz + self.bokWPolach - 1)) + self.poleStartoweGorne.wiersz + self.bokWPolach - 1)) self.droga = losowa_droga def idzWGore(self): diff --git a/enumy.py b/enumy.py new file mode 100644 index 0000000..7c52fa5 --- /dev/null +++ b/enumy.py @@ -0,0 +1,14 @@ +from enum import Enum + + +class Kierunek(Enum): + GORA = 0 + DOL = 1 + LEWO = 2 + PRAWO = 3 + + +class ZawartoscPola(Enum): + PUSTE = 0 + AGENT = 1 + LAWA = 2 diff --git a/klasy.py b/klasy.py new file mode 100644 index 0000000..ec19f2e --- /dev/null +++ b/klasy.py @@ -0,0 +1,68 @@ +import pygame + +from enumy import * +from stale import * + + +class PoleKraty: + def __init__(self, Krata, wiersz, kolumna): + self.krata = Krata + self.bok = self.krata.bokPola + self._wiersz = wiersz + self._kolumna = kolumna + self.okreslGore() + self.okreslStart() + + def okreslGore(self): + self.gora = (self.bok + self.krata.odstepMiedzyPolami) * self.wiersz + self.krata.odstepMiedzyPolami + + def okreslStart(self): + self.start = (self.bok + self.krata.odstepMiedzyPolami) * self.kolumna + self.krata.odstepMiedzyPolami + + def getWiersz(self): + return self._wiersz + + def setWiersz(self, x): + self._wiersz = x + self.okreslGore() + + def getKolumna(self): + return self._kolumna + + def setKolumna(self, x): + self._kolumna = x + self.okreslStart() + + wiersz = property(getWiersz, setWiersz) + kolumna = property(getKolumna, setKolumna) + + +class Krata: + def __init__(self, okno): + self.okno = okno + self.liczbaPolPoziomo = LICZBA_POL_W_POZIOMIE + self.liczbaPolPionowo = LICZBA_POL_W_PIONIE + self.bokPola = BOK_POLA + self.odstepMiedzyPolami = ODSTEP_MIEDZY_POLAMI + self.krata = self.utworzPustaKrate() + self.agent = None + + def utworzPustaKrate(self): + self.krata = [] + for rzad in range(self.liczbaPolPionowo): + self.krata.append([]) + for kolumna in range(self.liczbaPolPoziomo): + self.krata[rzad].append(ZawartoscPola.PUSTE) + + def wyswietlKrate(self): + self.okno.fill(SZARY1) + for rzad in range(self.liczbaPolPionowo): + for kolumna in range(self.liczbaPolPoziomo): + start = (self.odstepMiedzyPolami + self.bokPola) * kolumna + self.odstepMiedzyPolami + gora = (self.odstepMiedzyPolami + self.bokPola) * rzad + self.odstepMiedzyPolami + pygame.draw.rect(self.okno, BIALY, [start, gora, self.bokPola, self.bokPola]) + pygame.display.update() + + def wyswietlAgenta(self): + self.okno.blit(self.agent.tekstura, (self.agent.hitbox.x, self.agent.hitbox.y)) + pygame.display.update() diff --git a/main.py b/main.py index 6809479..bb49d65 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ import os -from agenci import * +from agent import * Okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA)) pygame.display.set_caption("Okno1") @@ -13,7 +13,7 @@ def dodaj_agenta(): pom = 'test1_ikona.png' ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', pom)), (BOK_AGENTA1, BOK_AGENTA1)) - nowy_agent = Agent(Krata, pole_lewe_gorne, ikona, Kierunek.GORA, 0) + Agent(Krata, pole_lewe_gorne, ikona, Kierunek.GORA, 0) def main(): diff --git a/stale.py b/stale.py index 35dbd3d..34371f8 100644 --- a/stale.py +++ b/stale.py @@ -3,10 +3,10 @@ FPS = 1 # SZEROKOSC_OKNA = 1500 # WYSOKOSC_OKNA = 750 -LICZBA_POL_W_POZIOMIE = 80 -LICZBA_POL_W_PIONIE = 40 +LICZBA_POL_W_POZIOMIE = 60 +LICZBA_POL_W_PIONIE = 30 BOK_POLA = 20 -ODSTEP_MIEDZY_POLAMI = 1 +ODSTEP_MIEDZY_POLAMI = 2 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 From adece3ebc95182ebf24a6bff5d11191eafdaa720 Mon Sep 17 00:00:00 2001 From: Dominik Jagosz Date: Mon, 21 Mar 2022 22:13:57 +0100 Subject: [PATCH 5/6] =?UTF-8?q?Poprawa=20struktury=20kodu.=20Ograniczenie?= =?UTF-8?q?=20si=C4=99=20do=20jednego=20agenta.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index bb49d65..f2c2136 100644 --- a/main.py +++ b/main.py @@ -6,7 +6,7 @@ Okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA)) pygame.display.set_caption("Okno1") Krata = Krata(Okno) - +# def dodaj_agenta(): pole_lewe_gorne = PoleKraty(Krata, random.randint(0, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH), random.randint(0, LICZBA_POL_W_POZIOMIE - BOK_AGENTA1_W_POLACH)) From 21fccb422fded0e234910ad0ff7fd9ab73aaa042 Mon Sep 17 00:00:00 2001 From: Dominik Jagosz Date: Tue, 22 Mar 2022 11:20:58 +0100 Subject: [PATCH 6/6] =?UTF-8?q?Agent=20porusza=20si=C4=99=20losowo=20po=20?= =?UTF-8?q?kracie=20zajmuj=C4=85c=209=20p=C3=B3l.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent.py | 138 +++++++++++++++++++++++++------------------ klasy.py => krata.py | 13 ++-- main.py | 6 +- stale.py | 2 +- 4 files changed, 92 insertions(+), 67 deletions(-) rename klasy.py => krata.py (88%) diff --git a/agent.py b/agent.py index 9ad45a0..ec82f44 100644 --- a/agent.py +++ b/agent.py @@ -1,22 +1,49 @@ import random -from klasy import * +from krata import * class Agent: bok = BOK_AGENTA1 bokWPolach = BOK_AGENTA1_W_POLACH - def __init__(self, Krata, poleStartoweGorne, tekstura, kierunek, droga): + def __init__(self, Krata, poleStartoweGorne, tekstura): self.krata = Krata self.poleStartoweGorne = poleStartoweGorne - self.okreslHitbox() - self.okreslPoleKoncoweDolne() self.tekstura = tekstura - self.kierunek = kierunek - self.droga = droga + self.okreslPolozenie() + self.obierzNowyKierunek() + self.okreslDlugoscDrogi() 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): 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 self.poleKoncoweDolne = PoleKraty(self.krata, wiersz, kolumna) - def obierzNowyKierunek(self): - self.kierunek = Kierunek(random.randint(0, 3)) + def wyszedlemPozaKrate(self): + 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): - losowa_droga = None + def zawroc(self): if self.kierunek == Kierunek.GORA: - losowa_droga = random.randint(0, self.poleStartoweGorne.wiersz) + self.kierunek = Kierunek.DOL elif self.kierunek == Kierunek.DOL: - losowa_droga = random.randint(0, (self.krata.liczbaPolPionowo - 1) - ( - self.poleStartoweGorne.wiersz + self.bokWPolach - 1)) + self.kierunek = Kierunek.GORA elif self.kierunek == Kierunek.LEWO: - losowa_droga = random.randint(0, self.poleStartoweGorne.kolumna) + self.kierunek = Kierunek.PRAWO elif self.kierunek == Kierunek.PRAWO: - losowa_droga = random.randint(0, (self.krata.liczbaPolPoziomo - 1) - ( - self.poleStartoweGorne.wiersz + self.bokWPolach - 1)) - self.droga = losowa_droga + self.kierunek = Kierunek.LEWO + + 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): self.poleStartoweGorne.wiersz -= 1 @@ -53,45 +115,3 @@ class Agent: def idzWPrawo(self): 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 diff --git a/klasy.py b/krata.py similarity index 88% rename from klasy.py rename to krata.py index ec19f2e..ba69cfd 100644 --- a/klasy.py +++ b/krata.py @@ -55,14 +55,19 @@ class Krata: self.krata[rzad].append(ZawartoscPola.PUSTE) def wyswietlKrate(self): + self.narysujKrate() + self.narysujAgenta() + pygame.display.update() + + def narysujKrate(self): self.okno.fill(SZARY1) for rzad in range(self.liczbaPolPionowo): for kolumna in range(self.liczbaPolPoziomo): start = (self.odstepMiedzyPolami + self.bokPola) * kolumna + self.odstepMiedzyPolami gora = (self.odstepMiedzyPolami + self.bokPola) * rzad + self.odstepMiedzyPolami pygame.draw.rect(self.okno, BIALY, [start, gora, self.bokPola, self.bokPola]) - pygame.display.update() - def wyswietlAgenta(self): - self.okno.blit(self.agent.tekstura, (self.agent.hitbox.x, self.agent.hitbox.y)) - pygame.display.update() + def narysujAgenta(self): + if self.agent is not None: + self.okno.blit(self.agent.tekstura, (self.agent.hitbox.x, self.agent.hitbox.y)) + self.agent.ruszSie() diff --git a/main.py b/main.py index f2c2136..ef5b553 100644 --- a/main.py +++ b/main.py @@ -6,6 +6,7 @@ Okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA)) pygame.display.set_caption("Okno1") Krata = Krata(Okno) + # def dodaj_agenta(): 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' ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', pom)), (BOK_AGENTA1, BOK_AGENTA1)) - Agent(Krata, pole_lewe_gorne, ikona, Kierunek.GORA, 0) + Agent(Krata, pole_lewe_gorne, ikona) def main(): + dodaj_agenta() klatkaz = pygame.time.Clock() warunek_dzialania = True while warunek_dzialania: @@ -26,8 +28,6 @@ def main(): warunek_dzialania = False break Krata.wyswietlKrate() - dodaj_agenta() - Krata.wyswietlAgenta() pygame.quit() diff --git a/stale.py b/stale.py index 34371f8..e82829d 100644 --- a/stale.py +++ b/stale.py @@ -1,4 +1,4 @@ -FPS = 1 +FPS = 10 # SZEROKOSC_OKNA = 1500 # WYSOKOSC_OKNA = 750