From ea49df80bd5f11fdb9039f3fa56d463e6c52a3d3 Mon Sep 17 00:00:00 2001 From: Mateusz Kantorski Date: Thu, 20 Apr 2023 20:54:58 +0200 Subject: [PATCH 1/7] adding class stan, bfs template --- main.py | 56 +++++++++++----------------------------------- paczka.py | 2 +- regal.py | 4 +++- wozek.py | 24 +++++++++++++++----- wyszukiwanie.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 95 insertions(+), 50 deletions(-) create mode 100644 wyszukiwanie.py diff --git a/main.py b/main.py index 6296b94..f5e571c 100644 --- a/main.py +++ b/main.py @@ -2,7 +2,8 @@ import sys import pygame import regal import paczka -#from wozek import Wozek +from wozek import Wozek +import wyszukiwanie pygame.init() screen = pygame.display.set_mode((980, 980)) @@ -12,47 +13,6 @@ pygame.display.set_caption("Inteligentny wozek") icon = pygame.image.load('images/icon.png') pygame.display.set_icon(icon) -class Wozek(): - def __init__(self): - self.x = 55 - self.y = 55 - self.x_change = 0 - self.y_change = 0 - self.height = 64 - self.width = 64 - self.image = pygame.image.load("images/pusty_wozek.png") - # Credit: Forklift icons created by Smashicons - Flaticon - # https://www.flaticon.com/free-icons/forklift - - def draw(self): - screen.blit(self.image, (self.x, self.y)) - - #storage = ["none"] * 10 - storage = [] - max_size = 10 - - def add_element(element, storage, max_size): - if len(storage) < max_size: - storage.append(element) - else: - print("I'm full!") - def remove_element(storage): - if len(storage) > 0: - place = storage.pop() - return place - else: - print("I'm empty!") - - def dynamic_wozek_picture(wozek, storage): - if len(storage) == 0: - wozek.image = pygame.image.load("images/pusty_wozek.png") - elif ((len(storage) > 0) and (len(storage) < 4)): - wozek.image = pygame.image.load("images/pelny_wozek_1_crate.png") - elif ((len(storage) > 3) and (len(storage) < 10)): - wozek.image = pygame.image.load("images/pelny_wozek_2_crates.png") - elif (len(storage) == 10): - wozek.image = pygame.image.load("images/pelny_wozek_full_3_crates.png") - def main(): wozek = Wozek() @@ -63,6 +23,16 @@ def main(): if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: sys.exit(0) + if event.type == pygame.MOUSEBUTTONDOWN: + # lewy przycisk myszy + if event.button == 1: + x = pygame.mouse.get_pos()[0] + y = pygame.mouse.get_pos()[1] + + docelowy_stan = wyszukiwanie.Stan(x, y, 0) + # print(f'{docelowy_stan.x} + {docelowy_stan.y}') + wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan) + if event.type == pygame.KEYDOWN: if event.key == pygame.K_DOWN: wozek.y_change = 1 @@ -92,7 +62,7 @@ def main(): wozek.x = 916 # Drawing - screen.fill((51,51,51)) # removes object trail + screen.fill((51, 51, 51)) # removes object trail screen.blit(miejsce, (430, 400)) # idRegału, Długość regału podana w kratkach, Współrzędne od których ma być tworzony regał (wiersz,kolumna) - poziomo diff --git a/paczka.py b/paczka.py index 28cd692..5e97273 100644 --- a/paczka.py +++ b/paczka.py @@ -1,5 +1,5 @@ from etykieta import Etykieta -from main import pygame +import pygame class Paczka: diff --git a/regal.py b/regal.py index 6d26ad4..8e78018 100644 --- a/regal.py +++ b/regal.py @@ -1,6 +1,6 @@ import pygame -from main import screen + def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele i = 1 @@ -29,6 +29,8 @@ class Regal: self.kolumna = obliczPixeleNaPodstawieKratek(numerKolumny) self.dlugosc = obliczPixeleDlugosciRegalu(self) + from main import screen + if(self.numerRegalu >= 0 and self.numerRegalu <= 4): reg = pygame.Surface([self.dlugosc, self.wysokoscRegalu]) reg = pygame.image.load("images/regal.png") diff --git a/wozek.py b/wozek.py index cc083f8..a80f19c 100644 --- a/wozek.py +++ b/wozek.py @@ -1,6 +1,8 @@ -from main import pygame, screen +import pygame -#screen nie działa + + +# screen nie działa class Wozek(): def __init__(self): @@ -13,11 +15,14 @@ class Wozek(): self.image = pygame.image.load("images/pusty_wozek.png") # Credit: Forklift icons created by Smashicons - Flaticon # https://www.flaticon.com/free-icons/forklift + self.__zainicjuj_stan_poczatkowy() def draw(self): - screen.blit(self.image, (self.x, self.y)) + from main import screen + # screen.blit(self.image, (self.x, self.y)) + screen.blit(self.image, (self.obecnyStan.x, self.obecnyStan.y)) - #storage = ["none"] * 10 + # storage = ["none"] * 10 storage = [] max_size = 10 @@ -26,6 +31,7 @@ class Wozek(): storage.append(element) else: print("I'm full!") + def remove_element(storage): if len(storage) > 0: place = storage.pop() @@ -41,4 +47,12 @@ class Wozek(): elif ((len(storage) > 3) and (len(storage) < 10)): wozek.image = pygame.image.load("images/pelny_wozek_2_crates.png") elif (len(storage) == 10): - wozek.image = pygame.image.load("images/pelny_wozek_full_3_crates.png") \ No newline at end of file + wozek.image = pygame.image.load("images/pelny_wozek_full_3_crates.png") + + def __zainicjuj_stan_poczatkowy(self): + from wyszukiwanie import Stan + self.obecnyStan = Stan(55, 55, 3) + + # def ustaw_wozek_w_kierunku(self, kierunek): + # TODO + diff --git a/wyszukiwanie.py b/wyszukiwanie.py new file mode 100644 index 0000000..9c1e4ee --- /dev/null +++ b/wyszukiwanie.py @@ -0,0 +1,59 @@ +class Stan: + def __init__(self, x, y, kierunek): + self.x = x + self.y = y + self.kierunek = kierunek + + +class Wezel: + def __init__(self, stan): + self.stan = stan + + +def poprzednik(wezel): + # gora -> prawo -> dol -> lewo | obrot w prawo + # gora -> lewo -> dol -> prawo | obrot w lewo + # 0 gora 1 prawo 2 dol 3 lewo + y = wezel.stan.x + x = wezel.stan.y + obrot_w_prawo = Stan(x, y, (wezel.stan.kierunek + 1) % 4) + obrot_w_lewo = Stan(x, y, (wezel.stan.kierunek - 1) % 4) + + if wezel.stan.kierunek == 0: + y -= 1 + elif wezel.stan.kierunek == 1: + x += 1 + elif wezel.stan.kierunek == 2: + y += 1 + elif wezel.stan.kierunek == 3: + x -= 1 + + wezly = [obrot_w_prawo, obrot_w_lewo] + ruch_w_przod = Stan(x, y, wezel.stan.kierunek) + + # sprawdzenie czy nie wyjdzie poza plansze + if 0 <= x <= 916 and 0 <= y <= 916: + wezly.append(ruch_w_przod) + + return wezly + + +def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy): + pierwszy_wezel = Wezel(stan_poczatkowy) + fringe = [pierwszy_wezel] + + odwiedzone = list() + + while fringe: + # kolejka + wezel = fringe.pop(0) + + if stan_docelowy.x == wezel.stan.x and stan_docelowy.y == wezel.stan.y: + return odwiedzone + + odwiedzone.append(wezel) + + for stan in poprzednik(wezel): + if wezel not in fringe and stan not in odwiedzone: + nowy_wezel = Wezel(stan) + fringe.append(nowy_wezel) From 2a3e6b006a48cb1eb6b108a4974fbce8a546ca1f Mon Sep 17 00:00:00 2001 From: s473561 Date: Thu, 20 Apr 2023 23:16:34 +0200 Subject: [PATCH 2/7] modified the bfs search - prints path --- __pycache__/etykieta.cpython-311.pyc | Bin 0 -> 1302 bytes __pycache__/main.cpython-311.pyc | Bin 0 -> 4403 bytes __pycache__/paczka.cpython-311.pyc | Bin 0 -> 2703 bytes __pycache__/regal.cpython-311.pyc | Bin 0 -> 3257 bytes __pycache__/wozek.cpython-311.pyc | Bin 0 -> 3444 bytes __pycache__/wyszukiwanie.cpython-311.pyc | Bin 0 -> 4363 bytes __pycache__/wyszukiwanie1.cpython-311.pyc | Bin 0 -> 4324 bytes main.py | 109 ++++++++++------------ wozek.py | 5 +- wyszukiwanie.py | 32 ++++--- 10 files changed, 72 insertions(+), 74 deletions(-) create mode 100644 __pycache__/etykieta.cpython-311.pyc create mode 100644 __pycache__/main.cpython-311.pyc create mode 100644 __pycache__/paczka.cpython-311.pyc create mode 100644 __pycache__/regal.cpython-311.pyc create mode 100644 __pycache__/wozek.cpython-311.pyc create mode 100644 __pycache__/wyszukiwanie.cpython-311.pyc create mode 100644 __pycache__/wyszukiwanie1.cpython-311.pyc diff --git a/__pycache__/etykieta.cpython-311.pyc b/__pycache__/etykieta.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ddad8891b2c656548728b16cc764e440f69e5dc9 GIT binary patch literal 1302 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 literal 0 HcmV?d00001 diff --git a/__pycache__/paczka.cpython-311.pyc b/__pycache__/paczka.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..43bec40fc68fd01dccf72a6e47e1d8089d3379d1 GIT binary patch literal 2703 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 UBHu|4_Hq#YigUjmLSUQx9i~mM`2YX_ literal 0 HcmV?d00001 diff --git a/__pycache__/wozek.cpython-311.pyc b/__pycache__/wozek.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0edd47b50c410397fc1b14f89b6039c96742067d GIT binary patch literal 3444 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 916: - wozek.x = 916 - if wozek.y <= 0: - wozek.y = 0 - elif wozek.x >= 916: - wozek.x = 916 + # idRegału, Długość regału podana w kratkach, Współrzędne od których ma być tworzony regał (wiersz,kolumna) - poziomo + # Współrzędne od (1,1) do (10,10) + regal.Regal(1, 1, 2, 2) + regal.Regal(2, 1, 2, 3) + regal.Regal(3, 1, 3, 2) + regal.Regal(4, 1, 3, 3) + + regal.Regal(5, 1, 8, 2) + regal.Regal(6, 1, 8, 3) + regal.Regal(7, 1, 9, 2) + regal.Regal(8, 1, 9, 3) - # Drawing - screen.fill((51, 51, 51)) # removes object trail - screen.blit(miejsce, (430, 400)) + regal.Regal(9, 1, 2, 8) + regal.Regal(10, 1, 2, 9) + regal.Regal(11, 1, 3, 8) + regal.Regal(12, 1, 3, 9) - # idRegału, Długość regału podana w kratkach, Współrzędne od których ma być tworzony regał (wiersz,kolumna) - poziomo - # Współrzędne od (1,1) do (10,10) - regal.Regal(1, 1, 2, 2) - regal.Regal(2, 1, 2, 3) - regal.Regal(3, 1, 3, 2) - regal.Regal(4, 1, 3, 3) + regal.Regal(13, 1, 8, 8) + regal.Regal(14, 1, 8, 9) + regal.Regal(15, 1, 9, 8) + regal.Regal(16, 1, 9, 9) - regal.Regal(5, 1, 8, 2) - regal.Regal(6, 1, 8, 3) - regal.Regal(7, 1, 9, 2) - regal.Regal(8, 1, 9, 3) + wozek.draw() - regal.Regal(9, 1, 2, 8) - regal.Regal(10, 1, 2, 9) - regal.Regal(11, 1, 3, 8) - regal.Regal(12, 1, 3, 9) - - regal.Regal(13, 1, 8, 8) - regal.Regal(14, 1, 8, 9) - regal.Regal(15, 1, 9, 8) - regal.Regal(16, 1, 9, 9) - - wozek.draw() - - pygame.display.flip() # updating frames + pygame.display.flip() # updating frames if __name__ == "__main__": main() + diff --git a/wozek.py b/wozek.py index a80f19c..880c081 100644 --- a/wozek.py +++ b/wozek.py @@ -1,7 +1,5 @@ import pygame - - # screen nie działa class Wozek(): @@ -51,7 +49,8 @@ class Wozek(): def __zainicjuj_stan_poczatkowy(self): from wyszukiwanie import Stan - self.obecnyStan = Stan(55, 55, 3) + # self.obecnyStan = Stan(55, 55, 3) + self.obecnyStan = Stan(0, 0, 3) # def ustaw_wozek_w_kierunku(self, kierunek): # TODO diff --git a/wyszukiwanie.py b/wyszukiwanie.py index 9c1e4ee..bdd5101 100644 --- a/wyszukiwanie.py +++ b/wyszukiwanie.py @@ -1,17 +1,25 @@ +class SearchSpace: + def __init__(self): + self.grid = [['1']*10 for _ in range(10)] # create a 10x10 grid of cells + for r, c in [(2,2), (2,3), (3,2), (3,3), (8,2), (8,3), (9,2), (9,3), + (2,8), (2,9), (3,8), (3,9), (8,8), (8,9), (9,8), (9,9)]: + self.grid[r][c] = 'X' # set the cells with a shelf to not passable + + def is_passable(self, x, y): + return 0 <= x < 10 and 0 <= y < 10 and self.grid[y][x] != 'X' + class Stan: def __init__(self, x, y, kierunek): self.x = x self.y = y self.kierunek = kierunek - class Wezel: def __init__(self, stan): self.stan = stan - -def poprzednik(wezel): - # gora -> prawo -> dol -> lewo | obrot w prawo +def poprzednik(wezel, search_space): + # gora -> prawo -> dol -> lewo | obrot w prawo # gora -> lewo -> dol -> prawo | obrot w lewo # 0 gora 1 prawo 2 dol 3 lewo y = wezel.stan.x @@ -37,23 +45,23 @@ def poprzednik(wezel): return wezly - -def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy): +def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy, search_space): pierwszy_wezel = Wezel(stan_poczatkowy) fringe = [pierwszy_wezel] - - odwiedzone = list() + + odwiedzone = set() while fringe: - # kolejka wezel = fringe.pop(0) if stan_docelowy.x == wezel.stan.x and stan_docelowy.y == wezel.stan.y: return odwiedzone - odwiedzone.append(wezel) + odwiedzone.add(wezel.stan) - for stan in poprzednik(wezel): - if wezel not in fringe and stan not in odwiedzone: + for stan in poprzednik(wezel, search_space): + if stan not in odwiedzone: nowy_wezel = Wezel(stan) fringe.append(nowy_wezel) + odwiedzone.add(stan) + return odwiedzone From 8dae8a4b20d0e664683aa88dcc6b2829b7e1d9dc Mon Sep 17 00:00:00 2001 From: Mateusz Kantorski Date: Wed, 26 Apr 2023 18:59:38 +0200 Subject: [PATCH 3/7] for merge --- main.py | 4 +-- wyszukiwanie.py | 71 ++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 60 insertions(+), 15 deletions(-) diff --git a/main.py b/main.py index ba6e036..fa0e1e5 100644 --- a/main.py +++ b/main.py @@ -26,8 +26,8 @@ def main(): grid = SearchSpace() # create start and goal states - start_state = Stan(x=0, y=0, kierunek=0) # for example - goal_state = Stan(x=0, y=1, kierunek=0) # for example + start_state = Stan(x=1, y=0, kierunek=0) # for example + goal_state = Stan(x=12, y=0, kierunek=0) # for example # perform BFS search path = wyszukiwanie_bfs(start_state, goal_state, grid) diff --git a/wyszukiwanie.py b/wyszukiwanie.py index bdd5101..abb8664 100644 --- a/wyszukiwanie.py +++ b/wyszukiwanie.py @@ -1,31 +1,35 @@ class SearchSpace: def __init__(self): - self.grid = [['1']*10 for _ in range(10)] # create a 10x10 grid of cells - for r, c in [(2,2), (2,3), (3,2), (3,3), (8,2), (8,3), (9,2), (9,3), - (2,8), (2,9), (3,8), (3,9), (8,8), (8,9), (9,8), (9,9)]: + self.grid = [['1'] * 10 for _ in range(10)] # create a 10x10 grid of cells + for r, c in [(2, 2), (2, 3), (3, 2), (3, 3), (8, 2), (8, 3), (9, 2), (9, 3), + (2, 8), (2, 9), (3, 8), (3, 9), (8, 8), (8, 9), (9, 8), (9, 9)]: self.grid[r][c] = 'X' # set the cells with a shelf to not passable def is_passable(self, x, y): return 0 <= x < 10 and 0 <= y < 10 and self.grid[y][x] != 'X' - + + class Stan: def __init__(self, x, y, kierunek): self.x = x self.y = y self.kierunek = kierunek + class Wezel: def __init__(self, stan): self.stan = stan + def poprzednik(wezel, search_space): - # gora -> prawo -> dol -> lewo | obrot w prawo + # gora -> prawo -> dol -> lewo | obrot w prawo # gora -> lewo -> dol -> prawo | obrot w lewo # 0 gora 1 prawo 2 dol 3 lewo y = wezel.stan.x x = wezel.stan.y obrot_w_prawo = Stan(x, y, (wezel.stan.kierunek + 1) % 4) - obrot_w_lewo = Stan(x, y, (wezel.stan.kierunek - 1) % 4) + # obrot_w_lewo = Stan(x, y, (wezel.stan.kierunek - 1) % 4) + obrot_w_lewo = Stan(x, y, 3 if wezel.stan.kierunek == 0 else wezel.stan.kierunek - 1) if wezel.stan.kierunek == 0: y -= 1 @@ -45,23 +49,64 @@ def poprzednik(wezel, search_space): return wezly + +# def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy, search_space): +# pierwszy_wezel = Wezel(stan_poczatkowy) +# fringe = [pierwszy_wezel] +# +# odwiedzone = [] +# odwiedzone.append(pierwszy_wezel) +# while fringe: +# wezel = fringe.pop(0) +# if stan_docelowy.x == wezel.stan.x and stan_docelowy.y == wezel.stan.y: +# return odwiedzone +# +# # odwiedzone.add(wezel.stan) +# +# for stan in poprzednik(wezel, search_space): +# if stan not in odwiedzone: +# nowy_wezel = Wezel(stan) +# fringe.append(nowy_wezel) +# odwiedzone.append(nowy_wezel) +# if stan_docelowy.x == nowy_wezel.stan.x and stan_docelowy.y == nowy_wezel.stan.y: +# return odwiedzone +# return odwiedzone + def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy, search_space): pierwszy_wezel = Wezel(stan_poczatkowy) fringe = [pierwszy_wezel] - - odwiedzone = set() - + odl_x = 100 + odl_y = 100 + # odleglosci = [[odleglosc_x, odleglosc_y]] + odwiedzone = [stan_poczatkowy] while fringe: wezel = fringe.pop(0) if stan_docelowy.x == wezel.stan.x and stan_docelowy.y == wezel.stan.y: return odwiedzone - odwiedzone.add(wezel.stan) - + # odwiedzone.append(wezel.stan) for stan in poprzednik(wezel, search_space): - if stan not in odwiedzone: + flag = 0 + for x in odwiedzone: + if x.x == stan.x and x.y == stan.y and x.kierunek == stan.kierunek: + flag = 1 + break + if flag == 1: + continue + else: + odleglosc_x = abs(stan.x - stan_docelowy.x) + odleglosc_y = abs(stan.y - stan_docelowy.y) + if odl_x + odl_y >= odleglosc_x + odleglosc_y: + odl_x = odleglosc_x + odl_y = odleglosc_y + # else: + # # # print("JEST") + # # pass + nowy_wezel = Wezel(stan) fringe.append(nowy_wezel) - odwiedzone.add(stan) + odwiedzone.append(stan) + if stan_docelowy.x == stan.x and stan_docelowy.y == stan.y: + return odwiedzone return odwiedzone From 832094398c8d82a17743bd0f367b10f1e0ec042b Mon Sep 17 00:00:00 2001 From: Mateusz Kantorski Date: Sat, 6 May 2023 13:40:17 +0200 Subject: [PATCH 4/7] adding ekran module --- ekran.py | 63 +++++++++++++++++++++++++ main.py | 138 +++++++++++++++++++++++++++++++------------------------ 2 files changed, 142 insertions(+), 59 deletions(-) create mode 100644 ekran.py diff --git a/ekran.py b/ekran.py new file mode 100644 index 0000000..2f066f2 --- /dev/null +++ b/ekran.py @@ -0,0 +1,63 @@ +import pygame +import regal +import wozek + +EKRAN_SZEROKOSC = 980 +EKRAN_WYSOKOSC = 980 +screen = pygame.display.set_mode((EKRAN_SZEROKOSC, EKRAN_WYSOKOSC)) +miejsce = pygame.image.load('images/miejsce_paczek.png') +pygame.display.set_caption("Inteligentny wozek") +icon = pygame.image.load('images/icon.png') +pygame.display.set_icon(icon) + + +def narysuj_regaly(): + regal.Regal(1, 1, 2, 2) + regal.Regal(2, 1, 2, 3) + regal.Regal(3, 1, 3, 2) + regal.Regal(4, 1, 3, 3) + + regal.Regal(5, 1, 10, 2) + regal.Regal(6, 1, 10, 3) + regal.Regal(7, 1, 11, 2) + regal.Regal(8, 1, 11, 3) + + regal.Regal(9, 1, 2, 8) + regal.Regal(10, 1, 2, 9) + regal.Regal(11, 1, 3, 8) + regal.Regal(12, 1, 3, 9) + + regal.Regal(13, 1, 10, 8) + regal.Regal(14, 1, 10, 9) + regal.Regal(15, 1, 11, 8) + regal.Regal(16, 1, 11, 9) + +def drawGrid(): + blockSize = 70 #Set the size of the grid block + WHITE = (200, 200, 200) + for x in range(0, EKRAN_SZEROKOSC, blockSize): + for y in range(0, EKRAN_WYSOKOSC, blockSize): + rect = pygame.Rect(x, y, blockSize, blockSize) + pygame.draw.rect(screen, WHITE, rect, 1) +def odswiez_ekran(wozek): + screen.fill((51, 51, 51)) # removes object trail + screen.blit(miejsce, (430, 400)) + drawGrid() + narysuj_regaly() + wozek.draw() + # pygame.draw.rect(screen, (255,0,0),(70,70,10,10)) + pygame.display.flip() + + +def sprawdz_ktory_wiersz(x): + nr_wiersza = 0 + for i in range(70, EKRAN_WYSOKOSC + 70, 70): + if x < i: + return nr_wiersza + nr_wiersza = nr_wiersza + 1 +def sprawdz_ktora_kolumna(y): + nr_kolumny = 0 + for i in range(70, EKRAN_SZEROKOSC + 70, 70): + if y < i: + return nr_kolumny + nr_kolumny = nr_kolumny + 1 \ No newline at end of file diff --git a/main.py b/main.py index fa0e1e5..e3296f6 100644 --- a/main.py +++ b/main.py @@ -3,16 +3,15 @@ import pygame import regal import paczka from wozek import Wozek -from wyszukiwanie import wyszukiwanie_bfs, Stan, SearchSpace - - +import wyszukiwanie +import ekran pygame.init() -screen = pygame.display.set_mode((980, 980)) -miejsce = pygame.image.load('images/miejsce_paczek.png') - -pygame.display.set_caption("Inteligentny wozek") -icon = pygame.image.load('images/icon.png') -pygame.display.set_icon(icon) +# screen = pygame.display.set_mode((980, 980)) +# miejsce = pygame.image.load('images/miejsce_paczek.png') +# +# pygame.display.set_caption("Inteligentny wozek") +# icon = pygame.image.load('images/icon.png') +# pygame.display.set_icon(icon) def main(): @@ -23,65 +22,86 @@ def main(): sys.exit(0) if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: sys.exit(0) - - grid = SearchSpace() - # create start and goal states - start_state = Stan(x=1, y=0, kierunek=0) # for example - goal_state = Stan(x=12, y=0, kierunek=0) # for example + if event.type == pygame.MOUSEBUTTONDOWN: + # lewy przycisk myszy + if event.button == 1: + x = pygame.mouse.get_pos()[0] + y = pygame.mouse.get_pos()[1] + wiersz = ekran.sprawdz_ktory_wiersz(x) + kolumna = ekran.sprawdz_ktora_kolumna(y) + docelowy_stan = wyszukiwanie.Stan(wiersz*70, kolumna*70, 0) + # print(f'{docelowy_stan.x} + {docelowy_stan.y}') + # wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan) + # wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, wyszukiwanie.Stan(905, 527)) + wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan) + sciezka = wyszukiwanie.znajdz_sciezke(wezel) + # print(sciezka) + wozek.przemiesc_wozek_po_sciezce(sciezka) - # perform BFS search - path = wyszukiwanie_bfs(start_state, goal_state, grid) + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_DOWN: + wozek.y_change = 1 + if event.key == pygame.K_UP: + wozek.y_change = -1 + if event.key == pygame.K_RIGHT: + wozek.x_change = 1 + if event.key == pygame.K_LEFT: + wozek.x_change = -1 - # print the path, if found - if path: - for p in path: - print(p.x, p.y) - print("Path found:", path) - else: - print("No path found.") + if event.type == pygame.KEYUP: + if event.key == pygame.K_DOWN or event.key == pygame.K_UP: + wozek.y_change = 0 + if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT: + wozek.x_change = 0 - for state in path: - pygame.time.delay(200) - wozek.x = state.x - wozek.y = state.y - for event in pygame.event.get(): - if event.type == pygame.QUIT: - sys.exit(0) - if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: - sys.exit(0) + wozek.obecnyStan.x += wozek.x_change + wozek.obecnyStan.y += wozek.y_change + if wozek.obecnyStan.x <= 0: + wozek.obecnyStan.x = 0 + elif wozek.obecnyStan.x >= 916: + wozek.obecnyStan.x = 916 + if wozek.obecnyStan.y <= 0: + wozek.obecnyStan.y = 0 + elif wozek.obecnyStan.x >= 916: + wozek.obecnyStan.x = 916 - # Drawing - screen.fill((51,51,51)) # removes object trail - screen.blit(miejsce, (430, 400)) + # grid = SearchSpace() + # # create start and goal states + # start_state = Stan(x=1, y=0, kierunek=0) # for example + # goal_state = Stan(x=12, y=0, kierunek=0) # for example - # idRegału, Długość regału podana w kratkach, Współrzędne od których ma być tworzony regał (wiersz,kolumna) - poziomo - # Współrzędne od (1,1) do (10,10) - regal.Regal(1, 1, 2, 2) - regal.Regal(2, 1, 2, 3) - regal.Regal(3, 1, 3, 2) - regal.Regal(4, 1, 3, 3) - - regal.Regal(5, 1, 8, 2) - regal.Regal(6, 1, 8, 3) - regal.Regal(7, 1, 9, 2) - regal.Regal(8, 1, 9, 3) + # # Drawing + # screen.fill((51, 51, 51)) # removes object trail + # screen.blit(miejsce, (430, 400)) - regal.Regal(9, 1, 2, 8) - regal.Regal(10, 1, 2, 9) - regal.Regal(11, 1, 3, 8) - regal.Regal(12, 1, 3, 9) + # idRegału, Długość regału podana w kratkach, Współrzędne od których ma być tworzony regał (wiersz,kolumna) - poziomo + # Współrzędne od (1,1) do (10,10) + # regal.Regal(1, 1, 2, 2) + # regal.Regal(2, 1, 2, 3) + # regal.Regal(3, 1, 3, 2) + # regal.Regal(4, 1, 3, 3) + # + # regal.Regal(5, 1, 8, 2) + # regal.Regal(6, 1, 8, 3) + # regal.Regal(7, 1, 9, 2) + # regal.Regal(8, 1, 9, 3) + # + # regal.Regal(9, 1, 2, 8) + # regal.Regal(10, 1, 2, 9) + # regal.Regal(11, 1, 3, 8) + # regal.Regal(12, 1, 3, 9) + # + # regal.Regal(13, 1, 8, 8) + # regal.Regal(14, 1, 8, 9) + # regal.Regal(15, 1, 9, 8) + # regal.Regal(16, 1, 9, 9) - regal.Regal(13, 1, 8, 8) - regal.Regal(14, 1, 8, 9) - regal.Regal(15, 1, 9, 8) - regal.Regal(16, 1, 9, 9) - - wozek.draw() - - pygame.display.flip() # updating frames + # wozek.draw() + # + # pygame.display.flip() # updating frames + ekran.odswiez_ekran(wozek) if __name__ == "__main__": main() - From e236cfe6f9edabb00d3719c2b47adf971a7350bb Mon Sep 17 00:00:00 2001 From: Mateusz Kantorski Date: Sat, 6 May 2023 13:53:01 +0200 Subject: [PATCH 5/7] adding bfs state search --- ekran.py | 14 +++--- main.py | 38 ----------------- regal.py | 10 +++-- wozek.py | 37 ++++++++++++---- wyszukiwanie.py | 111 +++++++++++++++++++----------------------------- 5 files changed, 87 insertions(+), 123 deletions(-) diff --git a/ekran.py b/ekran.py index 2f066f2..6ede3c1 100644 --- a/ekran.py +++ b/ekran.py @@ -32,20 +32,22 @@ def narysuj_regaly(): regal.Regal(15, 1, 11, 8) regal.Regal(16, 1, 11, 9) -def drawGrid(): - blockSize = 70 #Set the size of the grid block + +def narysuj_siatke(): + blockSize = 70 # Set the size of the grid block WHITE = (200, 200, 200) for x in range(0, EKRAN_SZEROKOSC, blockSize): for y in range(0, EKRAN_WYSOKOSC, blockSize): rect = pygame.Rect(x, y, blockSize, blockSize) pygame.draw.rect(screen, WHITE, rect, 1) + + def odswiez_ekran(wozek): screen.fill((51, 51, 51)) # removes object trail screen.blit(miejsce, (430, 400)) - drawGrid() + narysuj_siatke() narysuj_regaly() wozek.draw() - # pygame.draw.rect(screen, (255,0,0),(70,70,10,10)) pygame.display.flip() @@ -55,9 +57,11 @@ def sprawdz_ktory_wiersz(x): if x < i: return nr_wiersza nr_wiersza = nr_wiersza + 1 + + def sprawdz_ktora_kolumna(y): nr_kolumny = 0 for i in range(70, EKRAN_SZEROKOSC + 70, 70): if y < i: return nr_kolumny - nr_kolumny = nr_kolumny + 1 \ No newline at end of file + nr_kolumny = nr_kolumny + 1 diff --git a/main.py b/main.py index e3296f6..6571779 100644 --- a/main.py +++ b/main.py @@ -30,12 +30,8 @@ def main(): wiersz = ekran.sprawdz_ktory_wiersz(x) kolumna = ekran.sprawdz_ktora_kolumna(y) docelowy_stan = wyszukiwanie.Stan(wiersz*70, kolumna*70, 0) - # print(f'{docelowy_stan.x} + {docelowy_stan.y}') - # wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan) - # wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, wyszukiwanie.Stan(905, 527)) wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan) sciezka = wyszukiwanie.znajdz_sciezke(wezel) - # print(sciezka) wozek.przemiesc_wozek_po_sciezce(sciezka) if event.type == pygame.KEYDOWN: @@ -66,40 +62,6 @@ def main(): elif wozek.obecnyStan.x >= 916: wozek.obecnyStan.x = 916 - # grid = SearchSpace() - # # create start and goal states - # start_state = Stan(x=1, y=0, kierunek=0) # for example - # goal_state = Stan(x=12, y=0, kierunek=0) # for example - - # # Drawing - # screen.fill((51, 51, 51)) # removes object trail - # screen.blit(miejsce, (430, 400)) - - # idRegału, Długość regału podana w kratkach, Współrzędne od których ma być tworzony regał (wiersz,kolumna) - poziomo - # Współrzędne od (1,1) do (10,10) - # regal.Regal(1, 1, 2, 2) - # regal.Regal(2, 1, 2, 3) - # regal.Regal(3, 1, 3, 2) - # regal.Regal(4, 1, 3, 3) - # - # regal.Regal(5, 1, 8, 2) - # regal.Regal(6, 1, 8, 3) - # regal.Regal(7, 1, 9, 2) - # regal.Regal(8, 1, 9, 3) - # - # regal.Regal(9, 1, 2, 8) - # regal.Regal(10, 1, 2, 9) - # regal.Regal(11, 1, 3, 8) - # regal.Regal(12, 1, 3, 9) - # - # regal.Regal(13, 1, 8, 8) - # regal.Regal(14, 1, 8, 9) - # regal.Regal(15, 1, 9, 8) - # regal.Regal(16, 1, 9, 9) - - # wozek.draw() - # - # pygame.display.flip() # updating frames ekran.odswiez_ekran(wozek) diff --git a/regal.py b/regal.py index 8e78018..618e9ea 100644 --- a/regal.py +++ b/regal.py @@ -1,12 +1,13 @@ import pygame - +from ekran import screen def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele i = 1 - pixele = 100 + # pixele = 100 + pixele = 73 while (i < wymiar): - pixele = pixele + 80 + pixele = pixele + 70 i = i + 1 return pixele @@ -29,7 +30,8 @@ class Regal: self.kolumna = obliczPixeleNaPodstawieKratek(numerKolumny) self.dlugosc = obliczPixeleDlugosciRegalu(self) - from main import screen + # from main import screen + # from ekran import screen if(self.numerRegalu >= 0 and self.numerRegalu <= 4): reg = pygame.Surface([self.dlugosc, self.wysokoscRegalu]) diff --git a/wozek.py b/wozek.py index 880c081..10b4d83 100644 --- a/wozek.py +++ b/wozek.py @@ -1,9 +1,10 @@ import pygame +import ekran -# screen nie działa class Wozek(): def __init__(self): + self.obecnyStan = None self.x = 55 self.y = 55 self.x_change = 0 @@ -16,9 +17,7 @@ class Wozek(): self.__zainicjuj_stan_poczatkowy() def draw(self): - from main import screen - # screen.blit(self.image, (self.x, self.y)) - screen.blit(self.image, (self.obecnyStan.x, self.obecnyStan.y)) + ekran.screen.blit(self.image, (self.obecnyStan.x, self.obecnyStan.y)) # storage = ["none"] * 10 storage = [] @@ -49,9 +48,31 @@ class Wozek(): def __zainicjuj_stan_poczatkowy(self): from wyszukiwanie import Stan - # self.obecnyStan = Stan(55, 55, 3) - self.obecnyStan = Stan(0, 0, 3) + self.obecnyStan = Stan(70, 70, 1) - # def ustaw_wozek_w_kierunku(self, kierunek): - # TODO + def przemiesc_wozek_po_sciezce(self, sciezka): + kierunek_poprzedni = self.obecnyStan.kierunek + for wezel in sciezka: + self.obecnyStan = wezel.stan + kierunek_obecny = self.obecnyStan.kierunek + self.ustaw_wozek_w_kierunku(kierunek_obecny, kierunek_poprzedni) + kierunek_poprzedni = kierunek_obecny + ekran.odswiez_ekran(self) + pygame.time.wait(500) + + def ustaw_wozek_w_kierunku(self, kierunek_obecny, kierunek_poprzedni): + if kierunek_poprzedni < kierunek_obecny: + #obrot w lewo + if kierunek_poprzedni == 0 and kierunek_obecny == 3: + self.image = pygame.transform.rotate(self.image, 90) + # obrot w prawo + else: + self.image = pygame.transform.rotate(self.image, -90) + elif kierunek_poprzedni > kierunek_obecny: + # obrot w prawo + if kierunek_poprzedni == 3 and kierunek_obecny == 0: + self.image = pygame.transform.rotate(self.image, -90) + # obrot w lewo + else: + self.image = pygame.transform.rotate(self.image, 90) diff --git a/wyszukiwanie.py b/wyszukiwanie.py index abb8664..367adb1 100644 --- a/wyszukiwanie.py +++ b/wyszukiwanie.py @@ -17,96 +17,71 @@ class Stan: class Wezel: - def __init__(self, stan): + def __init__(self, stan, rodzic): self.stan = stan + self.rodzic = rodzic - -def poprzednik(wezel, search_space): +def nastepnik(wezel, licznik): # gora -> prawo -> dol -> lewo | obrot w prawo # gora -> lewo -> dol -> prawo | obrot w lewo # 0 gora 1 prawo 2 dol 3 lewo - y = wezel.stan.x - x = wezel.stan.y - obrot_w_prawo = Stan(x, y, (wezel.stan.kierunek + 1) % 4) - # obrot_w_lewo = Stan(x, y, (wezel.stan.kierunek - 1) % 4) - obrot_w_lewo = Stan(x, y, 3 if wezel.stan.kierunek == 0 else wezel.stan.kierunek - 1) + x = wezel.stan.x + y = wezel.stan.y + obrot_w_prawo = Wezel(Stan(x, y, (wezel.stan.kierunek + 1) % 4), licznik) + obrot_w_lewo = Wezel(Stan(x, y, 3 if wezel.stan.kierunek == 0 else wezel.stan.kierunek - 1), licznik) if wezel.stan.kierunek == 0: - y -= 1 + y -= 70 elif wezel.stan.kierunek == 1: - x += 1 + x += 70 elif wezel.stan.kierunek == 2: - y += 1 + y += 70 elif wezel.stan.kierunek == 3: - x -= 1 + x -= 70 wezly = [obrot_w_prawo, obrot_w_lewo] - ruch_w_przod = Stan(x, y, wezel.stan.kierunek) + ruch_w_przod = Wezel(Stan(x, y, wezel.stan.kierunek), licznik) # sprawdzenie czy nie wyjdzie poza plansze - if 0 <= x <= 916 and 0 <= y <= 916: + if 0 <= x <= 910 and 0 <= y <= 910: wezly.append(ruch_w_przod) return wezly - -# def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy, search_space): -# pierwszy_wezel = Wezel(stan_poczatkowy) -# fringe = [pierwszy_wezel] -# -# odwiedzone = [] -# odwiedzone.append(pierwszy_wezel) -# while fringe: -# wezel = fringe.pop(0) -# if stan_docelowy.x == wezel.stan.x and stan_docelowy.y == wezel.stan.y: -# return odwiedzone -# -# # odwiedzone.add(wezel.stan) -# -# for stan in poprzednik(wezel, search_space): -# if stan not in odwiedzone: -# nowy_wezel = Wezel(stan) -# fringe.append(nowy_wezel) -# odwiedzone.append(nowy_wezel) -# if stan_docelowy.x == nowy_wezel.stan.x and stan_docelowy.y == nowy_wezel.stan.y: -# return odwiedzone -# return odwiedzone - -def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy, search_space): - pierwszy_wezel = Wezel(stan_poczatkowy) +def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy): + pierwszy_wezel = Wezel(stan_poczatkowy, 0) fringe = [pierwszy_wezel] - odl_x = 100 - odl_y = 100 - # odleglosci = [[odleglosc_x, odleglosc_y]] - odwiedzone = [stan_poczatkowy] + odwiedzone = [pierwszy_wezel] + licznik = 0 + global mapa + mapa = dict() while fringe: wezel = fringe.pop(0) - + licznik = licznik + 1 + mapa[licznik] = wezel if stan_docelowy.x == wezel.stan.x and stan_docelowy.y == wezel.stan.y: - return odwiedzone - - # odwiedzone.append(wezel.stan) - for stan in poprzednik(wezel, search_space): - flag = 0 - for x in odwiedzone: - if x.x == stan.x and x.y == stan.y and x.kierunek == stan.kierunek: - flag = 1 + return wezel + lista1 = nastepnik(wezel, licznik) + for obecny_wezel in lista1: + flag_juz_odwiedzony = 0 + for odwiedzony_wezel in odwiedzone: + # sprawdzenie czy odwiedzilismy juz ten stan + if odwiedzony_wezel.stan.x == obecny_wezel.stan.x and odwiedzony_wezel.stan.y == obecny_wezel.stan.y\ + and odwiedzony_wezel.stan.kierunek == obecny_wezel.stan.kierunek: + flag_juz_odwiedzony = 1 break - if flag == 1: + if flag_juz_odwiedzony == 1: continue else: - odleglosc_x = abs(stan.x - stan_docelowy.x) - odleglosc_y = abs(stan.y - stan_docelowy.y) - if odl_x + odl_y >= odleglosc_x + odleglosc_y: - odl_x = odleglosc_x - odl_y = odleglosc_y - # else: - # # # print("JEST") - # # pass - - nowy_wezel = Wezel(stan) - fringe.append(nowy_wezel) - odwiedzone.append(stan) - if stan_docelowy.x == stan.x and stan_docelowy.y == stan.y: - return odwiedzone - return odwiedzone + fringe.append(obecny_wezel) + odwiedzone.append(obecny_wezel) + return pierwszy_wezel +def znajdz_sciezke(wezel): + sciezka = [wezel] + index = wezel.rodzic + while index != 0: + wezel = mapa[index] + sciezka.append(wezel) + index = wezel.rodzic + sc = list(reversed(sciezka)) + return sc From 642132e0f46d24b4bd03309cb1d61e4d3d579122 Mon Sep 17 00:00:00 2001 From: Mateusz Kantorski Date: Sat, 6 May 2023 14:54:04 +0200 Subject: [PATCH 6/7] merged bfs with picking up packages --- ekran.py | 12 +++++ etykieta.py | 10 +--- main.py | 141 +++++++++++++++++++++++++------------------------ packageList.py | 16 ++++++ paczka.py | 25 +++++++-- wozek.py | 87 ++++++++++++++++++------------ 6 files changed, 174 insertions(+), 117 deletions(-) create mode 100644 packageList.py diff --git a/ekran.py b/ekran.py index 6ede3c1..074951f 100644 --- a/ekran.py +++ b/ekran.py @@ -1,6 +1,10 @@ import pygame + +import packageList import regal import wozek +from packageList import * +from paczka import Paczka EKRAN_SZEROKOSC = 980 EKRAN_WYSOKOSC = 980 @@ -10,6 +14,7 @@ pygame.display.set_caption("Inteligentny wozek") icon = pygame.image.load('images/icon.png') pygame.display.set_icon(icon) +lista_paczek = packageList.zainicjuj_liste_paczek() def narysuj_regaly(): regal.Regal(1, 1, 2, 2) @@ -46,6 +51,7 @@ def odswiez_ekran(wozek): screen.fill((51, 51, 51)) # removes object trail screen.blit(miejsce, (430, 400)) narysuj_siatke() + narysuj_paczki(wozek) narysuj_regaly() wozek.draw() pygame.display.flip() @@ -65,3 +71,9 @@ def sprawdz_ktora_kolumna(y): if y < i: return nr_kolumny nr_kolumny = nr_kolumny + 1 + + +def narysuj_paczki(wozek): + if wozek.ln == 0: + for paczka in lista_paczek.list: + paczka.narysuj(430, 400, screen) diff --git a/etykieta.py b/etykieta.py index 94f64d2..bec7199 100644 --- a/etykieta.py +++ b/etykieta.py @@ -1,16 +1,10 @@ -#from main import pygame import secrets, string class Etykieta: - def __init__(self, id, nadawca, adres, imie, nazwisko, telefon): + def __init__(self, nadawca, adres, imie, nazwisko, telefon): self.nadawca = nadawca self.adres = adres self.imie = imie self.nazwisko = nazwisko self.telefon = telefon - self.id = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(9)) - - - - - + self.id = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(9)) \ No newline at end of file diff --git a/main.py b/main.py index 6571779..7dd28e5 100644 --- a/main.py +++ b/main.py @@ -1,69 +1,72 @@ -import sys -import pygame -import regal -import paczka -from wozek import Wozek -import wyszukiwanie -import ekran -pygame.init() -# screen = pygame.display.set_mode((980, 980)) -# miejsce = pygame.image.load('images/miejsce_paczek.png') -# -# pygame.display.set_caption("Inteligentny wozek") -# icon = pygame.image.load('images/icon.png') -# pygame.display.set_icon(icon) - - -def main(): - wozek = Wozek() - while True: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - sys.exit(0) - if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: - sys.exit(0) - if event.type == pygame.MOUSEBUTTONDOWN: - # lewy przycisk myszy - if event.button == 1: - x = pygame.mouse.get_pos()[0] - y = pygame.mouse.get_pos()[1] - wiersz = ekran.sprawdz_ktory_wiersz(x) - kolumna = ekran.sprawdz_ktora_kolumna(y) - docelowy_stan = wyszukiwanie.Stan(wiersz*70, kolumna*70, 0) - wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan) - sciezka = wyszukiwanie.znajdz_sciezke(wezel) - wozek.przemiesc_wozek_po_sciezce(sciezka) - - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_DOWN: - wozek.y_change = 1 - if event.key == pygame.K_UP: - wozek.y_change = -1 - if event.key == pygame.K_RIGHT: - wozek.x_change = 1 - if event.key == pygame.K_LEFT: - wozek.x_change = -1 - - if event.type == pygame.KEYUP: - if event.key == pygame.K_DOWN or event.key == pygame.K_UP: - wozek.y_change = 0 - if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT: - wozek.x_change = 0 - - wozek.obecnyStan.x += wozek.x_change - wozek.obecnyStan.y += wozek.y_change - - if wozek.obecnyStan.x <= 0: - wozek.obecnyStan.x = 0 - elif wozek.obecnyStan.x >= 916: - wozek.obecnyStan.x = 916 - if wozek.obecnyStan.y <= 0: - wozek.obecnyStan.y = 0 - elif wozek.obecnyStan.x >= 916: - wozek.obecnyStan.x = 916 - - ekran.odswiez_ekran(wozek) - - -if __name__ == "__main__": - main() +import sys +import pygame +from wozek import Wozek +import wyszukiwanie +import ekran + +pygame.init() + + +def main(): + wozek = Wozek() + + while True: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + sys.exit(0) + if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: + sys.exit(0) + if event.type == pygame.MOUSEBUTTONDOWN: + # lewy przycisk myszy + if event.button == 1: + x = pygame.mouse.get_pos()[0] + y = pygame.mouse.get_pos()[1] + wiersz = ekran.sprawdz_ktory_wiersz(x) + kolumna = ekran.sprawdz_ktora_kolumna(y) + docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 0) + wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan) + sciezka = wyszukiwanie.znajdz_sciezke(wezel) + wozek.przemiesc_wozek_po_sciezce(sciezka) + + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_DOWN: + wozek.y_change = 1 + if event.key == pygame.K_UP: + wozek.y_change = -1 + if event.key == pygame.K_RIGHT: + wozek.x_change = 1 + if event.key == pygame.K_LEFT: + wozek.x_change = -1 + + if event.type == pygame.KEYUP: + if event.key == pygame.K_DOWN or event.key == pygame.K_UP: + wozek.y_change = 0 + if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT: + wozek.x_change = 0 + + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_SPACE: + if wozek.ln == 0: + wozek.load_package() + wozek.dynamic_wozek_picture() + else: + wozek.drop_package() + wozek.dynamic_wozek_picture() + + wozek.obecnyStan.x += wozek.x_change + wozek.obecnyStan.y += wozek.y_change + + if wozek.obecnyStan.x <= 0: + wozek.obecnyStan.x = 0 + elif wozek.obecnyStan.x >= 916: + wozek.obecnyStan.x = 916 + if wozek.obecnyStan.y <= 0: + wozek.obecnyStan.y = 0 + elif wozek.obecnyStan.x >= 916: + wozek.obecnyStan.x = 916 + + ekran.odswiez_ekran(wozek) + + +if __name__ == "__main__": + main() diff --git a/packageList.py b/packageList.py new file mode 100644 index 0000000..44915fe --- /dev/null +++ b/packageList.py @@ -0,0 +1,16 @@ +class listOfPackages: + list = [] + + def add(self, item): + self.list.append(item) + + def remove(self): + self.list.pop() + + +def zainicjuj_liste_paczek(): + from paczka import Paczka + packageList = listOfPackages() + demo_paczka = Paczka('duzy', 10, any, False, any, any, any, any, any) + packageList.add(demo_paczka) + return packageList diff --git a/paczka.py b/paczka.py index 5e97273..f9d4af1 100644 --- a/paczka.py +++ b/paczka.py @@ -6,14 +6,29 @@ class Paczka: def __init__(self, rozmiar, waga, kategoria, czy_krucha, nadawca, adres, imie, nazwisko, telefon): self.rozmiar = rozmiar + self.image = pygame.image.load("images/paczka.png") + if rozmiar == 'duzy': + self.image = pygame.transform.scale(self.image, (50, 50)) + self.szerokosc = 50 + self.wysokosc = 50 + elif rozmiar == 'sredni': + self.image = pygame.transform.scale(self.image, (35, 35)) + self.szerokosc = 35 + self.wysokosc = 35 + elif rozmiar == 'maly': + self.image = pygame.transform.scale(self.image, (20, 20)) + self.szerokosc = 20 + self.wysokosc = 20 + else: + self.image = pygame.transform.scale(self.image, (20, 20)) + self.szerokosc = 20 + self.wysokosc = 20 + self.rozmiar = 'undefined' self.waga = waga self.kategoria = kategoria self.czy_krucha = czy_krucha - self.x = 0 - self.y = 0 - self.szerokosc = 0 - self.wysokosc = 0 - self.image = pygame.image.load("images/paczka.png") + self.x = 430 + self.y = 400 self.label = Etykieta(nadawca, adres, imie, nazwisko, telefon) # zmienia rozmiar obrazka w zaleznosci od rozmiaru diff --git a/wozek.py b/wozek.py index 10b4d83..e131ad8 100644 --- a/wozek.py +++ b/wozek.py @@ -1,12 +1,13 @@ -import pygame import ekran +import pygame,math +from packageList import listOfPackages class Wozek(): def __init__(self): self.obecnyStan = None - self.x = 55 - self.y = 55 + # self.x = 55 + # self.y = 55 self.x_change = 0 self.y_change = 0 self.height = 64 @@ -19,32 +20,48 @@ class Wozek(): def draw(self): ekran.screen.blit(self.image, (self.obecnyStan.x, self.obecnyStan.y)) - # storage = ["none"] * 10 + #storage = ["none"] * 10 storage = [] max_size = 10 + ln = len(storage) - def add_element(element, storage, max_size): - if len(storage) < max_size: - storage.append(element) + def add_element(self, element): + if self.ln < self.max_size: + self.storage.append(element) + self.ln=self.ln+1 else: print("I'm full!") - - def remove_element(storage): - if len(storage) > 0: - place = storage.pop() - return place + def remove_element(self): + if self.ln > 0: + element = self.storage.pop() + self.ln=self.ln-1 + return element else: print("I'm empty!") - def dynamic_wozek_picture(wozek, storage): - if len(storage) == 0: - wozek.image = pygame.image.load("images/pusty_wozek.png") - elif ((len(storage) > 0) and (len(storage) < 4)): - wozek.image = pygame.image.load("images/pelny_wozek_1_crate.png") - elif ((len(storage) > 3) and (len(storage) < 10)): - wozek.image = pygame.image.load("images/pelny_wozek_2_crates.png") - elif (len(storage) == 10): - wozek.image = pygame.image.load("images/pelny_wozek_full_3_crates.png") + def dynamic_wozek_picture(self): + if self.ln == 0: + self.image = pygame.image.load("images/pusty_wozek.png") + elif ((self.ln > 0) and (self.ln < 4)): + self.image = pygame.image.load("images/pelny_wozek_1_crate.png") + elif ((self.ln > 3) and (self.ln < 10)): + self.image = pygame.image.load("images/pelny_wozek_2_crates.png") + elif (self.ln == 10): + self.image = pygame.image.load("images/pelny_wozek_full_3_crates.png") + + + def load_package(self): + for package in listOfPackages.list: + dist = math.sqrt((self.obecnyStan.x - package.x)**2 + (self.obecnyStan.y - package.y)**2) + if dist <= 50: + self.add_element(package) + listOfPackages.list.pop() + def drop_package(self): + package = self.remove_element() + if package is not None: + listOfPackages.list.append(package) + package.x = self.obecnyStan.x+50 + package.y = self.obecnyStan.y def __zainicjuj_stan_poczatkowy(self): from wyszukiwanie import Stan @@ -61,18 +78,18 @@ class Wozek(): pygame.time.wait(500) def ustaw_wozek_w_kierunku(self, kierunek_obecny, kierunek_poprzedni): - if kierunek_poprzedni < kierunek_obecny: - #obrot w lewo - if kierunek_poprzedni == 0 and kierunek_obecny == 3: - self.image = pygame.transform.rotate(self.image, 90) - # obrot w prawo - else: - self.image = pygame.transform.rotate(self.image, -90) - elif kierunek_poprzedni > kierunek_obecny: - # obrot w prawo - if kierunek_poprzedni == 3 and kierunek_obecny == 0: - self.image = pygame.transform.rotate(self.image, -90) - # obrot w lewo - else: - self.image = pygame.transform.rotate(self.image, 90) + if kierunek_poprzedni < kierunek_obecny: + # obrot w lewo + if kierunek_poprzedni == 0 and kierunek_obecny == 3: + self.image = pygame.transform.rotate(self.image, 90) + # obrot w prawo + else: + self.image = pygame.transform.rotate(self.image, -90) + elif kierunek_poprzedni > kierunek_obecny: + # obrot w prawo + if kierunek_poprzedni == 3 and kierunek_obecny == 0: + self.image = pygame.transform.rotate(self.image, -90) + # obrot w lewo + else: + self.image = pygame.transform.rotate(self.image, 90) From c22de8aaac87f8d54e34af8085fd69299204baa5 Mon Sep 17 00:00:00 2001 From: Mateusz Kantorski Date: Sat, 6 May 2023 15:20:40 +0200 Subject: [PATCH 7/7] import --- regal.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regal.py b/regal.py index 618e9ea..2074c10 100644 --- a/regal.py +++ b/regal.py @@ -1,5 +1,4 @@ import pygame -from ekran import screen def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele @@ -21,6 +20,7 @@ def obliczPixeleDlugosciRegalu(self): #Przeliczanie dlugości regału podanego class Regal: def __init__(self, numerRegalu, dlugoscRegaluWKratkach, numerWiersza, numerKolumny): + from ekran import screen self.numerRegalu = numerRegalu self.wysokoscRegalu = 64 self.dlugoscRegaluWKratkach = dlugoscRegaluWKratkach