def main():

    barrier = ( (4,5),(5,5),(6,5),(4,6),(5,6),(6,6),(4,7),(5,7),(6,7), \
                (14,10),(14,11),(14,12),(14,13),(14,14),(14,15),(14,16),(14,17) )
    gm = gameserver(barrier=barrier)
    stucktime = 0

    while True:
        printmap(gm.getmap())

        if pyversion < '3':
            c = raw_input('What is your next move (l,r,u,d,q)? ')
        else:
            c = input('What is your next move (l,r,u,d,q)? ')

        if c == 'l' or c == 'r' or c == 'u' or c == 'd':
            gm.moverobot(c)
        elif c == 'q':
            break

        if gm.iscratestuck():
            # Retrieve crate after xx moves
            if stucktime > 5:
                gm.retrievecrate()
                stucktime = 0
            else:
                stucktime += 1
def main(scr):
    scr.nodelay(True)

    barrier = ( (4,5),(5,5),(6,5),(4,6),(5,6),(6,6),(4,7),(5,7),(6,7), \
                (14,10),(14,11),(14,12),(14,13),(14,14),(14,15),(14,16),(14,17) )
    gm = gameserver(barrier=barrier)
    stucktime = 0
    d1 = gm.getdistance()
    cumreward = 0.
    discount = 0.1

    while True:
        reward = 0
        printmap(scr,gm.getmap())

        c = scr.getch()
        if c == curses.KEY_LEFT:
            gm.moverobot('l')
            reward -= discount
        elif c == curses.KEY_RIGHT:
            gm.moverobot('r')
            reward -= discount
        elif c == curses.KEY_UP:
            gm.moverobot('u')
            reward -= discount
        elif c == curses.KEY_DOWN:
            gm.moverobot('d')
            reward -= discount
        elif c == ord('q'):
            break

        if gm.iscratestuck():
            # Retrieve crate after a certain number of time steps
            if stucktime > 10:
                gm.retrievecrate()
                stucktime = 0
            else:
                stucktime += 1

        d2 = gm.getdistance()
        reward += d1 - d2
        cumreward += reward
        scr.addstr(2,2,'Reward: {:12.2f}'.format(cumreward))
        d1 = d2

        scr.refresh()
        sleep(.1)
#! /usr/bin/env python3



# the 'artificialbrain' main directory should be in PYTHONPATH
from agent import agent_heuristic as ah
from environments.abrainenvironment.pushsim_simple_interface import *
from gameserver import *



barrier = ( (4,5),(5,5),(6,5),(4,6),(5,6),(6,6),(4,7),(5,7),(6,7), \
            (14,10),(14,11),(14,12),(14,13),(14,14),(14,15),(14,16),(14,17) )
game = gameserver(barrier=barrier)
iface = pushsim_simple_interface(game)
agent = ah.Agent_Heuristic_Random(iface,'K.I.T.T.')

#agent.run_agent(verbosity=2,delay=0.01,autostop=True)
agent.run_agent(verbosity=0,autostop=True)