First GUI

This commit is contained in:
Michal Kijowski 2020-03-26 21:09:41 +00:00
parent dce0454cdb
commit daf1118ed2
5 changed files with 228 additions and 0 deletions

12
floor.py Normal file
View File

@ -0,0 +1,12 @@
import pygame
class Floor:
def __init__(self, screen, cell, we, ns):
self.cell = cell
self.ns = ns
self.we = we
self.screen = screen
self.image = pygame.image.load(r'images/po.png')
self.image = pygame.transform.scale(self.image, (cell, cell))
def draw(self):
self.screen.blit(self.image, (self.cell*self.ns, self.cell*self.we))

121
generate.py Normal file
View File

@ -0,0 +1,121 @@
class Generate:
@staticmethod
def generate(szerokosc, wysokosc, kruche, latwopalne, radioaktywne, niebezpieczne):
# 1 - sciana
# 2 - podłoga
# 3 - regał od dołu (zwykly)
# 4 - regał od gory (zwykly)
# 5 - regał od lewej (zwykly)
# 6 - regał od prawej (zwykly)
# 7 - regał od dołu (kruche)
# 8 - regał od gory (kruche)
# 9 - regał od lewej (kruche)
# 10 - regał od prawej (kruche)
# 11 - regał od dołu (latwopalne)
# 12 - regał od gory (latwopalne)
# 13 - regał od lewej (latwopalne)
# 14 - regał od prawej (latwopalne)
# 15 - regał od dołu (radioaktywne)
# 16 - regał od gory (radioaktywne)
# 17 - regał od lewej (radioaktywne)
# 18 - regał od prawej (radioaktywne)
# 19 - regał od dołu (niebezpieczne)
# 20 - regał od gory (niebezpieczne)
# 21 - regał od lewej (niebezpieczne)
# 22 - regał od prawej (niebezpieczne)
all = []
tmp = []
for i in range(0, wysokosc):
for j in range(0, szerokosc):
tmp.append(2)
all.append(tmp)
tmp = []
for i in range(0, szerokosc):
all[0][i] = 1
all[wysokosc-1][i] = 1
for i in range(0, wysokosc):
all[i][0] = 1
all[i][szerokosc-1] = 1
if (kruche>0):
for i in range(2, szerokosc-2):
all[1][i] = 7
kruche-=1
elif (latwopalne>0):
for i in range(2, szerokosc-2):
all[1][i] = 11
latwopalne-=1
elif (radioaktywne>0):
for i in range(2, szerokosc-2):
all[1][i] = 15
radioaktywne-=1
elif (niebezpieczne>0):
for i in range(2, szerokosc-2):
all[1][i] = 19
niebezpieczne-=1
else:
for i in range(2, szerokosc-2):
all[1][i] = 3
if (kruche>0):
for i in range(2, wysokosc-2):
all[i][szerokosc-2] = 9
kruche-=1
elif (latwopalne>0):
for i in range(2, wysokosc-2):
all[i][szerokosc-2] = 13
latwopalne-=1
elif (radioaktywne>0):
for i in range(2, wysokosc-2):
all[i][szerokosc-2] = 17
radioaktywne-=1
elif (niebezpieczne>0):
for i in range(2, wysokosc-2):
all[i][szerokosc-2] = 21
niebezpieczne-=1
else:
for i in range(2, wysokosc-2):
all[i][szerokosc-2] = 5
if (kruche>0):
for i in range(2, szerokosc-2):
all[wysokosc-2][i] = 8
kruche-=1
elif (latwopalne>0):
for i in range(2, szerokosc-2):
all[wysokosc-2][i] = 12
latwopalne-=1
elif (radioaktywne>0):
for i in range(2, szerokosc-2):
all[wysokosc-2][i] = 16
radioaktywne-=1
elif (niebezpieczne>0):
for i in range(2, szerokosc-2):
all[wysokosc-2][i] = 20
niebezpieczne-=1
else:
for i in range(2, szerokosc-2):
all[wysokosc-2][i] = 4
if (kruche>0):
for i in range(2, wysokosc-2):
all[i][1] = 10
kruche-=1
elif (latwopalne>0):
for i in range(2, wysokosc-2):
all[i][1] = 14
latwopalne-=1
elif (radioaktywne>0):
for i in range(2, wysokosc-2):
all[i][1] = 18
radioaktywne-=1
elif (niebezpieczne>0):
for i in range(2, wysokosc-2):
all[i][1] = 22
niebezpieczne-=1
else:
for i in range(2, wysokosc-2):
all[i][1] = 6
all[1][1] = 1
all[1][szerokosc-2] = 1
all[wysokosc-2][1] = 1
all[wysokosc-2][szerokosc-2] = 1
all[0][2] = 2
all[1][2] = 2
return all

36
main.py Normal file
View File

@ -0,0 +1,36 @@
from easygui import *
from program import MainWindow
import os;
def main():
good = False
while (True):
good = True
fieldValues = multenterbox("Wprowadź warunki początkowe", "Start programu", ["Szerekość kraty (>=6)", "Wysokość kraty (>=5)", "Ilość regałów kruchych", "Ilość regałów łatwopalnych", "Ilość regałów radioaktywnych", "Ilość regałów niebezpiecznych"])
if(fieldValues[0].isnumeric() and (fieldValues[0]!="")):
if(int(fieldValues[0])<=5):
msgbox("Szerokość kraty jest zbyt mała, aby można było uruchomić program", "Błąd")
good = False
elif(good==True):
msgbox("Wartość nie jest liczbą", "Błąd")
good = False
if(fieldValues[1].isnumeric() and (fieldValues[0]!="")):
if((int(fieldValues[1])<=4) and (good==True)):
msgbox("Wysokość kraty jest zbyt mała, aby można było uruchomić program", "Błąd")
good = False
elif (good == True):
msgbox("Wartość nie jest liczbą", "Błąd")
good = False
if ((fieldValues[2].isnumeric()) and (fieldValues[3].isnumeric()) and (fieldValues[4].isnumeric()) and (fieldValues[5].isnumeric()) and (fieldValues[2]!="") and (fieldValues[3]!="") and (fieldValues[4]!="") and (fieldValues[5]!="") and (good==True)):
sum = int(fieldValues[2])+int(fieldValues[3])+int(fieldValues[4])+int(fieldValues[5])
allow = 6+(((int(fieldValues[0])-6)//3)*2)
if(sum>allow):
msgbox("Magazyn zbyt mały co by pomieścił tyle regałów", "Błąd")
good = False
elif (good == True):
msgbox("Wartość nie jest liczbą", "Błąd")
good = False
if good:
window = MainWindow(int(fieldValues[0]), int(fieldValues[1]), int(fieldValues[2]), int(fieldValues[3]), int(fieldValues[4]), int(fieldValues[5]));
break
main()

41
program.py Normal file
View File

@ -0,0 +1,41 @@
import pygame
from os import sys
from generate import Generate
from floor import Floor
from wall import Wall
from shelf import Shelf
from wheelchair import Wheelchair
class MainWindow:
def __init__(self, szerokosc, wysokosc, kruche, latwopalne, radioaktywne, niebezpieczne):
#config
self.cell = 50
#init
pygame.init()
pygame.display.set_caption('Inteligentny wózek widłowy')
self.map = Generate.generate(szerokosc+2, wysokosc+2, kruche, latwopalne, radioaktywne, niebezpieczne)
self.screen = pygame.display.set_mode((((szerokosc+2)*self.cell), ((wysokosc+2)*self.cell)))
#create
for i in range(len(self.map)):
for j in range(len(self.map[i])):
if (self.map[i][j]==1):
self.map[i][j] = Wall(self.screen, self.cell, i, j)
elif (self.map[i][j]==2):
self.map[i][j] = Floor(self.screen, self.cell, i, j)
else:
self.map[i][j] = Shelf(self.screen, self.cell, i, j, (self.map[i][j]-3)%4, (self.map[i][j]-3)//4)
#loop
while True:
self.events()
self.draw()
def events(self):
for event in pygame.event.get():
if(event.type==pygame.QUIT):
sys.exit()
def draw(self):
self.screen.fill((255,255,255))
for i in range(len(self.map)):
for j in range(len(self.map[i])):
self.map[i][j].draw()
pygame.display.flip()

18
shelf.py Normal file
View File

@ -0,0 +1,18 @@
import pygame
class Shelf:
def __init__(self, screen, cell, we, ns, kierunek, rodzaj):
self.cell = cell
self.ns = ns
self.we = we
self.screen = screen
self.image = pygame.image.load(r'images/re.png')
self.image = pygame.transform.scale(self.image, (cell, cell))
if (kierunek==1):
self.image = pygame.transform.rotate(self.image, 180)
elif (kierunek==2):
self.image = pygame.transform.rotate(self.image, 270)
elif (kierunek==3):
self.image = pygame.transform.rotate(self.image, 90)
def draw(self):
self.screen.blit(self.image, (self.cell*self.ns, self.cell*self.we))