1
0
forked from s444417/ProjektAI
ProjektAI/kelner/main.py

182 lines
7.0 KiB
Python
Raw Normal View History

2020-03-22 02:01:57 +01:00
import pygame
from kelner.src.components.GridBoard import GridBoard
from kelner.src.components.Waiter import Waiter
from kelner.src.components.Table import Table
2020-05-11 20:42:17 +02:00
from kelner.src.components.Kitchen import Kitchen
from kelner.src.managers.DrawableCollection import DrawableCollection
from kelner.src.managers.MenuManager import MenuManager
from kelner.src.managers.TableManager import TableManager
from kelner.src.managers.WaiterManager import WaiterManager
2020-05-10 00:04:33 +02:00
from kelner.src.algorithms.DecisionTree import Tree_Builder
from kelner.src.managers.KitchenManager import KitchenManager
from kelner.src.algorithms.CNN.PrepareData import LoadModelThread
import kelner.src.settings as settings
import time
2020-05-07 18:36:20 +02:00
# create screen consts
Scale = 2 # scale for all images used within project
CellSize = round(50 * Scale) # pixel size of 1 square cell in the grid
PaintOffset = CellSize # pixel size of paint offset for all drawables
GridCountX = 15 # number of columns in grid
GridCountY = 9 # number of rows in grid
ScreenWidth = CellSize * GridCountX + 2 * PaintOffset # screen width in pixels
ScreenHeight = CellSize * GridCountY + 2 * PaintOffset # screen height in pixels
running_tasks = {'table': [], 'waiter': []}
2020-03-22 02:01:57 +01:00
# initialize background
gridBoard = GridBoard(ScreenWidth, ScreenHeight)
2020-03-22 02:01:57 +01:00
# start loading prediction model
settings.init()
load_model_thread = LoadModelThread()
load_model_thread.start()
# joining this thread to main thread. Man thread will be started after this finish
load_model_thread.join()
# initialize drawable objects manager
drawableManager = DrawableCollection()
# initialize menu manager
menuManager = MenuManager()
2020-05-10 00:04:33 +02:00
##TESTING THE DECISION TREE
# Testing Data
2020-05-10 00:04:33 +02:00
testing_db = [
[1, 0, 0, 0, "Kurczak"],
[0, 1, 0, 0, "Piwo"],
[0, 0, 1, 0, "Pizza"],
[0, 0, 0, 1, "Salad"],
]
# Building a decision tree
2020-05-10 00:04:33 +02:00
Test_Tree = Tree_Builder.build_tree(testing_db)
# Testing the tree
2020-05-10 00:04:33 +02:00
if Tree_Builder.zgadnij(testing_db[0], Test_Tree) == "Kurczak":
print("test1: passed")
else:
print("test1: fail")
if Tree_Builder.zgadnij(testing_db[1], Test_Tree) == "Piwo":
print("test2: passed")
else:
print("test2: fail")
if Tree_Builder.zgadnij(testing_db[2], Test_Tree) == "Pizza":
print("test3: passed")
else:
print("test3: fail")
if Tree_Builder.zgadnij(testing_db[3], Test_Tree) == "Salad":
print("test4: passed")
else:
print("test4: fail")
# initialize waiter component
waiter1 = Waiter(0, 0, 0, GridCountX - 1, 0, GridCountY - 1, CellSize, PaintOffset)
2020-05-11 20:42:17 +02:00
# waiter2 = Waiter(0, GridCountY - 1, 0, GridCountX - 1, 0, GridCountY - 1, CellSize, PaintOffset)
# waiter3 = Waiter(GridCountX - 1, 0, 0, GridCountX - 1, 0, GridCountY - 1, CellSize, PaintOffset)
# waiter4 = Waiter(GridCountX - 1, GridCountY - 1, 0, GridCountX - 1, 0, GridCountY - 1, CellSize, PaintOffset)
2020-05-07 18:36:20 +02:00
# adds waiter to drawable collection
drawableManager.add(waiter1)
2020-05-11 20:42:17 +02:00
# drawableManager.add(waiter2)
# drawableManager.add(waiter3)
# drawableManager.add(waiter4)
kitchen = Kitchen(5, GridCountX - 5, 5, GridCountY - 5, CellSize, PaintOffset)
drawableManager.add(kitchen)
kitchenManager = KitchenManager(drawableManager, gridBoard)
# My comment
# initialize a number of tables given in range
for i in range(0, 40):
table = Table(1, GridCountX - 2, 1, GridCountY - 2, CellSize, PaintOffset)
if drawableManager.generatePosition(table):
drawableManager.add(table)
2020-03-22 02:01:57 +01:00
# new thread controlling tables
tableTask = TableManager(drawableManager, menuManager)
tableTask.start()
running_tasks['table'].append(tableTask)
# new thread controlling waiter
waiter1Task = WaiterManager(drawableManager, [waiter1], kitchenManager, menuManager, tableTask)
waiter1Task.start()
running_tasks['waiter'].append(tableTask)
2020-05-11 20:42:17 +02:00
# waiter2Task = WaiterManager(drawableManager, [waiter2])
# waiter2Task.start()
#
# waiter3Task = WaiterManager(drawableManager, [waiter3])
# waiter3Task.start()
#
# waiter4Task = WaiterManager(drawableManager, [waiter4])
# waiter4Task.start()
# main loop
2020-03-22 02:01:57 +01:00
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
tableTask.stop()
waiter1Task.stop()
2020-05-11 20:42:17 +02:00
# waiter2Task.stop()
# waiter3Task.stop()
# waiter4Task.stop()
2020-03-22 02:01:57 +01:00
running = False
# handles keyboard events
2020-03-22 02:01:57 +01:00
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
# checks if new waiter's position to the left is not occupied by other object
if drawableManager.isPositionAvailable(waiter1.getX() - 1, waiter1.getY()):
waiter1.moveLeft()
2020-03-22 02:01:57 +01:00
if event.key == pygame.K_RIGHT:
# checks if new waiter's position to the right is not occupied by other object
if drawableManager.isPositionAvailable(waiter1.getX() + 1, waiter1.getY()):
waiter1.moveRight()
2020-03-22 02:01:57 +01:00
if event.key == pygame.K_UP:
# checks if new waiter's position up is not occupied by other object
if drawableManager.isPositionAvailable(waiter1.getX(), waiter1.getY() - 1):
waiter1.moveUp()
2020-03-22 02:01:57 +01:00
if event.key == pygame.K_DOWN:
# checks if new waiter's position down is not occupied by other object
if drawableManager.isPositionAvailable(waiter1.getX(), waiter1.getY() + 1):
waiter1.moveDown()
if event.key == pygame.K_w:
# checks if new waiter's position to the left is not occupied by other object
if drawableManager.isPositionAvailable(waiter1.getX() - 1, waiter1.getY() - 1):
waiter1.moveLeft()
waiter1.moveUp()
if event.key == pygame.K_d:
# checks if new waiter's position to the right is not occupied by other object
if drawableManager.isPositionAvailable(waiter1.getX() + 1, waiter1.getY() - 1):
waiter1.moveRight()
waiter1.moveUp()
if event.key == pygame.K_s:
# checks if new waiter's position up is not occupied by other object
if drawableManager.isPositionAvailable(waiter1.getX() + 1, waiter1.getY() + 1):
waiter1.moveDown()
waiter1.moveRight()
if event.key == pygame.K_a:
# checks if new waiter's position down is not occupied by other object
if drawableManager.isPositionAvailable(waiter1.getX() - 1, waiter1.getY() + 1):
waiter1.moveDown()
waiter1.moveLeft()
drawableManager.forceRepaint()
2020-03-22 21:52:12 +01:00
# repaints all objects to the screen
# is set only on initial paint or after keyboard event or call to forceRepaint()
if drawableManager.mustRepaint():
if not kitchenManager.is_running():
gridBoard.reinitialize()
gridBoard.draw(drawableManager)
gridBoard.udpdate()