Add belt + branch functionality

master
sigonasr2 5 years ago
parent 2e6f017adc
commit b3396a365e
  1. 102
      game.js

@ -2,6 +2,7 @@ var canvas;
const WAITING = 0; const WAITING = 0;
const RUNNING = 1; const RUNNING = 1;
const REVIEWING = 2;
const UP = 0; const UP = 0;
const RIGHT = 1; const RIGHT = 1;
@ -17,9 +18,14 @@ const PINK = 5;
const BLACK = 6; const BLACK = 6;
const GRAY = 7; const GRAY = 7;
var BOT_X = 0 const ALIVE = 0;
var BOT_Y = 0 const DEAD = 1;
var BOT_X = -1
var BOT_Y = -1
var BOT_DIR = RIGHT var BOT_DIR = RIGHT
var BOT_STATE = ALIVE
var BOT_TAPE = [{color:RED},{color:BLUE}]
var BELTDOWN = {type:"BELT",direction:DOWN/*,direction2 - defines a secondary direction. For two belts at once.*/} var BELTDOWN = {type:"BELT",direction:DOWN/*,direction2 - defines a secondary direction. For two belts at once.*/}
var BELTRIGHT = {type:"BELT",direction:RIGHT} var BELTRIGHT = {type:"BELT",direction:RIGHT}
@ -38,14 +44,26 @@ var WRITERUP = {type:"WRITER",direction:UP,color1:RED,color2:BLUE}
var lastGameUpdate = 0; var lastGameUpdate = 0;
var gameSpeed = 1000/1; var gameSpeed = 1000/1;
var gameState=WAITING; var gameState=RUNNING;
var LEVEL0 = [
[{},{},{},{},{},],
[{},{},{},{},{},],
[{},{},{},{},{},],
[{},{},{},{},{},],
[{},{},{},{},{},],]
var LEVEL1 = [ var LEVEL1 = [
[{},{},{...BELTDOWN},{...BELTLEFT},{...BELTLEFT},], [{},{},{...BELTDOWN},{...BELTLEFT},{...BELTLEFT},],
[{},{},{},{},BELTUP,], [{},{},{},{},{...BELTUP},],
[{},{...BELTDOWN},{},{},{...BELTUP},], [{},{...BELTDOWN},{},{},{...BELTUP},],
[{},{...BELTRIGHT},{...BELTRIGHT},{...BELTRIGHT},{...BELTUP},], [{},{...BELTRIGHT},{...BELTRIGHT},{...BELTRIGHT},{...BELTUP},],
[{},{},{},{},{},],] [{},{},{},{},{},],]
var LEVEL2 = [
[{},{},{},{},{},],
[{},{...BELTRIGHT},{},{},{},], //BLUE
[{},{...BRANCHRIGHT},{},{},{},],
[{},{...BELTRIGHT},{},{},{},], //RED
[{},{},{},{},{},],]
var gameGrid= [] var gameGrid= []
@ -69,14 +87,36 @@ function runBot() {
var nextSquare = {} var nextSquare = {}
switch (BOT_DIR) { switch (BOT_DIR) {
case UP:{nextSquare = grid[y-1][x];BOT_Y--}break; case UP:{nextSquare = gameGrid[--BOT_Y][BOT_X];}break;
case LEFT:{nextSquare = grid[y][x-1];BOT_X--}break; case LEFT:{nextSquare = gameGrid[BOT_Y][--BOT_X];}break;
case RIGHT:{nextSquare = grid[y][x+1];BOT_X++}break; case RIGHT:{nextSquare = gameGrid[BOT_Y][++BOT_X];}break;
case DOWN:{nextSquare = grid[y+1][x];BOT_Y++}break; case DOWN:{nextSquare = gameGrid[++BOT_Y][BOT_X];}break;
} }
if (nextSquare.direction) { if (nextSquare.direction!==undefined) {
BOT_DIR = nextSquare.direction
if (nextSquare.type==="BRANCH") {
//console.log("Branch found")
if (BOT_TAPE[0].color===nextSquare.color1) {
console.log("Matches color1")
//Move towards left side of the branch.
BOT_DIR = LeftOf(nextSquare.direction)
ConsumeTape()
} else
if (BOT_TAPE[0].color===nextSquare.color2) {
console.log("Matches color2")
//Move towards left side of the branch.
BOT_DIR = RightOf(nextSquare.direction)
ConsumeTape()
}
} else {
BOT_DIR = nextSquare.direction
}
console.log("Direction is now "+BOT_DIR)
} else {
gameState = REVIEWING
BOT_STATE = DEAD
} }
renderGame()
} }
} }
@ -91,9 +131,23 @@ function setupGame() {
canvas.style.height="100%" canvas.style.height="100%"
document.getElementById("game").appendChild(canvas) document.getElementById("game").appendChild(canvas)
gameGrid = [...createGrid(5,5)] //gameGrid = [...createGrid(5,5)]
placeBot(0,2) }
console.log(gameGrid)
function loadLevel(level,botx,boty) {
placeBot(botx,boty)
gameGrid = deepCopy(level)
}
function deepCopy(arr) {
var newarr = []
for (var i=0;i<arr.length;i++) {
newarr[i] = []
for (var j=0;j<arr[i].length;j++) {
newarr[i][j]={...arr[i][j]}
}
}
return newarr
} }
function step() { function step() {
@ -102,6 +156,15 @@ function step() {
} }
} }
function renderGame() {
var displayGrid = []
displayGrid = deepCopy(gameGrid)
if (BOT_X!==-1&&BOT_Y!==-1) {
displayGrid[BOT_Y][BOT_X]["BOT"]=true
}
console.log(displayGrid)
}
function draw() { function draw() {
var ctx = canvas.getContext("2d") var ctx = canvas.getContext("2d")
ctx.fillStyle="#FFF" ctx.fillStyle="#FFF"
@ -111,7 +174,20 @@ function draw() {
ctx.stroke(); ctx.stroke();
} }
function ConsumeTape() {
BOT_TAPE.shift()
}
function LeftOf(dir) {
return (dir+1)%4
}
function RightOf(dir) {
if (dir===0) {dir=4}
return (dir-1)%4
}
setupGame(); setupGame();
loadLevel(LEVEL2,0,2)
setInterval(()=>{ setInterval(()=>{
step() step()
draw() draw()

Loading…
Cancel
Save