Compare commits
No commits in common. "d8d4bde5d9250a5361939352b32fd7cb86c61306" and "a90c30ae321a9641f15e7eb09c491841d5daf25a" have entirely different histories.
d8d4bde5d9
...
a90c30ae32
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.
79
ekran.py
79
ekran.py
@ -1,79 +0,0 @@
|
|||||||
import pygame
|
|
||||||
|
|
||||||
import packageList
|
|
||||||
import regal
|
|
||||||
import wozek
|
|
||||||
from packageList import *
|
|
||||||
from paczka import Paczka
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
lista_paczek = packageList.zainicjuj_liste_paczek()
|
|
||||||
|
|
||||||
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 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))
|
|
||||||
narysuj_siatke()
|
|
||||||
narysuj_paczki(wozek)
|
|
||||||
narysuj_regaly()
|
|
||||||
wozek.draw()
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
def narysuj_paczki(wozek):
|
|
||||||
if wozek.ln == 0:
|
|
||||||
for paczka in lista_paczek.list:
|
|
||||||
paczka.narysuj(430, 400, screen)
|
|
83
main.py
83
main.py
@ -1,14 +1,28 @@
|
|||||||
import sys
|
import sys
|
||||||
import pygame
|
import pygame
|
||||||
|
import regal
|
||||||
|
from paczka import Paczka
|
||||||
from wozek import Wozek
|
from wozek import Wozek
|
||||||
import wyszukiwanie
|
from packageList import listOfPackages
|
||||||
import ekran
|
|
||||||
|
|
||||||
pygame.init()
|
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 draw(self):
|
||||||
|
screen.blit(self.image, (self.x, self.y))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
wozek = Wozek()
|
wozek = Wozek()
|
||||||
|
packageList = listOfPackages()
|
||||||
|
demo_paczka = Paczka('duzy', 10, any, False, any, any, any, any, any)
|
||||||
|
packageList.add(demo_paczka)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
@ -16,17 +30,6 @@ def main():
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
|
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
|
||||||
sys.exit(0)
|
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.type == pygame.KEYDOWN:
|
||||||
if event.key == pygame.K_DOWN:
|
if event.key == pygame.K_DOWN:
|
||||||
@ -53,19 +56,51 @@ def main():
|
|||||||
wozek.drop_package()
|
wozek.drop_package()
|
||||||
wozek.dynamic_wozek_picture()
|
wozek.dynamic_wozek_picture()
|
||||||
|
|
||||||
wozek.obecnyStan.x += wozek.x_change
|
wozek.x += wozek.x_change
|
||||||
wozek.obecnyStan.y += wozek.y_change
|
wozek.y += wozek.y_change
|
||||||
|
|
||||||
if wozek.obecnyStan.x <= 0:
|
if wozek.x <= 0:
|
||||||
wozek.obecnyStan.x = 0
|
wozek.x = 0
|
||||||
elif wozek.obecnyStan.x >= 916:
|
elif wozek.x >= 916:
|
||||||
wozek.obecnyStan.x = 916
|
wozek.x = 916
|
||||||
if wozek.obecnyStan.y <= 0:
|
if wozek.y <= 0:
|
||||||
wozek.obecnyStan.y = 0
|
wozek.y = 0
|
||||||
elif wozek.obecnyStan.x >= 916:
|
elif wozek.x >= 916:
|
||||||
wozek.obecnyStan.x = 916
|
wozek.x = 916
|
||||||
|
|
||||||
ekran.odswiez_ekran(wozek)
|
# 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)
|
||||||
|
|
||||||
|
draw(wozek)
|
||||||
|
if wozek.ln == 0:
|
||||||
|
for x in packageList.list:
|
||||||
|
draw(x)
|
||||||
|
#demo_paczka.narysuj(430,400,screen)
|
||||||
|
|
||||||
|
pygame.display.flip() # updating frames
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -1,16 +1,8 @@
|
|||||||
|
|
||||||
class listOfPackages:
|
class listOfPackages:
|
||||||
list = []
|
list = []
|
||||||
|
|
||||||
def add(self, item):
|
def add(self, item):
|
||||||
self.list.append(item)
|
self.list.append(item)
|
||||||
|
|
||||||
def remove(self):
|
def remove(self):
|
||||||
self.list.pop()
|
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
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from etykieta import Etykieta
|
from etykieta import Etykieta
|
||||||
import pygame
|
from main import pygame
|
||||||
|
|
||||||
|
|
||||||
class Paczka:
|
class Paczka:
|
||||||
|
10
regal.py
10
regal.py
@ -1,12 +1,12 @@
|
|||||||
import pygame
|
import pygame
|
||||||
|
|
||||||
|
from main import screen
|
||||||
|
|
||||||
def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele
|
def obliczPixeleNaPodstawieKratek(wymiar): #Przeliczanie współrzędnych podanych w kratkach na pixele
|
||||||
i = 1
|
i = 1
|
||||||
# pixele = 100
|
pixele = 100
|
||||||
pixele = 73
|
|
||||||
while (i < wymiar):
|
while (i < wymiar):
|
||||||
pixele = pixele + 70
|
pixele = pixele + 80
|
||||||
i = i + 1
|
i = i + 1
|
||||||
return pixele
|
return pixele
|
||||||
|
|
||||||
@ -20,7 +20,6 @@ def obliczPixeleDlugosciRegalu(self): #Przeliczanie dlugości regału podanego
|
|||||||
|
|
||||||
class Regal:
|
class Regal:
|
||||||
def __init__(self, numerRegalu, dlugoscRegaluWKratkach, numerWiersza, numerKolumny):
|
def __init__(self, numerRegalu, dlugoscRegaluWKratkach, numerWiersza, numerKolumny):
|
||||||
from ekran import screen
|
|
||||||
self.numerRegalu = numerRegalu
|
self.numerRegalu = numerRegalu
|
||||||
self.wysokoscRegalu = 64
|
self.wysokoscRegalu = 64
|
||||||
self.dlugoscRegaluWKratkach = dlugoscRegaluWKratkach
|
self.dlugoscRegaluWKratkach = dlugoscRegaluWKratkach
|
||||||
@ -30,9 +29,6 @@ class Regal:
|
|||||||
self.kolumna = obliczPixeleNaPodstawieKratek(numerKolumny)
|
self.kolumna = obliczPixeleNaPodstawieKratek(numerKolumny)
|
||||||
self.dlugosc = obliczPixeleDlugosciRegalu(self)
|
self.dlugosc = obliczPixeleDlugosciRegalu(self)
|
||||||
|
|
||||||
# from main import screen
|
|
||||||
# from ekran import screen
|
|
||||||
|
|
||||||
if(self.numerRegalu >= 0 and self.numerRegalu <= 4):
|
if(self.numerRegalu >= 0 and self.numerRegalu <= 4):
|
||||||
reg = pygame.Surface([self.dlugosc, self.wysokoscRegalu])
|
reg = pygame.Surface([self.dlugosc, self.wysokoscRegalu])
|
||||||
reg = pygame.image.load("images/regal.png")
|
reg = pygame.image.load("images/regal.png")
|
||||||
|
48
wozek.py
48
wozek.py
@ -1,13 +1,10 @@
|
|||||||
import ekran
|
|
||||||
import pygame,math
|
import pygame,math
|
||||||
from packageList import listOfPackages
|
from packageList import listOfPackages
|
||||||
|
|
||||||
|
|
||||||
class Wozek():
|
class Wozek():
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
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
|
||||||
@ -15,10 +12,7 @@ class Wozek():
|
|||||||
self.image = pygame.image.load("images/pusty_wozek.png")
|
self.image = pygame.image.load("images/pusty_wozek.png")
|
||||||
# Credit: Forklift icons created by Smashicons - Flaticon
|
# Credit: Forklift icons created by Smashicons - Flaticon
|
||||||
# https://www.flaticon.com/free-icons/forklift
|
# https://www.flaticon.com/free-icons/forklift
|
||||||
self.__zainicjuj_stan_poczatkowy()
|
|
||||||
|
|
||||||
def draw(self):
|
|
||||||
ekran.screen.blit(self.image, (self.obecnyStan.x, self.obecnyStan.y))
|
|
||||||
|
|
||||||
#storage = ["none"] * 10
|
#storage = ["none"] * 10
|
||||||
storage = []
|
storage = []
|
||||||
@ -49,10 +43,9 @@ class Wozek():
|
|||||||
elif (self.ln == 10):
|
elif (self.ln == 10):
|
||||||
self.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):
|
def load_package(self):
|
||||||
for package in listOfPackages.list:
|
for package in listOfPackages.list:
|
||||||
dist = math.sqrt((self.obecnyStan.x - package.x)**2 + (self.obecnyStan.y - package.y)**2)
|
dist = math.sqrt((self.x - package.x)**2 + (self.y - package.y)**2)
|
||||||
if dist <= 50:
|
if dist <= 50:
|
||||||
self.add_element(package)
|
self.add_element(package)
|
||||||
listOfPackages.list.pop()
|
listOfPackages.list.pop()
|
||||||
@ -60,36 +53,5 @@ class Wozek():
|
|||||||
package = self.remove_element()
|
package = self.remove_element()
|
||||||
if package is not None:
|
if package is not None:
|
||||||
listOfPackages.list.append(package)
|
listOfPackages.list.append(package)
|
||||||
package.x = self.obecnyStan.x+50
|
package.x = self.x+50
|
||||||
package.y = self.obecnyStan.y
|
package.y = self.y
|
||||||
|
|
||||||
def __zainicjuj_stan_poczatkowy(self):
|
|
||||||
from wyszukiwanie import Stan
|
|
||||||
self.obecnyStan = Stan(70, 70, 1)
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
@ -1,87 +0,0 @@
|
|||||||
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, rodzic):
|
|
||||||
self.stan = stan
|
|
||||||
self.rodzic = rodzic
|
|
||||||
|
|
||||||
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
|
|
||||||
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 -= 70
|
|
||||||
elif wezel.stan.kierunek == 1:
|
|
||||||
x += 70
|
|
||||||
elif wezel.stan.kierunek == 2:
|
|
||||||
y += 70
|
|
||||||
elif wezel.stan.kierunek == 3:
|
|
||||||
x -= 70
|
|
||||||
|
|
||||||
wezly = [obrot_w_prawo, obrot_w_lewo]
|
|
||||||
ruch_w_przod = Wezel(Stan(x, y, wezel.stan.kierunek), licznik)
|
|
||||||
|
|
||||||
# sprawdzenie czy nie wyjdzie poza plansze
|
|
||||||
if 0 <= x <= 910 and 0 <= y <= 910:
|
|
||||||
wezly.append(ruch_w_przod)
|
|
||||||
|
|
||||||
return wezly
|
|
||||||
|
|
||||||
def wyszukiwanie_bfs(stan_poczatkowy, stan_docelowy):
|
|
||||||
pierwszy_wezel = Wezel(stan_poczatkowy, 0)
|
|
||||||
fringe = [pierwszy_wezel]
|
|
||||||
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 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_juz_odwiedzony == 1:
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
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
|
|
Loading…
Reference in New Issue
Block a user