merged bfs with picking up packages

This commit is contained in:
Mateusz Kantorski 2023-05-06 14:54:04 +02:00
parent e236cfe6f9
commit 642132e0f4
6 changed files with 174 additions and 117 deletions

View File

@ -1,6 +1,10 @@
import pygame import pygame
import packageList
import regal import regal
import wozek import wozek
from packageList import *
from paczka import Paczka
EKRAN_SZEROKOSC = 980 EKRAN_SZEROKOSC = 980
EKRAN_WYSOKOSC = 980 EKRAN_WYSOKOSC = 980
@ -10,6 +14,7 @@ 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)
lista_paczek = packageList.zainicjuj_liste_paczek()
def narysuj_regaly(): def narysuj_regaly():
regal.Regal(1, 1, 2, 2) regal.Regal(1, 1, 2, 2)
@ -46,6 +51,7 @@ 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))
narysuj_siatke() narysuj_siatke()
narysuj_paczki(wozek)
narysuj_regaly() narysuj_regaly()
wozek.draw() wozek.draw()
pygame.display.flip() pygame.display.flip()
@ -65,3 +71,9 @@ def sprawdz_ktora_kolumna(y):
if y < i: if y < i:
return nr_kolumny return nr_kolumny
nr_kolumny = nr_kolumny + 1 nr_kolumny = nr_kolumny + 1
def narysuj_paczki(wozek):
if wozek.ln == 0:
for paczka in lista_paczek.list:
paczka.narysuj(430, 400, screen)

View File

@ -1,16 +1,10 @@
#from main import pygame
import secrets, string import secrets, string
class Etykieta: class Etykieta:
def __init__(self, id, nadawca, adres, imie, nazwisko, telefon): def __init__(self, nadawca, adres, imie, nazwisko, telefon):
self.nadawca = nadawca self.nadawca = nadawca
self.adres = adres self.adres = adres
self.imie = imie self.imie = imie
self.nazwisko = nazwisko self.nazwisko = nazwisko
self.telefon = telefon 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))

141
main.py
View File

@ -1,69 +1,72 @@
import sys import sys
import pygame import pygame
import regal from wozek import Wozek
import paczka import wyszukiwanie
from wozek import Wozek import ekran
import wyszukiwanie
import ekran pygame.init()
pygame.init()
# screen = pygame.display.set_mode((980, 980))
# miejsce = pygame.image.load('images/miejsce_paczek.png') def main():
# wozek = Wozek()
# pygame.display.set_caption("Inteligentny wozek")
# icon = pygame.image.load('images/icon.png') while True:
# pygame.display.set_icon(icon) for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit(0)
def main(): if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
wozek = Wozek() sys.exit(0)
while True: if event.type == pygame.MOUSEBUTTONDOWN:
for event in pygame.event.get(): # lewy przycisk myszy
if event.type == pygame.QUIT: if event.button == 1:
sys.exit(0) x = pygame.mouse.get_pos()[0]
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: y = pygame.mouse.get_pos()[1]
sys.exit(0) wiersz = ekran.sprawdz_ktory_wiersz(x)
if event.type == pygame.MOUSEBUTTONDOWN: kolumna = ekran.sprawdz_ktora_kolumna(y)
# lewy przycisk myszy docelowy_stan = wyszukiwanie.Stan(wiersz * 70, kolumna * 70, 0)
if event.button == 1: wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan)
x = pygame.mouse.get_pos()[0] sciezka = wyszukiwanie.znajdz_sciezke(wezel)
y = pygame.mouse.get_pos()[1] wozek.przemiesc_wozek_po_sciezce(sciezka)
wiersz = ekran.sprawdz_ktory_wiersz(x)
kolumna = ekran.sprawdz_ktora_kolumna(y) if event.type == pygame.KEYDOWN:
docelowy_stan = wyszukiwanie.Stan(wiersz*70, kolumna*70, 0) if event.key == pygame.K_DOWN:
wezel = wyszukiwanie.wyszukiwanie_bfs(wozek.obecnyStan, docelowy_stan) wozek.y_change = 1
sciezka = wyszukiwanie.znajdz_sciezke(wezel) if event.key == pygame.K_UP:
wozek.przemiesc_wozek_po_sciezce(sciezka) wozek.y_change = -1
if event.key == pygame.K_RIGHT:
if event.type == pygame.KEYDOWN: wozek.x_change = 1
if event.key == pygame.K_DOWN: if event.key == pygame.K_LEFT:
wozek.y_change = 1 wozek.x_change = -1
if event.key == pygame.K_UP:
wozek.y_change = -1 if event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT: if event.key == pygame.K_DOWN or event.key == pygame.K_UP:
wozek.x_change = 1 wozek.y_change = 0
if event.key == pygame.K_LEFT: if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
wozek.x_change = -1 wozek.x_change = 0
if event.type == pygame.KEYUP: if event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN or event.key == pygame.K_UP: if event.key == pygame.K_SPACE:
wozek.y_change = 0 if wozek.ln == 0:
if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT: wozek.load_package()
wozek.x_change = 0 wozek.dynamic_wozek_picture()
else:
wozek.obecnyStan.x += wozek.x_change wozek.drop_package()
wozek.obecnyStan.y += wozek.y_change wozek.dynamic_wozek_picture()
if wozek.obecnyStan.x <= 0: wozek.obecnyStan.x += wozek.x_change
wozek.obecnyStan.x = 0 wozek.obecnyStan.y += wozek.y_change
elif wozek.obecnyStan.x >= 916:
wozek.obecnyStan.x = 916 if wozek.obecnyStan.x <= 0:
if wozek.obecnyStan.y <= 0: wozek.obecnyStan.x = 0
wozek.obecnyStan.y = 0 elif wozek.obecnyStan.x >= 916:
elif wozek.obecnyStan.x >= 916: wozek.obecnyStan.x = 916
wozek.obecnyStan.x = 916 if wozek.obecnyStan.y <= 0:
wozek.obecnyStan.y = 0
ekran.odswiez_ekran(wozek) elif wozek.obecnyStan.x >= 916:
wozek.obecnyStan.x = 916
if __name__ == "__main__": ekran.odswiez_ekran(wozek)
main()
if __name__ == "__main__":
main()

