Merge pull request 'grid.py, wozek wymija regaly i miejsce' (#11) from bfs_rack into master

Reviewed-on: #11
This commit is contained in:
Wiktoria Grzesik 2023-05-06 18:08:19 +02:00
commit deb2be3745
12 changed files with 39 additions and 17 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -10,6 +10,7 @@ EKRAN_SZEROKOSC = 980
EKRAN_WYSOKOSC = 980 EKRAN_WYSOKOSC = 980
screen = pygame.display.set_mode((EKRAN_SZEROKOSC, EKRAN_WYSOKOSC)) screen = pygame.display.set_mode((EKRAN_SZEROKOSC, EKRAN_WYSOKOSC))
miejsce = pygame.image.load('images/miejsce_paczek.png') miejsce = pygame.image.load('images/miejsce_paczek.png')
miejsce = pygame.transform.scale(miejsce, (140, 140))
pygame.display.set_caption("Inteligentny wozek") pygame.display.set_caption("Inteligentny wozek")
icon = pygame.image.load('images/icon.png') icon = pygame.image.load('images/icon.png')
pygame.display.set_icon(icon) pygame.display.set_icon(icon)
@ -49,7 +50,8 @@ def narysuj_siatke():
def odswiez_ekran(wozek): def odswiez_ekran(wozek):
screen.fill((51, 51, 51)) # removes object trail screen.fill((51, 51, 51)) # removes object trail
screen.blit(miejsce, (430, 400)) #screen.blit(miejsce, (430, 400))
screen.blit(miejsce,(420, 350))
narysuj_siatke() narysuj_siatke()
narysuj_paczki(wozek) narysuj_paczki(wozek)
narysuj_regaly() narysuj_regaly()

25
grid.py Normal file
View File

@ -0,0 +1,25 @@
from enum import Enum
from typing import Tuple, Dict
class GridCellType(Enum):
FREE = 0
RACK = 1
PLACE = 2
# dodać oznaczenie na miejsce dla paczek
class SearchGrid:
grid: Dict[Tuple[int, int], GridCellType] = {}
def __init__(self) -> None:
self._init_grid()
def _init_grid(self) -> None:
for i in range (0,14):
for j in range(0,14):
self.grid[(i, j)] = GridCellType.FREE
for r, c in [(2,2), (2,3), (3,2), (3,3), (10,2), (10,3), (11,2), (11,3),
(2,8), (2,9), (3,8), (3,9), (10,8), (10,9), (11,8), (11,9),]:
self.grid[(r,c)] = GridCellType.RACK
for m, n in [(6,5), (6,6), (7,5), (7,6)]:
self.grid[(m,n)] = GridCellType.PLACE

View File

@ -3,7 +3,7 @@ import pygame
from wozek import Wozek from wozek import Wozek
import wyszukiwanie import wyszukiwanie
import ekran import ekran
from grid import SearchGrid
pygame.init() pygame.init()
@ -19,12 +19,13 @@ def main():
if event.type == pygame.MOUSEBUTTONDOWN: if event.type == pygame.MOUSEBUTTONDOWN:
# lewy przycisk myszy # lewy przycisk myszy
if event.button == 1: if event.button == 1:
grid_points = SearchGrid()
x = pygame.mouse.get_pos()[0] x = pygame.mouse.get_pos()[0]
y = pygame.mouse.get_pos()[1] y = pygame.mouse.get_pos()[1]
wiersz = ekran.sprawdz_ktory_wiersz(x) wiersz = ekran.sprawdz_ktory_wiersz(x)
kolumna = ekran.sprawdz_ktora_kolumna(y) kolumna = ekran.sprawdz_ktora_kolumna(y)
docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 0) docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 0)
wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan) wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan, grid_points)
sciezka = wyszukiwanie.znajdz_sciezke(wezel) sciezka = wyszukiwanie.znajdz_sciezke(wezel)
wozek.przemiesc_wozek_po_sciezce(sciezka) wozek.przemiesc_wozek_po_sciezce(sciezka)

View File

@ -1,13 +1,4 @@
class SearchSpace: from grid import GridCellType
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: class Stan:
def __init__(self, x, y, kierunek): def __init__(self, x, y, kierunek):
@ -21,7 +12,7 @@ class Wezel:
self.stan = stan self.stan = stan
self.rodzic = rodzic self.rodzic = rodzic
def nastepnik(wezel, licznik): def nastepnik(wezel, licznik, search_grid):
# gora -> prawo -> dol -> lewo | obrot w prawo # gora -> prawo -> dol -> lewo | obrot w prawo
# gora -> lewo -> dol -> prawo | obrot w lewo # gora -> lewo -> dol -> prawo | obrot w lewo
# 0 gora 1 prawo 2 dol 3 lewo # 0 gora 1 prawo 2 dol 3 lewo
@ -44,11 +35,14 @@ def nastepnik(wezel, licznik):
# sprawdzenie czy nie wyjdzie poza plansze # sprawdzenie czy nie wyjdzie poza plansze
if 0 <= x <= 910 and 0 <= y <= 910: if 0 <= x <= 910 and 0 <= y <= 910:
wezly.append(ruch_w_przod) x1 = x / 70
y1 = y / 70
if search_grid.grid[(x1,y1)] is GridCellType.FREE:
wezly.append(ruch_w_przod)
return wezly return wezly
def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy): def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy, search_grid):
pierwszy_wezel = Wezel(stan_poczatkowy, 0) pierwszy_wezel = Wezel(stan_poczatkowy, 0)
fringe = [pierwszy_wezel] fringe = [pierwszy_wezel]
odwiedzone = [pierwszy_wezel] odwiedzone = [pierwszy_wezel]
@ -61,7 +55,7 @@ def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy):
mapa[licznik] = wezel mapa[licznik] = wezel
if stan_docelowy.x == wezel.stan.x and stan_docelowy.y == wezel.stan.y: if stan_docelowy.x == wezel.stan.x and stan_docelowy.y == wezel.stan.y:
return wezel return wezel
lista1 = nastepnik(wezel, licznik) lista1 = nastepnik(wezel, licznik, search_grid)
for obecny_wezel in lista1: for obecny_wezel in lista1:
flag_juz_odwiedzony = 0 flag_juz_odwiedzony = 0
for odwiedzony_wezel in odwiedzone: for odwiedzony_wezel in odwiedzone: