HTML5 Canvas [198]
if (vDiff > 0){
directionsToTest.push("up");
directionsToTest.push("down");
}else if (vDiff <0){
directionsToTest.push("down");
directionsToTest.push("up");
}
if (hDiff >0){
directionsToTest.push("left");
directionsToTest.push("right");
}else if (hDiff <0){
directionsToTest.push("right");
directionsToTest.push("left");
}
}else if (Math.abs(hDiff) < Math.abs(vDiff)) {
if (hDiff >0){
directionsToTest.push("left");
directionsToTest.push("right");
}else if (hDiff<0){
directionsToTest.push("right");
directionsToTest.push("left");
}else if (vDiff > 0){
directionsToTest.push("up");
directionsToTest.push("down");
}else if (vDiff <0){
directionsToTest.push("down");
directionsToTest.push("up");
}
}else if (Math.abs(hDiff) == Math.abs(vDiff)) {
//make an educated random guess
if (Math.floor(Math.random()*2)==0){
//try vertical first
if (vDiff >0){
directionsToTest.push("up");
directionsToTest.push("down");
}else if (vDiff<0){
directionsToTest.push("down");
directionsToTest.push("up");
}
}else{
//try vertical first
if (hDiff >0){
directionsToTest.push("left");
directionsToTest.push("right");
}else if (hDiff<0){
directionsToTest.push("right");
directionsToTest.push("left");
}
}
}
var chooseRandom = false;
var moveFound = false;
var movePtr = 0;
var move;
if (Math.floor(Math.random()*100)> chanceRandomEnemyMovement){
//not random movement
while(!moveFound){
move = directionsToTest[movePtr];
switch(move){
case "up":
if (checkBounds(-1,0,tempEnemy)){
moveFound = true;
}
break;
case "down":
if (checkBounds(1,0,tempEnemy)){
moveFound = true;
}
break;
case "left":
if (checkBounds(0,-1, tempEnemy)){
moveFound = true;
}
break;
case "right":
if (checkBounds(0,1,tempEnemy)){
moveFound = true;
}
break
}
movePtr++
if (movePtr==directionsToTest.length){
//do not move if no move found
//this should be impossible
chooseRandom = true;
}
}
}else{
chooseRandom = true;
}
//pick random direction to test;
if (chooseRandom) {
while(!moveFound){
switch(Math.floor(Math.random()*4)){
case 0:
if (checkBounds(-1,0,tempEnemy)){
moveFound = true;
}else{
}
break;
case 1:
if (checkBounds(1,0,tempEnemy)){
moveFound = true;
}else{
}
break;
case 2:
if (checkBounds(0,-1, tempEnemy)){
moveFound = true;
}else{
}
break;
case 3:
if (checkBounds(0,1,tempEnemy)){
moveFound = true;
}else{
}
break
}
}
}
tempEnemy.destinationX = tempEnemy.nextCol*32;
tempEnemy.destinationY = tempEnemy.nextRow*32;
}else{
tempEnemy.nextCol = tempEnemy.col;
tempEnemy.nextRow = tempEnemy.row;
tempEnemy.destinationX = tempEnemy.nextCol*32;
tempEnemy.destinationY = tempEnemy.nextRow*32;
}
}
switchGameState(GAME_STATE_ANIMATE_ENEMY);
}
function gameStateAnimateEnemy(){
for (var eCtr=enemy.length-1;eCtr>=0;eCtr--){
var tempEnemy = enemy[eCtr];
if (!tempEnemy.moveComplete){
tempEnemy.x += tempEnemy.dx*tempEnemy.speed;
tempEnemy.y += tempEnemy.dy*tempEnemy.speed;
tempEnemy.currentTile++;
if (tempEnemy.currentTile==enemyTiles.length){
tempEnemy.currentTile = 0;
}
renderPlayField();
if (tempEnemy.x==tempEnemy.destinationX &&
tempEnemy.y==tempEnemy.destinationY){
tempEnemy.moveComplete = true;
enemyMoveCompleteCount++;
}
}
}
if (enemyMoveCompleteCount >= enemy.length){
enemyMoveCompleteCount = 0;
for (var eCtr=0;eCtr tempEnemy.moveComplete = false; } switchGameState(GAME_STATE_EVALUATE_ENEMY_MOVE); } } function gameStateEvaluateEnemyMove(){ for (var eCtr=enemy.length-1;eCtr>=0;eCtr--){ var tempEnemy = enemy[eCtr]; tempEnemy.row = tempEnemy.nextRow; tempEnemy.col = tempEnemy.nextCol; if (playField[tempEnemy.row][tempEnemy.col]==wallTile){ tempEnemy.hit = true; } if (player.row==tempEnemy.row && player.col==tempEnemy.col){ tempEnemy.hit = true; player.hit = true; } //check against other enemy for (var eCtr2=enemy.length-1;eCtr2>=0;eCtr2--){ var tempEnemy2 = enemy[eCtr2]; if (tempEnemy.row==tempEnemy2.row