16
packageList.py Normal file
View File

@ -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

View File

@ -6,14 +6,29 @@ class Paczka:
def __init__(self, rozmiar, waga, kategoria, czy_krucha, nadawca, adres, imie, nazwisko, telefon): def __init__(self, rozmiar, waga, kategoria, czy_krucha, nadawca, adres, imie, nazwisko, telefon):
self.rozmiar = rozmiar 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.waga = waga
self.kategoria = kategoria self.kategoria = kategoria
self.czy_krucha = czy_krucha self.czy_krucha = czy_krucha
self.x = 0 self.x = 430
self.y = 0 self.y = 400
self.szerokosc = 0
self.wysokosc = 0
self.image = pygame.image.load("images/paczka.png")
self.label = Etykieta(nadawca, adres, imie, nazwisko, telefon) self.label = Etykieta(nadawca, adres, imie, nazwisko, telefon)
# zmienia rozmiar obrazka w zaleznosci od rozmiaru # zmienia rozmiar obrazka w zaleznosci od rozmiaru

View File

@ -1,12 +1,13 @@
import pygame
import ekran import ekran
import pygame,math
from packageList import listOfPackages
class Wozek(): class Wozek():
def __init__(self): def __init__(self):
self.obecnyStan = None self.obecnyStan = None
self.x = 55 # self.x = 55
self.y = 55 # self.y = 55
self.x_change = 0 self.x_change = 0
self.y_change = 0 self.y_change = 0
self.height = 64 self.height = 64
@ -19,32 +20,48 @@ class Wozek():
def draw(self): def draw(self):
ekran.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 = ["none"] * 10
storage = [] storage = []
max_size = 10 max_size = 10
ln = len(storage)
def add_element(element, storage, max_size): def add_element(self, element):
if len(storage) < max_size: if self.ln < self.max_size:
storage.append(element) self.storage.append(element)
self.ln=self.ln+1
else: else:
print("I'm full!") print("I'm full!")
def remove_element(self):
def remove_element(storage): if self.ln > 0:
if len(storage) > 0: element = self.storage.pop()
place = storage.pop() self.ln=self.ln-1
return place return element
else: else:
print("I'm empty!") print("I'm empty!")
def dynamic_wozek_picture(wozek, storage): def dynamic_wozek_picture(self):
if len(storage) == 0: if self.ln == 0:
wozek.image = pygame.image.load("images/pusty_wozek.png") self.image = pygame.image.load("images/pusty_wozek.png")
elif ((len(storage) > 0) and (len(storage) < 4)): elif ((self.ln > 0) and (self.ln < 4)):
wozek.image = pygame.image.load("images/pelny_wozek_1_crate.png") self.image = pygame.image.load("images/pelny_wozek_1_crate.png")
elif ((len(storage) > 3) and (len(storage) < 10)): elif ((self.ln > 3) and (self.ln < 10)):
wozek.image = pygame.image.load("images/pelny_wozek_2_crates.png") self.image = pygame.image.load("images/pelny_wozek_2_crates.png")
elif (len(storage) == 10): elif (self.ln == 10):
wozek.image = pygame.image.load("images/pelny_wozek_full_3_crates.png") 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): def __zainicjuj_stan_poczatkowy(self):
from wyszukiwanie import Stan from wyszukiwanie import Stan
@ -61,18 +78,18 @@ class Wozek():
pygame.time.wait(500) pygame.time.wait(500)
def ustaw_wozek_w_kierunku(self, kierunek_obecny, kierunek_poprzedni): def ustaw_wozek_w_kierunku(self, kierunek_obecny, kierunek_poprzedni):
if kierunek_poprzedni < kierunek_obecny: if kierunek_poprzedni < kierunek_obecny:
#obrot w lewo # obrot w lewo
if kierunek_poprzedni == 0 and kierunek_obecny == 3: if kierunek_poprzedni == 0 and kierunek_obecny == 3:
self.image = pygame.transform.rotate(self.image, 90) self.image = pygame.transform.rotate(self.image, 90)
# obrot w prawo # obrot w prawo
else: else:
self.image = pygame.transform.rotate(self.image, -90) self.image = pygame.transform.rotate(self.image, -90)
elif kierunek_poprzedni > kierunek_obecny: elif kierunek_poprzedni > kierunek_obecny:
# obrot w prawo # obrot w prawo
if kierunek_poprzedni == 3 and kierunek_obecny == 0: if kierunek_poprzedni == 3 and kierunek_obecny == 0:
self.image = pygame.transform.rotate(self.image, -90) self.image = pygame.transform.rotate(self.image, -90)
# obrot w lewo # obrot w lewo
else: else:
self.image = pygame.transform.rotate(self.image, 90) self.image = pygame.transform.rotate(self.image, 90)