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

game.js update(addFood & moveOneStep)

parent d48d16b6
No related branches found
No related tags found
1 merge request!8game.js update (addFood & moveOneStep)
module.exports = {
cellTypes: {
const cellTypes = {
EMPTY: 0,
PLAYERHEAD: 1,
PLAYERBODY: 2,
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) => {
let gameBoard = [];
for (var i = 0; i < height; i++) {
row = [];
let row = [];
for (var j = 0; j < width; j++) {
row.push(createCell(j, i, cellTypes.EMPTY));
}
......@@ -18,58 +55,108 @@ module.exports = {
for (var i = 0; i < 10; i++) {
gameBoard = addFood(gameBoard);
}
return gameBoard;
},
addFood: (gameBoard) => {
// select a random cell that is empty
// set the cell to FOOD
//console.log(gameBoard);
return gameBoard;
},
addPlayer: (gameBoard, pid) => {
let placedCell = false;
while (!placedCell) {
let x = getRandomInt(gameBoard[0].length);
let y = getRandomInt(gameBoard.length);
if (gameBoard[y][x].type === cellTypes.EMPTY) {
gameBoard[y][x].type = cellTypes.PLAYERHEAD;
gameBoard[y][x].pid = pid;
gameBoard[y][x].direction = 0;
let y2 = y - 1;
if (y2 >= 0 && gameBoard[y2][x].type === cellTypes.EMPTY) {
gameBoard[y2][x].type = cellTypes.PLAYERBODY;
gameBoard[y2][x].pid = pid;
gameBoard[y2][x].direction = 0;
gameBoard[y][x].next = gameBoard[y2][x];
}
placedCell = true;
}
}
//console.log(gameBoard);
return gameBoard;
},
moveOneStep: (gameBoard) => {
//Loop through board until we find a PLAYERHEAD
// Move the head in the direction it is facing
// if the head has a next, move the next to the head's old position
// if the next has a next, move the next's next to the next's old position
// and so on
// return the new gameBoard
},
for (var i = 0; i < gameBoard.length; i++) {
for (var j = 0; j < gameBoard[i].length; j++) {
let cell = gameBoard[i][j];
if (cell.type === cellTypes.PLAYERHEAD) {
let oldX = cell.x;
let oldY = cell.y;
let newX = oldX;
let newY = oldY;
checkColissions: (gameBoard) => {
// returns a list of players that have collided,
// and a new gameBoard with the players removed
},
};
//New position based on direction
if (cell.direction === 0) { // Up
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) => {
return {
x: x,
y: y,
type: type,
pid: 0,
direction: 0,
next: null,
//Continue if within bounds
if (newX >= 0 && newX < gameBoard[0].length && newY >= 0 && newY < gameBoard.length) {
//Snake head to new position by updating cell object
gameBoard[newY][newX] = {
...cell,
x: newX,
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) {
return Math.floor(Math.random() * max);
//Remove previous body position
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