forked from s444420/AL-2020
114 lines
4.0 KiB
Python
114 lines
4.0 KiB
Python
import pygame
|
|
import functions
|
|
import sys
|
|
import time
|
|
import decision_tree
|
|
import data
|
|
|
|
from agent import Agent
|
|
from settings import Settings
|
|
from board import create_board, draw_board, get_shelfs
|
|
from random import randint, choice
|
|
from mcda import selectedSupply
|
|
from product import FinalProduct
|
|
from coder import create_image
|
|
|
|
|
|
# Inicjalizacja programu i utworzenie obiektu ekrany
|
|
def run():
|
|
pygame.init()
|
|
settings = Settings()
|
|
screen = pygame.display.set_mode((settings.screen_width, settings.screen_height))
|
|
pygame.display.set_caption("Inteligentny wózek widłowy")
|
|
agent = Agent(screen, 550, 450, "Down")
|
|
board = create_board(screen)
|
|
my_tree = decision_tree.build_tree(data.learning_data)
|
|
products_from_supply = []
|
|
supply_depot = board[9][0]
|
|
|
|
path = []
|
|
next_step = None
|
|
# Rozpoczęcie głównej pętli programu
|
|
while True:
|
|
# functions.check_events(agent, board)
|
|
# functions.update_screen(board, screen, agent)
|
|
#
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
sys.exit()
|
|
elif event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_RIGHT:
|
|
agent.turn_right()
|
|
elif event.key == pygame.K_LEFT:
|
|
agent.turn_left()
|
|
elif event.key == pygame.K_UP:
|
|
agent.move_forward(board)
|
|
elif event.key == pygame.K_DOWN:
|
|
agent.item = None
|
|
agent.is_busy = False
|
|
elif event.key == pygame.K_SPACE:
|
|
products_from_supply = selectedSupply()
|
|
|
|
# print("Wybrano: " + board[9][0].item[-1])
|
|
# field = board[9][0]
|
|
# if not field.is_shelf:
|
|
# path = functions.a_star(board[agent.y][agent.x], field, board)
|
|
# path.pop(len(path) - 1)
|
|
# next_step = path.pop(len(path) - 1)
|
|
|
|
if len(products_from_supply) != 0 and supply_depot.is_empty is True and agent.is_busy is False:
|
|
supply_depot.item = products_from_supply.pop(0)
|
|
print(supply_depot.item)
|
|
path = functions.a_star(board[agent.y][agent.x], supply_depot, board)
|
|
path.pop(len(path) - 1)
|
|
next_step = path.pop(len(path) - 1)
|
|
agent.is_busy = True
|
|
|
|
if board[agent.y][agent.x].item and agent.item is None:
|
|
prediction = decision_tree.print_leaf(decision_tree.classify(board[agent.y][agent.x].item, my_tree))
|
|
print("Agent uważa, że przedmiot to: " + prediction[0])
|
|
new_product = FinalProduct(supply_depot.item[0], supply_depot.item[1], supply_depot.item[2],
|
|
supply_depot.item[3], prediction[0])
|
|
print(new_product)
|
|
|
|
'''
|
|
Wyznacza patha do polki na ktora ma polozyc produkt.
|
|
'''
|
|
# list [x, y]
|
|
dest_shelf = new_product.shelf()
|
|
dest_field = board[dest_shelf[0]][dest_shelf[1]]
|
|
path = functions.a_star(board[agent.y][agent.x], dest_field, board)
|
|
|
|
''''''
|
|
agent.item = new_product
|
|
path.pop(len(path) - 1)
|
|
next_step = path.pop(len(path) - 1)
|
|
agent.is_busy = True
|
|
|
|
|
|
if next_step is not None:
|
|
time.sleep(0.5)
|
|
if functions.check_turn(agent, next_step):
|
|
agent.move_forward(board)
|
|
if len(path) != 0:
|
|
next_step = path.pop()
|
|
else:
|
|
next_step = None
|
|
# print(next_step, path)
|
|
for row in board:
|
|
for field in row:
|
|
if not field.is_shelf:
|
|
field.image = pygame.image.load('img/Field.png')
|
|
|
|
else:
|
|
functions.change_turn(agent, next_step)
|
|
|
|
draw_board(board)
|
|
agent.blitme()
|
|
|
|
pygame.display.flip()
|
|
|
|
|
|
|
|
run()
|