diff --git a/ekran.py b/ekran.py index 2f58e07..58ec201 100644 --- a/ekran.py +++ b/ekran.py @@ -1,7 +1,7 @@ import pygame import plansza from regal import Regal -from packageList import * +from itemList import * EKRAN_SZEROKOSC = 770 EKRAN_WYSOKOSC = 770 @@ -14,8 +14,9 @@ pygame.display.set_caption("Inteligentny wozek") icon = pygame.image.load('images/icon.png') pygame.display.set_icon(icon) -lista_paczek = [] +lista_itemow = [] lista_paczek_na_regalach = [] +lista_listow_w_skrzynce = [] def narysuj_regaly(): global lista_regalow @@ -62,7 +63,7 @@ def odswiez_ekran(wozek): screen.blit(miejsce,(plansza.a_pix, plansza.b_pix)) screen.blit(skrzynka,(plansza.c_pix, plansza.d_pix)) narysuj_siatke() - narysuj_paczki(wozek) + narysuj_items() narysuj_paczke_na_regale() narysuj_regaly() wozek.draw() @@ -85,17 +86,26 @@ def sprawdz_ktora_kolumna(y): nr_kolumny = nr_kolumny + 1 -def narysuj_paczki(wozek): - for paczka in lista_paczek: - paczka.narysuj(paczka.x, paczka.y, screen) +def narysuj_items(): + for item in lista_itemow: + item.narysuj(item.x, item.y, screen) def narysuj_paczke_na_regale(): for paczka in lista_paczek_na_regalach: if paczka.is_in_move is False: paczka.narysuj(paczka.x, paczka.y, screen) -def dodaj_paczki_na_rampe(p1, p2): - lista_paczek.append(p1) - lista_paczek.append(p2) +def narysuj_list_na_skrzynce(): + for letter in lista_listow_w_skrzynce: + if letter.is_in_move is False: + letter.narysuj(letter.x, letter.y, screen) + +def dodaj_na_rampe(p1, p2, l1, l2): + lista_itemow.append(p1) + lista_itemow.append(p2) + lista_itemow.append(l1) + lista_itemow.append(l2) p1.update_position(plansza.a_pix, plansza.b_pix) - p2.update_position(plansza.a_pix, plansza.b_pix) \ No newline at end of file + p2.update_position(plansza.a_pix, plansza.b_pix) + l1.update_position(plansza.a_pix, plansza.b_pix) + l2.update_position(plansza.a_pix, plansza.b_pix) \ No newline at end of file diff --git a/images/letter.png b/images/letter.png new file mode 100644 index 0000000..0f17449 Binary files /dev/null and b/images/letter.png differ diff --git a/packageList.py b/itemList.py similarity index 69% rename from packageList.py rename to itemList.py index 1a08d98..ada7c0d 100644 --- a/packageList.py +++ b/itemList.py @@ -2,17 +2,17 @@ import pygame # from paczka import Paczka -class listOfPackages: +class listOfItems: list = [] - package_group = pygame.sprite.Group() + item_group = pygame.sprite.Group() def add(self, item): self.list.append(item) - self.package_group.add(item) + self.item_group.add(item) def remove(self): - last_package = self.list.pop() - self.package_group.remove(last_package) + last_item = self.list.pop() + self.item_group.remove(last_item) # def zainicjuj_liste_paczek(init_x, init_y): diff --git a/letter.py b/letter.py new file mode 100644 index 0000000..98c1deb --- /dev/null +++ b/letter.py @@ -0,0 +1,23 @@ +import pygame + +letter_pic = pygame.image.load("images/letter.png") + +class Letter(pygame.sprite.Sprite): + def __init__(self, id): + super().__init__() + self.id = id + self.image = pygame.transform.scale(letter_pic, (40, 40)) + self.rect = self.image.get_rect() + self.x = 430 + self.y = 400 + self.is_in_move = False + + def narysuj(self, x, y, screen): + self.x = x + self.y = y + screen.blit(self.image, (self.x, self.y)) + + def update_position(self, x, y): + self.x = x + self.y = y + self.rect.topleft = (x, y) \ No newline at end of file diff --git a/main.py b/main.py index 7ed8ed7..b78c014 100644 --- a/main.py +++ b/main.py @@ -3,10 +3,12 @@ import sys import joblib import pygame from paczka import Paczka +from letter import Letter from wozek import Wozek import wyszukiwanie import ekran from grid import GridCellType, SearchGrid +import plansza from plansza import a_pix, b_pix @@ -17,7 +19,9 @@ def main(): wozek = Wozek() p1 = Paczka('duzy', 12, 'narzedzia', False, True, False, any, any, any, any, any) p2 = Paczka('maly', 1, 'ogród', False, True, False, any, any, any, any, any) - ekran.dodaj_paczki_na_rampe(p1, p2) + l1 = Letter(1) + l2 = Letter(2) + ekran.dodaj_na_rampe(p2, l1, p1, l2) grid_points = SearchGrid() # Odczyt drzewa z pliku @@ -31,43 +35,57 @@ def main(): sys.exit(0) if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: - ## sprawdzenie czy lista z paczkami nie jest pusta - if ekran.lista_paczek: - ## wozek jedzie po paczke - wiersz = ekran.sprawdz_ktory_wiersz(a_pix) - kolumna = ekran.sprawdz_ktora_kolumna(b_pix) - docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 1) + + ## wozek jedzie po itemy + wiersz = ekran.sprawdz_ktory_wiersz(a_pix) + kolumna = ekran.sprawdz_ktora_kolumna(b_pix) + docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 1) #wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan, grid_points) - wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) - sciezka = wyszukiwanie.znajdz_sciezke(wezel) - wozek.przemiesc_wozek_po_sciezce(sciezka) + wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) + sciezka = wyszukiwanie.znajdz_sciezke(wezel) + wozek.przemiesc_wozek_po_sciezce(sciezka) - if grid_points.grid[(wiersz, kolumna)] is GridCellType.PLACE: #picks up package + ## sprawdzenie czy lista itemow nie jest pusta + if ekran.lista_itemow: + if grid_points.grid[(wiersz, kolumna)] is GridCellType.PLACE: #picks up item if wozek.ln == 0: - wozek.picks_up_package() + wozek.picks_up_item() wozek.dynamic_wozek_picture() - ## wozek jedzie odlozyc paczke na regal - przenoszona_paczka = wozek.storage[-1] + przenoszony_item = wozek.storage[-1] + if isinstance(przenoszony_item,Paczka): + ## wozek jedzie odlozyc paczke na regal + przenoszona_paczka = przenoszony_item - array, reg = przenoszona_paczka.tablica_do_drzewa(przenoszona_paczka.kategoria) + array, reg = przenoszona_paczka.tablica_do_drzewa(przenoszona_paczka.kategoria) - predictions = drzewo.predict([array]) + predictions = drzewo.predict([array]) - if predictions == 0: - print('odklada na dolna polke!') + if predictions == 0: + print('odklada na dolna polke!') + else: + print('odklada na gorna polke!') + + docelowy_stan = wyszukiwanie.Stan(reg.numerWiersza * 70, reg.numerKolumny * 70, 1) + wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) + sciezka = wyszukiwanie.znajdz_sciezke(wezel) + wozek.przemiesc_wozek_po_sciezce(sciezka) + + if wozek.ln != 0: # drops package + wozek.drops_package(przenoszona_paczka, reg, predictions) + wozek.dynamic_wozek_picture() else: - print('odklada na gorna polke!') + #list przenoszony do skrzynki + docelowy_stan = wyszukiwanie.Stan(plansza.c_pix, plansza.d_pix, 1) + wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) + sciezka = wyszukiwanie.znajdz_sciezke(wezel) + wozek.przemiesc_wozek_po_sciezce(sciezka) - docelowy_stan = wyszukiwanie.Stan(reg.numerWiersza * 70, reg.numerKolumny * 70, 1) - wezel = wyszukiwanie.wyszukiwanie_a_star(wozek.obecnyStan, docelowy_stan, grid_points) - sciezka = wyszukiwanie.znajdz_sciezke(wezel) - wozek.przemiesc_wozek_po_sciezce(sciezka) + if wozek.ln != 0: # drops letter + wozek.drops_letter(przenoszony_item) + wozek.dynamic_wozek_picture() - if wozek.ln != 0: # drops package - wozek.drops_package(przenoszona_paczka, reg, predictions) - wozek.dynamic_wozek_picture() if event.type == pygame.MOUSEBUTTONDOWN: # lewy przycisk myszy diff --git a/wozek.py b/wozek.py index d09c273..682f495 100644 --- a/wozek.py +++ b/wozek.py @@ -1,9 +1,11 @@ import ekran import pygame,math # from packageList import listOfPackages -from ekran import lista_paczek +from ekran import lista_itemow +from letter import Letter +import plansza -listOfPackages = lista_paczek +listOfPackages = lista_itemow class Wozek(pygame.sprite.Sprite): def __init__(self): @@ -118,12 +120,18 @@ class Wozek(pygame.sprite.Sprite): else: self.image = pygame.transform.rotate(self.image, 90) - def picks_up_package(self): - paczka_pop = ekran.lista_paczek.pop() - ekran.lista_paczek_na_regalach.append(paczka_pop) - paczka_pop.is_in_move = True - self.storage.append(paczka_pop) - self.ln = self.ln + 1 + def picks_up_item(self): + item_pop = ekran.lista_itemow.pop() + if isinstance(item_pop,Letter): + ekran.lista_listow_w_skrzynce.append(item_pop) + item_pop.is_in_move = True + self.storage.append(item_pop) + self.ln = self.ln + 1 + else: + ekran.lista_paczek_na_regalach.append(item_pop) + item_pop.is_in_move = True + self.storage.append(item_pop) + self.ln = self.ln + 1 def drops_package(self, paczka, reg, predictions): paczka.update_position(reg.numerWiersza*70, reg.numerKolumny*70) @@ -132,3 +140,9 @@ class Wozek(pygame.sprite.Sprite): self.ln = self.ln - 1 reg.put_package_on_the_regal(paczka, predictions) + def drops_letter(self, letter): + letter.update_position(plansza.c_pix, plansza.d_pix) + letter.is_in_move = False + self.storage.pop() + self.ln = self.ln - 1 +