diff --git a/.idea/Sztuczna_Inteligencja_Gr16.iml b/.idea/Sztuczna_Inteligencja_Gr16.iml
index 2f5c6a2..f754d4e 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 f65f09f..89fb180 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
diff --git a/agent.py b/agent.py
index df6ce6b..db4b854 100644
--- a/agent.py
+++ b/agent.py
@@ -1,24 +1,28 @@
import random
+from collections import deque
+from bfs import Stan, Akcja, graphsearch
from krata import *
class Agent:
+ cel: Stan
bok = BOK_AGENTA1
bokWPolach = BOK_AGENTA1_W_POLACH
- def __init__(self, Krata, poleStartoweGorne, tekstura):
+ def __init__(self, Krata, poleStartoweGorne: PoleKraty, tekstura):
self.krata = Krata
self.poleStartoweGorne = poleStartoweGorne
self.tekstura = tekstura
self.okreslPolozenie()
- self.obierzNowyKierunek()
+ self.obierzLosowyKierunek()
self.okreslDlugoscDrogi()
Krata.agent = self
+ self.cel = None
def ruszSie(self):
if self.droga <= 0:
- self.obierzNowyKierunek()
+ self.obierzLosowyKierunek()
self.okreslDlugoscDrogi()
self.zrobKrokWMoimKierunku()
self.droga -= 1
@@ -28,10 +32,10 @@ class Agent:
self.zawroc()
self.okreslDlugoscDrogi()
- def obierzNowyKierunek(self):
+ def obierzLosowyKierunek(self):
self.kierunek = Kierunek(random.randint(0, 3))
if self.maxDlugoscDrogiWMoimKierunku() < 1:
- self.obierzNowyKierunek()
+ self.obierzLosowyKierunek()
def okreslDlugoscDrogi(self):
self.droga = random.randint(1, self.maxDlugoscDrogiWMoimKierunku())
@@ -66,75 +70,115 @@ class Agent:
# ZROBIC sciany
def wszedlemWSciane(self):
- for wiersz in range (self.poleStartoweGorne.wiersz,self.poleKoncoweDolne.wiersz+1):
- for kolumna in range(self.poleStartoweGorne.kolumna,self.poleKoncoweDolne.kolumna+1):
- if self.krata.krata[wiersz][kolumna]==ZawartoscPola.SCIANA:
- return True
+ for wiersz in range(self.poleStartoweGorne.wiersz, self.poleKoncoweDolne.wiersz + 1):
+ for kolumna in range(self.poleStartoweGorne.kolumna, self.poleKoncoweDolne.kolumna + 1):
+ if self.krata.krata[wiersz][kolumna] == ZawartoscPola.SCIANA:
+ return True
return False
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
+ if self.kierunek == Kierunek.POLNOC:
+ self.kierunek = Kierunek.POLUDNIE
+ elif self.kierunek == Kierunek.POLUDNIE:
+ self.kierunek = Kierunek.POLNOC
+ elif self.kierunek == Kierunek.ZACHOD:
+ self.kierunek = Kierunek.WSCHOD
+ elif self.kierunek == Kierunek.WSCHOD:
+ self.kierunek = Kierunek.ZACHOD
def maxDlugoscDrogiWMoimKierunku(self):
- if self.kierunek == Kierunek.GORA:
+ if self.kierunek == Kierunek.POLNOC:
return self.poleStartoweGorne.wiersz
- elif self.kierunek == Kierunek.DOL:
+ elif self.kierunek == Kierunek.POLUDNIE:
return self.krata.liczbaPolPionowo - self.poleKoncoweDolne.wiersz - 1
- elif self.kierunek == Kierunek.LEWO:
+ elif self.kierunek == Kierunek.ZACHOD:
return self.poleStartoweGorne.kolumna
- elif self.kierunek == Kierunek.PRAWO:
+ elif self.kierunek == Kierunek.WSCHOD:
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()
+ if self.kierunek == Kierunek.POLNOC:
+ self.idzNaPolnoc()
+ elif self.kierunek == Kierunek.POLUDNIE:
+ self.idzNaPoludnie()
+ elif self.kierunek == Kierunek.ZACHOD:
+ self.idzNaZachod()
+ elif self.kierunek == Kierunek.WSCHOD:
+ self.idzNaWschod()
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()
+ if self.kierunek == Kierunek.POLNOC:
+ self.idzNaPoludnie()
+ elif self.kierunek == Kierunek.POLUDNIE:
+ self.idzNaPolnoc()
+ elif self.kierunek == Kierunek.ZACHOD:
+ self.idzNaWschod()
+ elif self.kierunek == Kierunek.WSCHOD:
+ self.idzNaZachod()
- def idzWGore(self):
+ def idzNaPolnoc(self):
self.poleStartoweGorne.wiersz -= 1
- def idzWDol(self):
+ def idzNaPoludnie(self):
self.poleStartoweGorne.wiersz += 1
- def idzWLewo(self):
+ def idzNaZachod(self):
self.poleStartoweGorne.kolumna -= 1
- def idzWPrawo(self):
+ def idzNaWschod(self):
self.poleStartoweGorne.kolumna += 1
- def bfs(graph, start, cel):
- sciezka = [start]
- wierzcholek_sciezka = [start, sciezka]
- bfs_kolejka = [wierzcholek_sciezka]
- odwiedzone = set()
- while bfs_kolejka:
- aktualne, sciezka = bfs_kolejka.pop(0)
- odwiedzone.add(aktualne)
- for neighbor in graph[aktualne]:
- if neighbor not in odwiedzone:
- if neighbor is cel:
- return sciezka + [neighbor]
- else:
- bfs_kolejka.append([neighbor, sciezka + [neighbor]])
+ # def bfs(self,graph, start, cel):
+ # sciezka = [start]
+ # wierzcholek_sciezka = [start, sciezka]
+ # bfs_kolejka = [wierzcholek_sciezka]
+ # odwiedzone = set()
+ # while bfs_kolejka:
+ # aktualne, sciezka = bfs_kolejka.pop(0)
+ # odwiedzone.add(aktualne)
+ # for neighbor in graph[aktualne]:
+ # if neighbor not in odwiedzone:
+ # if neighbor is cel:
+ # return sciezka + [neighbor]
+ # else:
+ # bfs_kolejka.append([neighbor, sciezka + [neighbor]])
+
+ def idzDoCelu(self, klatkaz):
+ stan_poczatkowy = Stan(self.kierunek, self.poleStartoweGorne)
+ stos_akcji = graphsearch(stan_poczatkowy, self.cel)
+ if stos_akcji == False:
+ print("Nie można dotrzeć.")
+ else:
+ self.wykonaj_stos_akcji(stos_akcji, klatkaz)
+ print("Dotarłem.")
+
+ self.krata.krata[self.cel.poleStartoweGorne.wiersz][
+ self.cel.poleStartoweGorne.kolumna] = ZawartoscPola.PUSTE ##chwilowo-przeniesc pozniej
+
+ self.cel = None
+
+ def wykonaj_stos_akcji(self, stos_akcji: deque, klatkaz):
+ while stos_akcji:
+ klatkaz.tick(FPS)
+ self.narysujAgenta()
+ akcja = stos_akcji.pop()
+ print(akcja.name, end=" ")
+ if akcja == Akcja.KROK_W_PRZOD:
+ self.zrobKrokWMoimKierunku()
+ self.okreslPolozenie()
+ elif akcja == Akcja.OBROT_W_LEWO:
+ self.obrocSieWLewo()
+ elif akcja == Akcja.OBROT_W_PRAWO:
+ self.obrocSieWPrawo()
+ print()
+
+ def obrocSieWLewo(self):
+ self.kierunek = self.kierunek.kierunekNaLewo()
+
+ def obrocSieWPrawo(self):
+ self.kierunek = self.kierunek.kierunekNaPrawo()
+
+ def narysujAgenta(self):
+ self.krata.narysujKrate()
+ self.krata.okno.blit(self.tekstura, (self.hitbox.x, self.hitbox.y))
+ pygame.display.update()
diff --git a/bfs.py b/bfs.py
index ff1a16f..40129b5 100644
--- a/bfs.py
+++ b/bfs.py
@@ -1,45 +1,148 @@
+from collections import deque
+
from krata import *
-def bfs(Krata: Krata, start: PoleKraty, cel: PoleKraty):
- wierzcholek_sciezka = [["start", start], [["start", start]]]
- bfs_kolejka = [wierzcholek_sciezka]
- odwiedzone = set()
- while bfs_kolejka:
- elem = bfs_kolejka.pop(0)
- odwNowe = str(elem[0][1].wiersz) + "/" + str(elem[0][1].kolumna)
- odwiedzone.add(odwNowe)
- polaObok = succ(Krata,elem[0][1])
- for neighbor in polaObok:
- sciezka = elem[1].copy()
- sprOdw = str(neighbor[1].wiersz) + "/" + str(neighbor[1].kolumna)
- if sprOdw not in odwiedzone:
- if neighbor[1].wiersz == cel.wiersz and neighbor[1].kolumna == cel.kolumna:
- sciezka.append(neighbor)
- return sciezka
- else:
- sciezka.append([neighbor])
- bfs_kolejka.append([neighbor, sciezka])
-def succ(Krata: Krata, poleKraty: PoleKraty):
- polaDostepneObok = list()
- if poleKraty.kolumna - 1 >= 0: # nie poza kratę
- if Krata.krata[poleKraty.wiersz][poleKraty.kolumna - 1] != ZawartoscPola.SCIANA: # nie szafka (szafka to ściana)
- poleLewe = PoleKraty(Krata, poleKraty.wiersz, poleKraty.kolumna - 1)
- naLewo = ["Kierunek.LEWO", poleLewe]
- polaDostepneObok.append(naLewo)
- if poleKraty.wiersz - 1 >= 0: # nie poza kratę
- if Krata.krata[poleKraty.wiersz - 1][poleKraty.kolumna] != ZawartoscPola.SCIANA:
- poleGorne = PoleKraty(Krata, poleKraty.wiersz - 1, poleKraty.kolumna)
- naGore = ["Kierunek.GORA", poleGorne]
- polaDostepneObok.append(naGore)
- if poleKraty.kolumna + 1 < LICZBA_POL_W_POZIOMIE: # nie poza kratę
- if Krata.krata[poleKraty.wiersz][poleKraty.kolumna + 1] != ZawartoscPola.SCIANA:
- polePrawe = PoleKraty(Krata, poleKraty.wiersz, poleKraty.kolumna + 1)
- naPrawo = ["Kierunek.PRAWO", polePrawe]
- polaDostepneObok.append(naPrawo)
- if poleKraty.wiersz + 1 < LICZBA_POL_W_PIONIE: # nie poza kratę
- if Krata.krata[poleKraty.wiersz + 1][poleKraty.kolumna] != ZawartoscPola.SCIANA:
- poleDolne = PoleKraty(Krata, poleKraty.wiersz + 1, poleKraty.kolumna)
- naDol = ["Kierunek.DOL", poleDolne]
- polaDostepneObok.append(naDol)
- return polaDostepneObok
\ No newline at end of file
+class Akcja(Enum):
+ OBROT_W_LEWO = 0
+ OBROT_W_PRAWO = 1
+ KROK_W_PRZOD = 2
+
+
+class Stan:
+ def __init__(self, kierunek: Kierunek, poleStartoweGorne: PoleKraty):
+ self.kierunek = kierunek
+ self.poleStartoweGorne = poleStartoweGorne
+
+ def skopiuj(self):
+ return Stan(self.kierunek, self.poleStartoweGorne.skopiuj())
+
+
+class Nastepnik:
+ def __init__(self, akcja: Akcja, stan: Stan, poprzednik):
+ self.akcja = akcja
+ self.stan = stan
+ self._poprzednik = poprzednik
+
+ def getPoprzednik(self):
+ return self._poprzednik
+
+ def setPoprzednik(self, x):
+ raise Exception
+
+ poprzednik = property(getPoprzednik, setPoprzednik)
+
+ def skopiuj(self):
+ return Nastepnik(self.akcja, self.stan.skopiuj(), self.poprzednik)
+
+
+def nastepnik_obrotu_w_lewo(nastepnik: Nastepnik):
+ akcja = Akcja.OBROT_W_LEWO
+ stan = Stan(nastepnik.stan.kierunek.kierunekNaLewo(), nastepnik.stan.poleStartoweGorne)
+ return Nastepnik(akcja, stan, nastepnik)
+
+
+def nastepnik_obrotu_w_prawo(nastepnik: Nastepnik):
+ akcja = Akcja.OBROT_W_PRAWO
+ stan = Stan(nastepnik.stan.kierunek.kierunekNaPrawo(), nastepnik.stan.poleStartoweGorne)
+ return Nastepnik(akcja, stan, nastepnik)
+
+
+def nastepnik_kroku_w_przod(nastepnik: Nastepnik):
+ akcja = Akcja.KROK_W_PRZOD
+ stan = Stan(nastepnik.stan.kierunek, nastepnik.stan.poleStartoweGorne)
+ if stan.kierunek == Kierunek.POLNOC:
+ stan.poleStartoweGorne.wiersz -= 1
+ elif stan.kierunek == Kierunek.POLUDNIE:
+ stan.poleStartoweGorne.wiersz += 1
+ elif stan.kierunek == Kierunek.ZACHOD:
+ stan.poleStartoweGorne.kolumna -= 1
+ elif stan.kierunek == Kierunek.WSCHOD:
+ stan.poleStartoweGorne.kolumna += 1
+ return Nastepnik(akcja, stan, nastepnik)
+
+
+def pole_w_granicach_kraty(pole: PoleKraty):
+ if pole.wiersz not in range(0, pole.krata.liczbaPolPionowo):
+ return False
+ elif pole.kolumna not in range(0, pole.krata.liczbaPolPoziomo):
+ return False
+ else:
+ return True
+
+
+def pole_puste(pole: PoleKraty):
+ if pole.krata.krata[pole.wiersz][pole.kolumna] in (ZawartoscPola.PUSTE, ZawartoscPola.CEL):
+ return True
+ else:
+ return False
+
+
+def mozna_zrobic_krok_w_przod(nastepnik: Nastepnik):
+ nastepnik = nastepnik_kroku_w_przod(nastepnik)
+ if pole_w_granicach_kraty(nastepnik.stan.poleStartoweGorne) and pole_puste(nastepnik.stan.poleStartoweGorne):
+ return True
+ else:
+ return False
+
+
+def succ(nastepnik: Nastepnik):
+ wynik = []
+ pom = nastepnik.skopiuj()
+ wynik.append(nastepnik_obrotu_w_lewo(pom))
+ pom = nastepnik.skopiuj()
+ wynik.append(nastepnik_obrotu_w_prawo(pom))
+ pom = nastepnik.skopiuj()
+ if mozna_zrobic_krok_w_przod(pom):
+ pom = nastepnik.skopiuj()
+ wynik.append(nastepnik_kroku_w_przod(pom))
+ return wynik
+
+
+def goaltest(stan: Stan, cel: Stan):
+ if stan.poleStartoweGorne.wiersz != cel.poleStartoweGorne.wiersz:
+ return False
+ elif stan.poleStartoweGorne.kolumna != cel.poleStartoweGorne.kolumna:
+ return False
+ else:
+ return True
+
+
+def stan_w_liscie_nastepnikow(stan: Stan, lista_nastepnikow):
+ for i in lista_nastepnikow:
+ if i.stan.kierunek != stan.kierunek:
+ continue
+ elif i.stan.poleStartoweGorne.wiersz != stan.poleStartoweGorne.wiersz:
+ continue
+ elif i.stan.poleStartoweGorne.kolumna != stan.poleStartoweGorne.kolumna:
+ continue
+ else:
+ return True
+ return False
+
+
+def stos_akcji(stan_koncowy: Nastepnik):
+ stos = deque()
+ while stan_koncowy.poprzednik is not None:
+ stos.append(stan_koncowy.akcja)
+ stan_koncowy = stan_koncowy.poprzednik
+ return stos
+
+
+def graphsearch(istate: Stan, cel: Stan):
+ fringe = deque()
+ explored = []
+ fringe.append(Nastepnik(None, istate, None))
+ while fringe:
+ # for i in fringe:
+ # print("F",i.stan.kierunek,i.stan.poleStartoweGorne.wiersz,i.stan.poleStartoweGorne.kolumna,end=" ")
+ # print()
+ element: Nastepnik = fringe.popleft()
+ if goaltest(element.stan, cel):
+ return stos_akcji(element)
+ explored.append(element)
+ for nastepnik in succ(element):
+ if not stan_w_liscie_nastepnikow(nastepnik.stan, fringe) and not stan_w_liscie_nastepnikow(nastepnik.stan,
+ explored):
+ fringe.append(nastepnik)
+ return False
diff --git a/enumy_i_slowniki.py b/enumy_i_slowniki.py
index 6a95e28..2c6ca4c 100644
--- a/enumy_i_slowniki.py
+++ b/enumy_i_slowniki.py
@@ -4,18 +4,40 @@ from stale import *
class Kierunek(Enum):
- GORA = 0
- DOL = 1
- LEWO = 2
- PRAWO = 3
+ POLNOC = 0
+ POLUDNIE = 1
+ ZACHOD = 2
+ WSCHOD = 3
+
+ def kierunekNaLewo(self):
+ if self == Kierunek.POLNOC:
+ return Kierunek.ZACHOD
+ elif self == Kierunek.POLUDNIE:
+ return Kierunek.WSCHOD
+ elif self == Kierunek.ZACHOD:
+ return Kierunek.POLUDNIE
+ elif self == Kierunek.WSCHOD:
+ return Kierunek.POLNOC
+
+ def kierunekNaPrawo(self):
+ if self == Kierunek.POLNOC:
+ return Kierunek.WSCHOD
+ elif self == Kierunek.POLUDNIE:
+ return Kierunek.ZACHOD
+ elif self == Kierunek.ZACHOD:
+ return Kierunek.POLNOC
+ elif self == Kierunek.WSCHOD:
+ return Kierunek.POLUDNIE
class ZawartoscPola(Enum):
PUSTE = 0
SCIANA = 1
+ CEL = 2
ZawartoscPolaNaKolorPola = {
ZawartoscPola.PUSTE: BIALY,
- ZawartoscPola.SCIANA: CIEMNY_BRAZOWY1
+ ZawartoscPola.SCIANA: CIEMNY_BRAZOWY1,
+ ZawartoscPola.CEL: ZIELONY1
}
diff --git a/etykieta.py b/etykieta.py
index f787d26..26a9ebb 100644
--- a/etykieta.py
+++ b/etykieta.py
@@ -1,7 +1,7 @@
class Etykieta:
- def __init__(self,nazwa_paczki,producent,numer_paczki,cecha_paczki,data_wysylki):
+ def __init__(self, nazwa_paczki, producent, numer_paczki, cecha_paczki, data_wysylki):
self.nazwa_paczki = nazwa_paczki
- self.producent=producent
+ self.producent = producent
self.numer_paczki = numer_paczki
self.cecha_paczki = cecha_paczki
self.data_wysylki = data_wysylki
diff --git a/krata.py b/krata.py
index 3c343d7..b856fa9 100644
--- a/krata.py
+++ b/krata.py
@@ -36,6 +36,9 @@ class PoleKraty:
wiersz = property(getWiersz, setWiersz)
kolumna = property(getKolumna, setKolumna)
+ def skopiuj(self):
+ return PoleKraty(self.krata, self.wiersz, self.kolumna)
+
class Krata:
def __init__(self, okno):
@@ -65,7 +68,7 @@ class Krata:
def wyswietlKrate(self):
self.narysujKrate()
# self.narysujKrateAlternatywnie()
- self.narysujAgenta()
+ # self.narysujAgenta()
pygame.display.update()
def narysujKrate(self):
@@ -90,7 +93,7 @@ class Krata:
pygame.draw.line(self.okno, CZARNY, (0, new_height), (SZEROKOSC_OKNA, new_height), ODSTEP_MIEDZY_POLAMI)
pygame.draw.line(self.okno, CZARNY, (new_width, 0), (new_width, WYSOKOSC_OKNA), ODSTEP_MIEDZY_POLAMI)
- 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()
+ # 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 536a880..8218583 100644
--- a/main.py
+++ b/main.py
@@ -1,49 +1,62 @@
import os
-import ctypes
from agent import *
from ramy_czyli_wiedza_agenta import *
-from bfs import *
-#aby działalo w oknie + rozdzielczość ekranu
-#ctypes.windll.shcore.SetProcessDpiAwareness(1)
+# aby działalo w oknie + rozdzielczość ekranu
+# ctypes.windll.shcore.SetProcessDpiAwareness(1)
Okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA))
pygame.display.set_caption("Okno1")
Krata = Krata(Okno)
-Pomieszczenie=Pomieszczenie(0,0)
+Pomieszczenie = Pomieszczenie(WarunkiPowietrza(0, 0), 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))
- pole_lewe_gorne = PoleKraty(Krata, LICZBA_POL_W_PIONIE-BOK_AGENTA1_W_POLACH, int(LICZBA_POL_W_POZIOMIE/2))
+ # pole_lewe_gorne = PoleKraty(Krata, LICZBA_POL_W_PIONIE - BOK_AGENTA1_W_POLACH, int(LICZBA_POL_W_POZIOMIE / 2))
+ pole_lewe_gorne = PoleKraty(Krata, 0, 0)
pom = 'traktor_ikona.png'
ikona = pygame.transform.scale(pygame.image.load(os.path.join('Ikony', pom)),
(BOK_AGENTA1, BOK_AGENTA1))
Agent(Krata, pole_lewe_gorne, ikona)
+ # zawsze na poczatku polnoc
+ Krata.agent.kierunek = Kierunek.POLNOC
-def dodaj_szafke(numerSzafki, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, poczatek_kolumna, poczatek_wiersz1):
+
+def dodaj_szafke(numerSzafki, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, poczatek_wiersz, poczatek_kolumna):
wymiary_szafki = Wymiary(0, 0, 0)
- szafka = Szafka(numerSzafki,wymiary_szafki, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, poczatek_kolumna, poczatek_wiersz1, Krata)
+ szafka = Szafka(numerSzafki, wymiary_szafki, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, poczatek_wiersz,
+ poczatek_kolumna, Krata)
Pomieszczenie.dodajSzafke(szafka)
+
+def losowy_cel():
+ kierunek = Kierunek(random.randint(0, 3))
+ wiersz = random.randint(-1, Krata.liczbaPolPionowo - 1)
+ kolumna = random.randint(-1, Krata.liczbaPolPoziomo - 1)
+ Krata.krata[wiersz][kolumna] = ZawartoscPola.CEL
+ return Stan(kierunek, PoleKraty(Krata, wiersz, kolumna))
+
+
def main():
- dodaj_szafke("A", 2, 7, "P", 0, 0)
- dodaj_szafke("B", 2, 7, "L", 0, 3)
- dodaj_szafke("C", 2, 7, "P", 0, 4)
- dodaj_szafke("D", 2, 7, "L", 0, 7)
- dodaj_szafke("E", 2, 7, "P", 0, 8)
- dodaj_szafke("F", 2, 7, "L", 0, 11)
- dodaj_szafke("G", 2, 7, "P", 0, 12)
- dodaj_szafke("H", 2, 7, "L", 0, 15)
- dodaj_szafke("I", 2, 7, "P", 0, 16)
- dodaj_szafke("J", 2, 7, "L", 0, 19)
+ dodaj_szafke("A", 2, 12, "P", 2, 2)
+ dodaj_szafke("B", 2, 12, "L", 2, 3)
+ dodaj_szafke("C", 2, 5, "P", 1, 6)
+ dodaj_szafke("D", 2, 6, "L", 1, 7)
+ dodaj_szafke("C", 2, 4, "P", 9, 6)
+ dodaj_szafke("D", 2, 3, "L", 10, 7)
+ dodaj_szafke("E", 2, 8, "P", 3, 11)
+ dodaj_szafke("F", 2, 10, "L", 2, 13)
+ dodaj_szafke("H", 2, 12, "L", 1, 18)
+ dodaj_szafke("I", 2, 7, "P", 5, 23)
+ dodaj_szafke("J", 2, 12, "L", 1, 25)
+ dodaj_szafke("G", 2, 10, "P", 5, 29)
+
dodaj_agenta()
- # cel to pole kraty gdzie ma stać agent, aby położyć paczkę na półkę, w obiekcie klasy Miejsce jest to artybut dostęp
- cel = PoleKraty(Krata, 1, 14)
- # start to pole startowe agenta, == pole_lewe_gorne
- start = PoleKraty(Krata, LICZBA_POL_W_PIONIE-BOK_AGENTA1_W_POLACH, int(LICZBA_POL_W_POZIOMIE/2))
- bfsList = bfs(Krata, start, cel)
+
+ # Krata.wyswietlKrate()
klatkaz = pygame.time.Clock()
warunek_dzialania = True
@@ -53,7 +66,15 @@ def main():
if event.type == pygame.QUIT:
warunek_dzialania = False
break
- Krata.wyswietlKrate()
+
+ # cel to Stan (pole kraty gdzie ma stać agent, aby położyć paczkę na półkę, w obiekcie klasy Miejsce jest to artybut dostęp + kierunek <-na razie niepotrzebny)
+ if Krata.agent.cel is None:
+ Krata.agent.cel = losowy_cel()
+ Krata.krata[Krata.agent.cel.poleStartoweGorne.wiersz][
+ Krata.agent.cel.poleStartoweGorne.kolumna] = ZawartoscPola.CEL
+ print("CEL:", Krata.agent.cel.poleStartoweGorne.wiersz, Krata.agent.cel.poleStartoweGorne.kolumna)
+ Krata.agent.idzDoCelu(klatkaz)
+
pygame.quit()
diff --git a/miejsce.py b/miejsce.py
index 33ff9da..85c714c 100644
--- a/miejsce.py
+++ b/miejsce.py
@@ -1,10 +1,8 @@
class Miejsce:
def __init__(self, name, polka, miejsceNaPolce):
self.numer = name
- #self.rozmiar = rozmiar
- self.polka=polka
- self.miejsceNaPolce=miejsceNaPolce
+ # self.rozmiar = rozmiar
+ self.polka = polka
+ self.miejsceNaPolce = miejsceNaPolce
self.status = 'wolne'
- self.numerUmieszczonejPaczki=''
-
-
+ self.numerUmieszczonejPaczki = ''
diff --git a/ramy_czyli_wiedza_agenta.py b/ramy_czyli_wiedza_agenta.py
index 337c1ae..b1cba67 100644
--- a/ramy_czyli_wiedza_agenta.py
+++ b/ramy_czyli_wiedza_agenta.py
@@ -1,5 +1,3 @@
-from enumy_i_slowniki import *
-from stale import *
from krata import *
@@ -44,14 +42,14 @@ class WarunkiPowietrza:
self.wilgotnosc = wilgotnosc
-class Miejsce: #wcześniej półka
+class Miejsce: # wcześniej półka
def __init__(self, numer, wymiary: Wymiary, udzwig, wysokoscOdPodlogi):
- self.numer=numer
+ self.numer = numer
self.wymiary = wymiary
self.udzwig = udzwig
self.wysokoscOdPodlogi = wysokoscOdPodlogi
- #self.status = 'wolne'
- self.dostep=[]
+ # self.status = 'wolne'
+ self.dostep = []
self.zajmowanePola = []
def dodajPole(self, pole: PoleKraty):
@@ -62,15 +60,17 @@ class Miejsce: #wcześniej półka
class Szafka:
- def __init__(self, numerSzafki, wymiary: Wymiary, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, poczatek_kolumna, poczatek_wiersz1, Krata: Krata):
- self.numerSzafki=numerSzafki
+ def __init__(self, numerSzafki, wymiary: Wymiary, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, poczatek_kolumna,
+ poczatek_wiersz1, Krata: Krata):
+ self.numerSzafki = numerSzafki
self.wymiary = wymiary
self.iloscPolek = iloscPolek
self.iloscMiejscNaPolce = iloscMiejscNaPolce
- self.dostepZeStrony=dostepZeStrony
+ self.dostepZeStrony = dostepZeStrony
self.Miejsca = []
self.zajmowanePola = []
- self.utworzPustaSzafke(numerSzafki,iloscPolek, iloscMiejscNaPolce, dostepZeStrony, poczatek_kolumna, poczatek_wiersz1,Krata)
+ self.utworzPustaSzafke(numerSzafki, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, poczatek_kolumna,
+ poczatek_wiersz1, Krata)
def dodajMiejsce(self, miejsce: Miejsce):
self.Miejsca.append(miejsce)
@@ -78,28 +78,32 @@ class Szafka:
def dodajPole(self, pole: PoleKraty):
self.zajmowanePola.append(pole)
- def utworzPustaSzafke(self, numerSzafki, iloscPolek, iloscMiejscNaPolce, dostępZeStrony, poczatek_wiersz1, poczatek_kolumna, Krata: Krata):
+ def utworzPustaSzafke(self, numerSzafki, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, poczatek_wiersz1,
+ poczatek_kolumna, Krata: Krata):
for i in range(iloscPolek):
for j in range(iloscMiejscNaPolce):
wymiar_miejsca = Wymiary(0, 0, 0)
numerMiejsca = self.numerSzafki + "/" + str(i) + "/" + str(j)
- miejsce = Miejsce(numerMiejsca,wymiar_miejsca, 0, 0)
- #wypełnianie pól "zajmowane miejsca" i "dostęp"
+ miejsce = Miejsce(numerMiejsca, wymiar_miejsca, 0, 0)
+ # wypełnianie pól "zajmowane miejsca" i "dostęp"
for m in range(DUZA_SZAFA): # wiersz
poczatek_wiersz = poczatek_wiersz1 + j * DUZA_SZAFA + m
for n in range(DUZA_SZAFA): # kolumna
Krata.krata[poczatek_wiersz][poczatek_kolumna + n] = ZawartoscPola.SCIANA
- pole = PoleKraty(Krata, poczatek_wiersz, poczatek_kolumna+n)
+ pole = PoleKraty(Krata, poczatek_wiersz, poczatek_kolumna + n)
miejsce.dodajPole(pole)
self.dodajPole(pole)
- if dostępZeStrony=="L":
- pole_dostepu = PoleKraty(Krata, poczatek_wiersz, poczatek_kolumna + n - BOK_AGENTA1_W_POLACH) #dostęp z lewej strony
+ if dostepZeStrony == "L":
+ pole_dostepu = PoleKraty(Krata, poczatek_wiersz,
+ poczatek_kolumna + n - BOK_AGENTA1_W_POLACH) # dostęp z lewej strony
miejsce.dodajDostep(pole_dostepu)
- elif dostępZeStrony == "P":
- pole_dostepu = PoleKraty(Krata, poczatek_wiersz, poczatek_kolumna + n + BOK_AGENTA1_W_POLACH) # dostęp z prawej strony strony
+ elif dostepZeStrony == "P":
+ pole_dostepu = PoleKraty(Krata, poczatek_wiersz,
+ poczatek_kolumna + n + BOK_AGENTA1_W_POLACH) # dostęp z prawej strony strony
miejsce.dodajDostep(pole_dostepu)
self.dodajMiejsce(miejsce)
+
class Pomieszczenie:
def __init__(self, warunkiPowietrza: WarunkiPowietrza, wysokoscSufitu):
self.warunkiPowietrza = warunkiPowietrza
@@ -113,26 +117,30 @@ class Pomieszczenie:
def dodajPole(self, pole: PoleMapy):
self.zajmowanePola.append(pole)
+
class Etykieta:
- def __init__(self, nazwaTowaru, nazwaNadawcy, dataZapakowania, id, niePietrowac, zachowacSuchosc, ostroznie, uwagaSzklo):
+ def __init__(self, nazwaTowaru, nazwaNadawcy, dataZapakowania, iD, niePietrowac, zachowacSuchosc, ostroznie,
+ uwagaSzklo):
# realistyczne? informacje na paczce
# kategoryzowanie towaru może odbywać się na podstawie jego nazwy
self.nazwaTowaru = nazwaTowaru
self.nazwaNadawcy = nazwaNadawcy
self.dataZapakowania = dataZapakowania
- self.id = id
+ self.id = iD
# nalepki na paczce - być może nie będą na etykiecie, a trzeba je będzie rozpoznać na obrazie
self.niePietrowac = niePietrowac
self.zachowacSuchosc = zachowacSuchosc
self.ostroznie = ostroznie
self.uwagaSzklo = uwagaSzklo
+
class Paczka:
- def __init__(self,wymiary: Wymiary, waga, etykieta: Etykieta):
+ def __init__(self, wymiary: Wymiary, waga, etykieta: Etykieta):
self.wymiary = wymiary
self.waga = waga
self.etykieta = etykieta
+
class Paleta:
def __init__(self):
self.Paczki = []
@@ -140,19 +148,21 @@ class Paleta:
def dodajPaczke(self, paczka: Paczka):
self.Paczki.append(paczka)
+
class Nadawca:
- def __init__(self,nazwa, id):
+ def __init__(self, nazwa, iD):
self.nazwa = nazwa
- self.id = id
+ self.id = iD
# plus dodatkowe informacje mogące wpływać na priorytet rozpakowania transportu / miejsce składowania paczek?
+
class Transport:
- def __init__(self, dataPrzyjecia, nadawca: Nadawca, id):
+ def __init__(self, dataPrzyjecia, nadawca: Nadawca, iD):
Palety = []
self.dataPrzyjecia = dataPrzyjecia
self.nadawca = nadawca
- self.id = id
+ self.id = iD
# wyliczanie priorytetu rozpakowania transportu ?
# def okrescPriorytet(self):
- # self.priorytet =
\ No newline at end of file
+ # self.priorytet =
diff --git a/stale.py b/stale.py
index 1a1b041..a498563 100644
--- a/stale.py
+++ b/stale.py
@@ -3,8 +3,8 @@ FPS = 5
# SZEROKOSC_OKNA = 1500
# WYSOKOSC_OKNA = 750
#
-LICZBA_POL_W_POZIOMIE = 20
-LICZBA_POL_W_PIONIE = 12
+LICZBA_POL_W_POZIOMIE = 30
+LICZBA_POL_W_PIONIE = 15
BOK_POLA = 45
ODSTEP_MIEDZY_POLAMI = 1
SZEROKOSC_OKNA = LICZBA_POL_W_POZIOMIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP_MIEDZY_POLAMI
@@ -13,7 +13,7 @@ WYSOKOSC_OKNA = LICZBA_POL_W_PIONIE * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) + ODSTEP
BOK_AGENTA1_W_POLACH = 1
BOK_AGENTA1 = BOK_AGENTA1_W_POLACH * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) - ODSTEP_MIEDZY_POLAMI
#
-DUZA_SZAFA=1
+DUZA_SZAFA = 1
#
BIALY = (255, 255, 255)
JASNOSZARY1 = (200, 200, 200)
diff --git a/szafka2.py b/szafka2.py
index 7a2fe81..a3950fc 100644
--- a/szafka2.py
+++ b/szafka2.py
@@ -1,37 +1,35 @@
import miejsce
+
class Szafka:
def __init__(self, numerSzafki, rozmiar, iloscPolek, iloscMiejscNaPolce):
self.numer = numerSzafki
# np. A
- self.rozmiarMiejsc=rozmiar
- #średni, duży, mały
- #self.iloscWolnychMiejsc = iloscPolek*iloscMiejscNaPolce
- self.iloscPolek=iloscPolek
- self.iloscMiejscNaPolce=iloscMiejscNaPolce
- self.listaMiejsc=[]
- self.listaWolnychMiejsc=[]
+ self.rozmiarMiejsc = rozmiar
+ # średni, duży, mały
+ # self.iloscWolnychMiejsc = iloscPolek*iloscMiejscNaPolce
+ self.iloscPolek = iloscPolek
+ self.iloscMiejscNaPolce = iloscMiejscNaPolce
+ self.listaMiejsc = []
+ self.listaWolnychMiejsc = []
self.stworzMiejsca()
def stworzMiejsca(self):
- j=0 #półka
- k=0
- while jself.iloscMiejscNaPolce-1:
- j=j+1
- k=0
-
- self.listaWolnychMiejsc = self.listaMiejsc.copy()
+ k = k + 1
+ if k > self.iloscMiejscNaPolce - 1:
+ j = j + 1
+ k = 0
+ self.listaWolnychMiejsc = self.listaMiejsc.copy()
def polozPaczke(self, numerPaczki):
- if len(self.listaWolnychMiejsc)!=0:
- self.listaWolnychMiejsc[0].numerUmieszczonejPaczki=numerPaczki
- self.listaWolnychMiejsc[0].status="zajęte"
+ if len(self.listaWolnychMiejsc) != 0:
+ self.listaWolnychMiejsc[0].numerUmieszczonejPaczki = numerPaczki
+ self.listaWolnychMiejsc[0].status = "zajęte"
self.listaWolnychMiejsc.pop(0)
-
-