From 642132e0f46d24b4bd03309cb1d61e4d3d579122 Mon Sep 17 00:00:00 2001 From: Mateusz Kantorski Date: Sat, 6 May 2023 14:54:04 +0200 Subject: [PATCH] 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)