// Cloned by Aoife Doherty on 14 Nov 2020 from Mind "Complex Mind (clone by Aoife Doherty)" by Aoife Doherty
// Please leave this clone trail here.
// Cloned by Aoife Doherty on 4 Nov 2020 from Mind "Complex Mind" by Starter user
// Please leave this clone trail here.
// =================================================================================================
// Sample Mind for more complex starter World
// =================================================================================================
// World tells us agent position and enemy position
// World does not tell us of existence of walls
// if return invalid move (not empty square) World just ignores it and we miss a turn
AB.mind.getAction = function ( x ) // x is an array of [ ai, aj, ei, ej ]
{
var ai = x[0];
var aj = x[1];
var ei = x[2];
var ej = x[3];
// if strictly move away, will get stuck at wall, so introduce randomness; this is the original code
/* if ( ej < aj ) return ( AB.randomPick ( ACTION_UP, AB.randomPick(ACTION_RIGHT,ACTION_LEFT) ));
if ( ej > aj ) return ( AB.randomPick ( ACTION_DOWN, AB.randomPick(ACTION_RIGHT,ACTION_LEFT) ));
if ( ei < ai ) return ( AB.randomPick ( ACTION_RIGHT, AB.randomPick(ACTION_UP,ACTION_DOWN) ));
if ( ei > ai ) return ( AB.randomPick ( ACTION_LEFT, AB.randomPick(ACTION_UP,ACTION_DOWN) ));
return ( AB.randomIntAtoB (0,3) );
*/
//this is the smarter code, the enemy is always moving away from the agent (instead of random right or left that could be putting agent into path of enemy)
//there's two sections
//section 1: if it's surrounded by three walls, do respective movement. This stops what used to be happening where it would just get stuck and wait for the enemy if it was surrounded by three walls.
if ( occupied (ai-1,aj) && occupied (ai+1,aj) && occupied (ai,aj-1)) return (ACTION_DOWN);
if ( occupied (ai-1,aj) && occupied (ai+1,aj) && occupied (ai,aj+1)) return (ACTION_UP);
if ( occupied (ai,aj-1) && occupied (ai,aj+1) && occupied (ai-1,aj)) return (ACTION_RIGHT);
if ( occupied (ai,aj-1) && occupied (ai,aj+1) && occupied (ai+1,aj)) return (ACTION_LEFT);
//and this part, see compared to above, it's increasing the randomness of the movement (Pick3 instead of Pick), but also more defined in the direction the enemy is moving to ensure moving away
if ( ej > aj && ei < ai) return (AB.randomPick(ACTION_UP, ACTION_RIGHT));
if ( ej > aj && ei > ai) return (AB.randomPick(ACTION_UP, ACTION_LEFT));
if ( ej > aj && ei == ai) return (AB.randomPick3(ACTION_RIGHT, ACTION_LEFT, ACTION_UP));
if ( ei > ai && ej == aj) return (AB.randomPick3(ACTION_UP, ACTION_DOWN, ACTION_LEFT));
if ( ej < aj && ei < ai) return (AB.randomPick(ACTION_DOWN, ACTION_RIGHT));
if ( ej < aj && ei > ai) return (AB.randomPick(ACTION_DOWN, ACTION_LEFT));
if ( ej < aj && ei == ai) return (AB.randomPick3(ACTION_RIGHT, ACTION_LEFT, ACTION_DOWN));
if ( ei < ai && ej == aj) return (AB.randomPick3(ACTION_UP, ACTION_DOWN, ACTION_RIGHT));
};
// Failed experiment
// want to count the moves by agent. if =0 might be stuck so try move anywhere??if (moveLogicalAgent(a) = 0) return (AB.randomPick(ACTION_LEFT, AB.randomPick3(ACTION_UP, ACTION_DOWN, ACTION_RIGHT)));
// if ( occupied (ai-1,aj) && occupied (ai+1,aj) && occupied (ai,aj+1)) return (ACTION_UP);
// if ( occupied (ai,aj-1) && occupied (ai,aj+1) && occupied (ai-1,aj)) return (ACTION_RIGHT);
// if ( occupied (ai,aj-1) && occupied (ai,aj+1) && occupied (ai+1,aj)) return (ACTION_LEFT);
// if ( ei < ai ) return ( ACTION_RIGHT);
// if ( ei > ai ) return ( ACTION_LEFT);
// return ( AB.randomIntAtoB (0,3) );