import secrets import sys from random import randrange from src.decisionTree import * from src.plate import * from src.SubprojectMaksymilianKierski.PlateRecognition import use_model_to_predict, text_speech # Marcin Dobrowolski from src.SubprojectMarcinDobrowolski.suggestionDecisionTree import * from src.SubprojectMarcinDobrowolski.utility import generateTestData, generateTestExample from src.guest import * if __name__ == "__main__": # SETUP pygame.init() clock = pygame.time.Clock() graphics = Graphics() waiter = Waiter(graphics) tree = DecisionTree() # Init functions graphics.drawBackground(waiter.matrix) graphics.update(waiter) # AStar goal = None path = '' # Dominik queue = [] fromBar = 0 barNode = (3, 12) node = () # Marcin Dobrowolski suggestionTreeRoot = SuggestionTree.buildTree(trainingData) newGuests = [] actions = [] # Maksymilian go = 0 randGo = 0 waitPos = [[1, 2], [1, 5], [1, 8], [5, 4], [5, 8], [8, 2], [8, 5], [8, 8], [12, 3], [12, 7]] tabPos = [[1, 2], [1, 5], [1, 8], [5, 4], [5, 8], [8, 2], [8, 5], [8, 8], [12, 3], [12, 7]] pltPos = [[2, 3], [2, 6], [2, 9], [4, 4], [4, 8], [9, 3], [9, 6], [9, 9], [11, 3], [11, 8]] plateArr = [] def changePlate(): if plateArr and len(plateArr) > 0: if randrange(30) == 17: plate = random.choice(plateArr) if not plate.empty: randomPlate = randrange(5) + 10 plate.changePlate('plate-empty.png', 'test-{}'.format(randomPlate)) def addGuest(): if randrange(10) == 5 and path == '': newGuests.append(Guest(graphics)) guest = newGuests[len(newGuests) - 1] goal = [0, 0] goal[0] = guest.cord[0] goal[1] = guest.cord[1] tree.TasksList('order', goal, [waiter.X, waiter.Y]) tree.print() print(actions) return tree.ReturnQueueList() while True: changePlate() queue = addGuest() for event in pygame.event.get(): # rabbit.check(waiter.matrix, waiter.X, waiter.Y) if event.type == pygame.QUIT: pygame.quit() sys.exit() break if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() break if event.key == pygame.K_s: waitPosition = [waiter.X, waiter.Y] tree.TasksList('check', [2, 3], waitPosition) tree.TasksList('eat', [9, 6], waitPosition) tree.TasksList('order', [4, 8], waitPosition) tree.TasksList('goToBar', [11, 4], waitPosition) tree.TasksList('check', [2, 9], waitPosition) tree.TasksList('eat', [1, 1], waitPosition) queue = tree.ReturnQueueList() tree.print() if event.key == pygame.K_m: if (not [waiter.X, waiter.Y] in waitPos) or go == 0: if [waiter.X, waiter.Y] in waitPos: model = 'waiter_' + waiter.direction for x in range(-1, 2): waiterX = waiter.X + (x * 0.1) graphics.clear(waiterX, waiter.Y - 1) rand = randrange(9) # if this plate is exists print(rand) if plateArr and len(plateArr) >= rand and plateArr[rand] in plateArr: randGo = rand goal = (plateArr[randGo].table[0], plateArr[randGo].table[1]) path = waiter.findPath(goal) path = waiter.translatePath(path) print('sec-1') go = 1 # if this plate is not exists else: randTable = random.choice(tabPos) randIndex = tabPos.index(randTable) tableCord = tabPos[randIndex] plateCord = pltPos[randIndex] print('rand{}'.format(randIndex)) pictureAI = 'test-{}'.format(randIndex) plateArr.append(Plate(graphics, plateCord, tableCord, 'plate-full.png', pictureAI)) tabPos.pop(randIndex) pltPos.pop(randIndex) print(plateArr, pltPos) goal = (plateArr[len(plateArr) - 1].table[0], plateArr[len(plateArr) - 1].table[1]) randGo = len(plateArr) - 1 path = waiter.findPath(goal) path = waiter.translatePath(path) print('sec-2') go = 1 else: if plateArr[randGo].checked: predict = 'CHECKED' else: predict = use_model_to_predict(plateArr[randGo].pictureAI) if predict == 1: predict = 'EMPTY' plateArr[randGo].checkPlate() else: predict = 'FOOD' print('sec-3') text_speech('arialnarrow.ttf', 25, predict, (255, 255, 255), (0, 128, 0), (waiter.X * 50 + 25), (waiter.Y * 50 - 25), False, False, screen=graphics.screen) pygame.display.flip() go = 0 # Marcin Dobrowolski if event.key == pygame.K_0: newGuests.append(Guest(graphics)) # Marcin Dobrowolski if event.key == pygame.K_1: guest = newGuests[0] goal = [0, 0] if guest.cord[0] == 2 or guest.cord[1] == 9: goal[0] = guest.cord[0] - 1 goal[1] = guest.cord[1] else: goal[0] = guest.cord[0] + 1 goal[1] = guest.cord[1] actions.append(('takeOrder', goal)) print(actions) # AStar if event.key == pygame.K_r: temp = False while not temp: x = secrets.randbelow(graphics.width) y = secrets.randbelow(graphics.height) print(x, y) if waiter.matrix.matrix[x][y].walk_through == 1: temp = True goal = (x, y) path = waiter.findPath(goal) path = waiter.translatePath(path) # Dominik if queue and path == '' and fromBar == 0: task = queue.pop(0) tree.RemoveTask() node = (task[2][0], task[2][1]) if task[0] == "goToBar": path = waiter.findPath(barNode) fromBar = 1 else: path = waiter.findPath(node) path = waiter.translatePath(path) if path == '' and fromBar == 1: path = waiter.findPath(node) path = waiter.translatePath(path) fromBar = 0 # AStar if path == '' and actions: print('Goal: {}'.format(actions[0][1])) path = waiter.findPath(actions[0][1]) print('Path: {}'.format(path)) path = waiter.translatePath(path) print('Translated path: {}'.format(path)) if path != '': nextStep = path[0] path = path[1:] waiter.travel(nextStep, graphics) if path == '': print('') # action = actions.pop(0) # if action[0] == 'takeOrder': # guest = newGuests.pop(0) # waiter.takeOrder(suggestionTreeRoot, guest) # graphics.clearGuest(guest) # tables.append(guest.cord) pygame.display.flip() clock.tick(graphics.fps)