import pygame from kelner.src.components.GridBoard import GridBoard from kelner.src.components.Waiter import Waiter from kelner.src.components.Table import Table 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 from kelner.src.algorithms.DecisionTree import Tree_Builder from kelner.src.managers.KitchenManager import KitchenManager from kelner.src.algorithms.CNN.PrepareData import LoadModelThread from kelner.src.algorithms.FoodNet import classify import kelner.src.settings as settings # import time # create screen consts Scale = 1 # 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': []} # initialize background gridBoard = GridBoard(ScreenWidth, ScreenHeight) classify.join('C:/Users/Maria/Desktop/ProjektAI/kelner/src/algorithms/FoodNet/classify.py') # 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() # TESTING THE DECISION TREE # Testing Data 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 Test_Tree = Tree_Builder.build_tree(testing_db) # Testing the tree 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) # 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) # adds waiter to drawable collection drawableManager.add(waiter1) # 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) # 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) # waiter2Task = WaiterManager(drawableManager, [waiter2]) # waiter2Task.start() # # waiter3Task = WaiterManager(drawableManager, [waiter3]) # waiter3Task.start() # # waiter4Task = WaiterManager(drawableManager, [waiter4]) # waiter4Task.start() # main loop running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: tableTask.stop() waiter1Task.stop() # waiter2Task.stop() # waiter3Task.stop() # waiter4Task.stop() running = False # handles keyboard events 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() 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() 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() 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() # 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()