diff --git a/.idea/Sztuczna_Inteligencja_Gr16.iml b/.idea/Sztuczna_Inteligencja_Gr16.iml index f754d4e..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/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/agent.py b/agent.py deleted file mode 100644 index 509f288..0000000 --- a/agent.py +++ /dev/null @@ -1,95 +0,0 @@ -import random - -from stale import * - - -class Agent1: - def __init__(self, hitbox, tekstura, kierunek, droga): - self.hitbox = hitbox - self.tekstura = tekstura - self.kierunek = kierunek - self.droga = droga - - def obierzNowyKierunek(self): - 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 - - def idzWGore(self): - if self.hitbox.y - KROK_AGENTA1 > 0: - self.hitbox.y -= KROK_AGENTA1 - self.droga -= KROK_AGENTA1 - else: - self.droga = 0 - - 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 - - def idzWLewo(self): - if self.hitbox.x - KROK_AGENTA1 > 0: - self.hitbox.x -= KROK_AGENTA1 - self.droga -= KROK_AGENTA1 - else: - self.droga = 0 - - 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 - - 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 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/krata.py b/krata.py new file mode 100644 index 0000000..ba69cfd --- /dev/null +++ b/krata.py @@ -0,0 +1,73 @@ +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.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]) + + 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 f880f93..ef5b553 100644 --- a/main.py +++ b/main.py @@ -1,68 +1,24 @@ import os -import pygame from agent import * -from stale import * -import stale -OKNO = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA)) +Okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA)) pygame.display.set_caption("Okno1") -Agenci1 = [] - -def kratka(surface): - for i in range(stale.NUMBER_OF_BLOCKS_WIDE): - new_height=round(i*BLOCK_HEIGHT) - new_width =round(i*BLOCK_HEIGHT) - pygame.draw.line(surface, BLACK,(0,new_height),(SZEROKOSC_OKNA,new_height),2) - pygame.draw.line(surface,BLACK,(new_width,0),(new_width,WYSOKOSC_OKNA),2) - -def wyswietl_okno(): - OKNO.fill(JASNOSZARY1) - 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) - kratka(OKNO) - pygame.display.update() +Krata = Krata(Okno) -def dodaj_agenta1(): - los = None - if len(Agenci1) in range(0, 1): - los = random.randint(1, 15) - if los != None: - pom = None - if los in (1, 2) or len(Agenci1) == 0: - pom = 'wozek.png' - elif los in (3, 4): - pom = 'wozek_ze_skrzynka.png' - 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: - ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', pom)), - (BOK_AGENTA1, BOK_AGENTA1)) - Agenci1.append(Agent1(hitbox, ikona, KIERUNEK.GORA, 0)) +# +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)) + Agent(Krata, pole_lewe_gorne, ikona) -def dodaj_agenta2(): - los = None - if len(Agenci1) in range(0, 1): - los = random.randint(1, 15) - pom = 'wozek.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) def main(): + dodaj_agenta() klatkaz = pygame.time.Clock() warunek_dzialania = True while warunek_dzialania: @@ -71,8 +27,7 @@ def main(): if event.type == pygame.QUIT: warunek_dzialania = False break - wyswietl_okno() - dodaj_agenta1() + Krata.wyswietlKrate() pygame.quit() diff --git a/stale.py b/stale.py index 9ec458f..62d8244 100644 --- a/stale.py +++ b/stale.py @@ -1,13 +1,24 @@ -from enum import Enum +FPS = 10 -FPS = 120 +# SZEROKOSC_OKNA = 1500 +# WYSOKOSC_OKNA = 750 + +LICZBA_POL_W_POZIOMIE = 60 +LICZBA_POL_W_PIONIE = 30 +BOK_POLA = 20 +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 + +BOK_AGENTA1_W_POLACH = 3 +BOK_AGENTA1 = BOK_AGENTA1_W_POLACH * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) - ODSTEP_MIEDZY_POLAMI KROK_AGENTA1 = 2 -SZEROKOSC_OKNA = 1080 -WYSOKOSC_OKNA = 760 -BOK_AGENTA1 = 100 + BIALY = (255, 255, 255) JASNOSZARY1 = (200, 200, 200) +SZARY1 = (150, 150, 150) ZIELONY1 = (26, 122, 26) + GREY =(150,150,150) RED =(255,0,0) BLUE=(55,55,255) @@ -24,10 +35,4 @@ NUMBER_OF_BLOCKS_HIGH=8 BLOCK_HEIGHT=round(SZEROKOSC_OKNA/NUMBER_OF_BLOCKS_HIGH) BLOCK_WIDTH=round(WYSOKOSC_OKNA/NUMBER_OF_BLOCKS_WIDE) MAPFILE="map.txt" -TITLE ="Gierka" - -class KIERUNEK(Enum): - GORA = 0 - DOL = 1 - LEWO = 2 - PRAWO = 3 +TITLE ="Gierka" \ No newline at end of file