// ==== Starter World =================================================================================================// This code is designed for use on the Ancient Brain site.// This code may be freely copied and edited by anyone on the Ancient Brain site.// To include a working run of this program on another site, see the "Embed code" links provided on Ancient Brain.// ====================================================================================================================// Starter World with Mind for P5 plain API // Mind moves object towards target object // Get point every time you hit target object, then starts in new position // ===================================================================================================================// === Start of tweaker's box ======================================================================================== // ===================================================================================================================// The easiest things to modify are in this box.// You should be able to change things in this box without being a JavaScript programmer.// Go ahead and change some of these. What's the worst that could happen?
AB.maxSteps =100;
AB.screenshotStep =50;// AB has its own timer separate to the draw timer. // When this timer ends, we get score and stop draw loop.
AB.drawRunControls =false;const OBJECTSIZE =100;// Size of objects const MOVESTEP = OBJECTSIZE /10;// How much to move each step const CLOSE_DISTANCE = OBJECTSIZE /2;// Get a point if this close const SKYCOLOR ="black";const MOVING_OBJECT_COLOR ="aquamarine";const TARGET_OBJECT_COLOR ="navy";// ===================================================================================================================// === End of tweaker's box ==========================================================================================// ===================================================================================================================// You will need to be some sort of JavaScript programmer to change things below the tweaker's box.//--- Mind can pick one of these actions -----------------const ACTION_LEFT =0;const ACTION_RIGHT =1;const ACTION_UP =2;const ACTION_DOWN =3;const ACTION_STAYSTILL =4;var fullwidth =ABWorld.fullwidth();var fullheight =ABWorld.fullheight();// global variables:// modified each time round draw loop // disadvantage - Mind could edit these directly var x, y;// position of moving objectvar tx, ty;// position of target objectvar score =0;// score function setup(){var c = createCanvas ( fullwidth, fullheight );// optional - help the AB system find and position the canvas - probably not needed// ABWorld.setCanvas ( c );
background ( SKYCOLOR );
AB.msg (" <p> The job of the Mind is to move the object closer to the target. </p> ");// set objects start position
reset();}function reset()// set the two objects to random positions within canvas // i.e. center should not be in 0 to max // but rather in OBJECTSIZE to max-OBJECTSIZE{
x = AB.randomIntAtoB ( OBJECTSIZE, fullwidth - OBJECTSIZE );
y = AB.randomIntAtoB ( OBJECTSIZE, fullheight - OBJECTSIZE );
tx = AB.randomIntAtoB ( OBJECTSIZE, fullwidth - OBJECTSIZE );
ty = AB.randomIntAtoB ( OBJECTSIZE, fullheight - OBJECTSIZE );}function draw(){// --- call Mind --------------------------------------------// stop Mind changing global variables:// save values in array:var old =[ x, y, tx, ty, score ];// Mind cannot reference this local variable // call Mind manually: var a = AB.mind.getAction();// restore global variables from array, in case Mind changed them:
x = old[0];
y = old[1];
tx = old[2];
ty = old[3];
score = old[4];// Mind can maybe cheat another way. No guarantees. See discussion: // https://ancientbrain.com/fake.scores.php// --- end of call Mind --------------------------------------if( a == ACTION_LEFT ) x = x - MOVESTEP ;elseif( a == ACTION_RIGHT ) x = x + MOVESTEP ;elseif( a == ACTION_UP ) y = y - MOVESTEP ;elseif( a == ACTION_DOWN ) y = y + MOVESTEP ;// clear background:
background ( SKYCOLOR );// draw target object:
fill ( TARGET_OBJECT_COLOR ); ellipse ( tx, ty, OBJECTSIZE, OBJECTSIZE );// draw moving object:
fill ( MOVING_OBJECT_COLOR ); ellipse ( x, y, OBJECTSIZE, OBJECTSIZE );// if arrive at target, get a point, and reset a new challenge:if( AB.distance2D ( x, y, tx, ty )< CLOSE_DISTANCE ){
score++;
reset();}if( AB.step <= AB.maxSteps )
AB.msg (" <p> Step: "+ AB.step +" Score: "+ score +" </p> ",2);}// To send score to scoreboard, define this:
AB.world.getScore =function(){// optional - stop the draw loop
noLoop();// console.log ( "score " + score ); return( score );};// --- when re-size page, re-size canvas ----------------------------------------// have to do this yourself in P5 plain function reSize(){
resizeCanvas ( fullwidth, fullheight );
background ( SKYCOLOR );}if( AB.onDesktop()) window.addEventListener ("resize",function(){ reSize();});else window.addEventListener ("orientationchange",function(){ reSize();});