From ccbb743403750a858b231fac2f024c9a20781bf0 Mon Sep 17 00:00:00 2001 From: s464931 Date: Mon, 4 Apr 2022 16:28:25 +0200 Subject: [PATCH] =?UTF-8?q?algorytm=20bfs=20z=20funkcj=C4=85=20nast=C4=99p?= =?UTF-8?q?nika,=20dodatkowo=20zmieniono=20wielko=C5=9B=C4=87=20i=20ilo?= =?UTF-8?q?=C5=9B=C4=87=20p=C3=B3l=20kraty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bfs.py | 45 +++++++++++++++++++++++++++++++++++++ main.py | 29 +++++++++++++++--------- ramy_czyli_wiedza_agenta.py | 2 +- stale.py | 10 ++++----- 4 files changed, 69 insertions(+), 17 deletions(-) create mode 100644 bfs.py diff --git a/bfs.py b/bfs.py new file mode 100644 index 0000000..ff1a16f --- /dev/null +++ b/bfs.py @@ -0,0 +1,45 @@ +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 diff --git a/main.py b/main.py index 89a4aca..536a880 100644 --- a/main.py +++ b/main.py @@ -3,11 +3,10 @@ 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) - - +#ctypes.windll.shcore.SetProcessDpiAwareness(1) Okno = pygame.display.set_mode((SZEROKOSC_OKNA, WYSOKOSC_OKNA)) pygame.display.set_caption("Okno1") @@ -29,15 +28,23 @@ def dodaj_szafke(numerSzafki, iloscPolek, iloscMiejscNaPolce, dostepZeStrony, po Pomieszczenie.dodajSzafke(szafka) def main(): - dodaj_szafke("A", 2, 10, "L", 0, 20) #przykładowe wartości dla szafek - dodaj_szafke("B", 2, 10, "P", 0, 24) - dodaj_szafke("C", 2, 10, "L", 0, 40) - dodaj_szafke("D", 2, 10, "P", 0, 44) - dodaj_szafke("E", 2, 10, "L", 0, 60) - dodaj_szafke("F", 2, 10, "P", 0, 64) - dodaj_szafke("G", 2, 10, "L", 0, 80) - dodaj_szafke("H", 2, 10, "P", 0, 84) + 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_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) + klatkaz = pygame.time.Clock() warunek_dzialania = True while warunek_dzialania: diff --git a/ramy_czyli_wiedza_agenta.py b/ramy_czyli_wiedza_agenta.py index 4b8632b..337c1ae 100644 --- a/ramy_czyli_wiedza_agenta.py +++ b/ramy_czyli_wiedza_agenta.py @@ -86,7 +86,7 @@ class Szafka: 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 * 3 + m + 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) diff --git a/stale.py b/stale.py index 08dc53e..1a1b041 100644 --- a/stale.py +++ b/stale.py @@ -3,17 +3,17 @@ FPS = 5 # SZEROKOSC_OKNA = 1500 # WYSOKOSC_OKNA = 750 # -LICZBA_POL_W_POZIOMIE = 90 -LICZBA_POL_W_PIONIE = 50 -BOK_POLA = 15 +LICZBA_POL_W_POZIOMIE = 20 +LICZBA_POL_W_PIONIE = 12 +BOK_POLA = 45 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 # -BOK_AGENTA1_W_POLACH = 3 +BOK_AGENTA1_W_POLACH = 1 BOK_AGENTA1 = BOK_AGENTA1_W_POLACH * (BOK_POLA + ODSTEP_MIEDZY_POLAMI) - ODSTEP_MIEDZY_POLAMI # -DUZA_SZAFA=3 +DUZA_SZAFA=1 # BIALY = (255, 255, 255) JASNOSZARY1 = (200, 200, 200)