1
0
Fork 0

Fix som error on tiny map & snake size

This commit is contained in:
Ethanell 2021-03-27 00:02:54 +01:00
parent 58806617e6
commit 120e58e88e
4 changed files with 29 additions and 9 deletions

View file

@ -18,6 +18,7 @@ export class Game {
throw new InvalidGameOption("canvas"); throw new InvalidGameOption("canvas");
this.size = [15, 15]; this.size = [15, 15];
this.snakeSize = 4;
this.direction = directions.RIGHT; this.direction = directions.RIGHT;
this.snakeSpeed = this.baseSnakeSpeed = 500; this.snakeSpeed = this.baseSnakeSpeed = 500;
this.lives = 3; this.lives = 3;
@ -87,7 +88,7 @@ export class Game {
this.direction = this.lastDirection = this.startDirection; this.direction = this.lastDirection = this.startDirection;
this.snakeSpeed = this.baseSnakeSpeed; this.snakeSpeed = this.baseSnakeSpeed;
this.snake = new Snake({startPos: this.size.map(s => Math.floor(s/2))}); this.snake = new Snake({startPos: this.size.map(s => Math.floor(s/2)), size: this.snakeSize, startDirection: this.startDirection});
this.initWorld(); this.initWorld();
this.updateSnake(); this.updateSnake();
@ -156,8 +157,7 @@ export class Game {
*/ */
updateSnake() { updateSnake() {
for (const i in this.snake.body) { this.snake.body.forEach(([x,y], i) => {
const [x, y] = this.snake.body[i];
if (!(x in this.world) || !(y in this.world[x])) if (!(x in this.world) || !(y in this.world[x]))
if (this.walls) if (this.walls)
throw new GameOver(); throw new GameOver();
@ -177,7 +177,7 @@ export class Game {
} }
t.type = tiles.SNAKE; t.type = tiles.SNAKE;
} }
} });
} }
/** /**
@ -229,12 +229,17 @@ export class Game {
* @param {int} appleSpeed * @param {int} appleSpeed
* @param {int} lives * @param {int} lives
*/ */
load({size = [15, 15], direction = directions.RIGHT, snakeSpeed = 500, lives = 3, walls = true} = {}) { load({size = [15, 15], snakeSize = 4, direction = directions.RIGHT, snakeSpeed = 500, lives = 3, walls = true} = {}) {
if (size && Array.isArray(size) && size.length === 2 && size.filter(s => typeof s === "number" && s > 0 && s % 1 === 0).length === size.length) if (size && Array.isArray(size) && size.length === 2 && size.filter(s => typeof s === "number" && s > 0 && s % 1 === 0).length === size.length)
this.size = size; this.size = size;
else else
throw new InvalidGameOption("size"); throw new InvalidGameOption("size");
if (snakeSize && typeof snakeSize === "number" && snakeSize > 0 && snakeSize % 1 === 0)
this.snakeSize = snakeSize;
else
throw new InvalidGameOption("snakeSize");
if (direction && Object.values(directions).find(([x,y]) => direction[0] === x && direction[1] === y)) if (direction && Object.values(directions).find(([x,y]) => direction[0] === x && direction[1] === y))
this.direction = this.startDirection = this.lastDirection = direction; this.direction = this.startDirection = this.lastDirection = direction;
else else

View file

@ -11,7 +11,7 @@ export class Snake {
else else
throw new InvalidSnakeOption("startPos"); throw new InvalidSnakeOption("startPos");
if (size && typeof size === "number" && size > 0 && size % 1 === 0) if (size && typeof size === "number" && size > 1 && size % 1 === 0)
this.size = size; this.size = size;
else else
throw new InvalidSnakeOption("size"); throw new InvalidSnakeOption("size");

View file

@ -95,9 +95,14 @@ function loadLevels(levels) {
} }
function loadGame(data) { function loadGame(data) {
game.load(data); try {
game.start(); game.load(data);
startSound.play(); game.start();
startSound.play();
} catch (e) {
alert("Error on level loading: "+e);
window.location.reload();
}
} }
function updateScore(s) { function updateScore(s) {

View file

@ -17,5 +17,15 @@
"No walls": { "No walls": {
"snakeSpeed": 100, "snakeSpeed": 100,
"walls": false "walls": false
},
"Tiny": {
"snakeSpeed": 500,
"size": [3,3],
"snakeSize": 2
},
"Big": {
"snakeSpeed": 100,
"size": [50,50],
"snakeSize": 10
} }
} }