Skip to content
Snippets Groups Projects
Commit 03eb576e authored by zm343's avatar zm343
Browse files

game.js update(addFood & moveOneStep)

parent d48d16b6
Branches
No related tags found
1 merge request!8game.js update (addFood & moveOneStep)
module.exports = { const cellTypes = {
cellTypes: {
EMPTY: 0, EMPTY: 0,
PLAYERHEAD: 1, PLAYERHEAD: 1,
PLAYERBODY: 2, PLAYERBODY: 2,
FOOD: 3, FOOD: 3,
}, };
function createCell(x, y, type) {
return {
x: x,
y: y,
type: type,
pid: 0,
direction: 0,
next: null,
};
}
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
function addFood(gameBoard) {
//Find all the empty spaces on the grid
let emptySpaces = [];
for (let row of gameBoard) {
for (let cell of row) {
if (cell.type === cellTypes.EMPTY) {
emptySpaces.push(cell);
}
}
}
//Create food cells randomly
if (emptySpaces.length > 0) {
let randomCell = emptySpaces[getRandomInt(emptySpaces.length)];
randomCell.type = cellTypes.FOOD;
}
return gameBoard;
}
module.exports = {
cellTypes,
createGameBoard: (width, height) => { createGameBoard: (width, height) => {
let gameBoard = []; let gameBoard = [];
for (var i = 0; i < height; i++) { for (var i = 0; i < height; i++) {
row = []; let row = [];
for (var j = 0; j < width; j++) { for (var j = 0; j < width; j++) {
row.push(createCell(j, i, cellTypes.EMPTY)); row.push(createCell(j, i, cellTypes.EMPTY));
} }
...@@ -18,58 +55,108 @@ module.exports = { ...@@ -18,58 +55,108 @@ module.exports = {
for (var i = 0; i < 10; i++) { for (var i = 0; i < 10; i++) {
gameBoard = addFood(gameBoard); gameBoard = addFood(gameBoard);
} }
return gameBoard; //console.log(gameBoard);
},
addFood: (gameBoard) => {
// select a random cell that is empty
// set the cell to FOOD
return gameBoard; return gameBoard;
}, },
addPlayer: (gameBoard, pid) => { addPlayer: (gameBoard, pid) => {
let placedCell = false;
while (!placedCell) {
let x = getRandomInt(gameBoard[0].length); let x = getRandomInt(gameBoard[0].length);
let y = getRandomInt(gameBoard.length); let y = getRandomInt(gameBoard.length);
if (gameBoard[y][x].type === cellTypes.EMPTY) {
gameBoard[y][x].type = cellTypes.PLAYERHEAD; gameBoard[y][x].type = cellTypes.PLAYERHEAD;
gameBoard[y][x].pid = pid; gameBoard[y][x].pid = pid;
gameBoard[y][x].direction = 0; gameBoard[y][x].direction = 0;
let y2 = y - 1; let y2 = y - 1;
if (y2 >= 0 && gameBoard[y2][x].type === cellTypes.EMPTY) {
gameBoard[y2][x].type = cellTypes.PLAYERBODY; gameBoard[y2][x].type = cellTypes.PLAYERBODY;
gameBoard[y2][x].pid = pid; gameBoard[y2][x].pid = pid;
gameBoard[y2][x].direction = 0; gameBoard[y2][x].direction = 0;
gameBoard[y][x].next = gameBoard[y2][x]; gameBoard[y][x].next = gameBoard[y2][x];
}
placedCell = true;
}
}
//console.log(gameBoard);
return gameBoard; return gameBoard;
}, },
moveOneStep: (gameBoard) => { moveOneStep: (gameBoard) => {
//Loop through board until we find a PLAYERHEAD //Loop through board until we find a PLAYERHEAD
// Move the head in the direction it is facing for (var i = 0; i < gameBoard.length; i++) {
// if the head has a next, move the next to the head's old position for (var j = 0; j < gameBoard[i].length; j++) {
// if the next has a next, move the next's next to the next's old position let cell = gameBoard[i][j];
// and so on if (cell.type === cellTypes.PLAYERHEAD) {
// return the new gameBoard let oldX = cell.x;
}, let oldY = cell.y;
let newX = oldX;
let newY = oldY;
checkColissions: (gameBoard) => { //New position based on direction
// returns a list of players that have collided, if (cell.direction === 0) { // Up
// and a new gameBoard with the players removed newY -= 1;
}, } else if (cell.direction === 1) { // Right
}; newX += 1;
} else if (cell.direction === 2) { // Down
newY += 1;
} else if (cell.direction === 3) { // Left
newX -= 1;
}
let createCell = (x, y, type) => { //Continue if within bounds
return { if (newX >= 0 && newX < gameBoard[0].length && newY >= 0 && newY < gameBoard.length) {
x: x,
y: y, //Snake head to new position by updating cell object
type: type, gameBoard[newY][newX] = {
pid: 0, ...cell,
direction: 0, x: newX,
next: null, y: newY,
}; };
//Remove previous head position
gameBoard[oldY][oldX].type = cellTypes.EMPTY;
gameBoard[oldY][oldX].pid = 0;
gameBoard[oldY][oldX].direction = 0;
gameBoard[oldY][oldX].next = null;
//Snake body to previous locations
let currentBody = gameBoard[newY][newX].next;
while (currentBody) {
let bodyOldX = currentBody.x;
let bodyOldY = currentBody.y;
currentBody.x = oldX;
currentBody.y = oldY;
//Update cell body position
gameBoard[oldY][oldX] = {
...currentBody,
type: cellTypes.PLAYERBODY,
}; };
oldX = bodyOldX;
oldY = bodyOldY;
currentBody = currentBody.next;
}
function getRandomInt(max) { //Remove previous body position
return Math.floor(Math.random() * max); gameBoard[oldY][oldX].type = cellTypes.EMPTY;
gameBoard[oldY][oldX].pid = 0;
gameBoard[oldY][oldX].direction = 0;
gameBoard[oldY][oldX].next = null;
//console.log(gameBoard);
return gameBoard;
}
}
} }
}
return gameBoard;
},
checkCollisions: (gameBoard) => {
// returns a list of players that have collided,
// and a new gameBoard with the players removed
},
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment