Add belt + branch functionality
This commit is contained in:
parent
2e6f017adc
commit
b3396a365e
102
game.js
102
game.js
@ -2,6 +2,7 @@ var canvas;
|
||||
|
||||
const WAITING = 0;
|
||||
const RUNNING = 1;
|
||||
const REVIEWING = 2;
|
||||
|
||||
const UP = 0;
|
||||
const RIGHT = 1;
|
||||
@ -17,9 +18,14 @@ const PINK = 5;
|
||||
const BLACK = 6;
|
||||
const GRAY = 7;
|
||||
|
||||
var BOT_X = 0
|
||||
var BOT_Y = 0
|
||||
const ALIVE = 0;
|
||||
const DEAD = 1;
|
||||
|
||||
var BOT_X = -1
|
||||
var BOT_Y = -1
|
||||
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 BELTRIGHT = {type:"BELT",direction:RIGHT}
|
||||
@ -38,14 +44,26 @@ var WRITERUP = {type:"WRITER",direction:UP,color1:RED,color2:BLUE}
|
||||
var lastGameUpdate = 0;
|
||||
var gameSpeed = 1000/1;
|
||||
|
||||
var gameState=WAITING;
|
||||
var gameState=RUNNING;
|
||||
|
||||
var LEVEL0 = [
|
||||
[{},{},{},{},{},],
|
||||
[{},{},{},{},{},],
|
||||
[{},{},{},{},{},],
|
||||
[{},{},{},{},{},],
|
||||
[{},{},{},{},{},],]
|
||||
var LEVEL1 = [
|
||||
[{},{},{...BELTDOWN},{...BELTLEFT},{...BELTLEFT},],
|
||||
[{},{},{},{},BELTUP,],
|
||||
[{},{},{},{},{...BELTUP},],
|
||||
[{},{...BELTDOWN},{},{},{...BELTUP},],
|
||||
[{},{...BELTRIGHT},{...BELTRIGHT},{...BELTRIGHT},{...BELTUP},],
|
||||
[{},{},{},{},{},],]
|
||||
var LEVEL2 = [
|
||||
[{},{},{},{},{},],
|
||||
[{},{...BELTRIGHT},{},{},{},], //BLUE
|
||||
[{},{...BRANCHRIGHT},{},{},{},],
|
||||
[{},{...BELTRIGHT},{},{},{},], //RED
|
||||
[{},{},{},{},{},],]
|
||||
|
||||
var gameGrid= []
|
||||
|
||||
@ -69,14 +87,36 @@ function runBot() {
|
||||
|
||||
var nextSquare = {}
|
||||
switch (BOT_DIR) {
|
||||
case UP:{nextSquare = grid[y-1][x];BOT_Y--}break;
|
||||
case LEFT:{nextSquare = grid[y][x-1];BOT_X--}break;
|
||||
case RIGHT:{nextSquare = grid[y][x+1];BOT_X++}break;
|
||||
case DOWN:{nextSquare = grid[y+1][x];BOT_Y++}break;
|
||||
case UP:{nextSquare = gameGrid[--BOT_Y][BOT_X];}break;
|
||||
case LEFT:{nextSquare = gameGrid[BOT_Y][--BOT_X];}break;
|
||||
case RIGHT:{nextSquare = gameGrid[BOT_Y][++BOT_X];}break;
|
||||
case DOWN:{nextSquare = gameGrid[++BOT_Y][BOT_X];}break;
|
||||
}
|
||||
if (nextSquare.direction) {
|
||||
BOT_DIR = nextSquare.direction
|
||||
if (nextSquare.direction!==undefined) {
|
||||
|
||||
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%"
|
||||
document.getElementById("game").appendChild(canvas)
|
||||
|
||||
gameGrid = [...createGrid(5,5)]
|
||||
placeBot(0,2)
|
||||
console.log(gameGrid)
|
||||
//gameGrid = [...createGrid(5,5)]
|
||||
}
|
||||
|
||||
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() {
|
||||
@ -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() {
|
||||
var ctx = canvas.getContext("2d")
|
||||
ctx.fillStyle="#FFF"
|
||||
@ -111,7 +174,20 @@ function draw() {
|
||||
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();
|
||||
loadLevel(LEVEL2,0,2)
|
||||
setInterval(()=>{
|
||||
step()
|
||||
draw()
|
||||
|
Loading…
x
Reference in New Issue
Block a user