mirror of
https://github.com/Aviortheking/Snake.git
synced 2025-04-22 02:02:10 +00:00
168 lines
4.1 KiB
JavaScript
168 lines
4.1 KiB
JavaScript
var canvas = document.getElementById("snake");
|
|
var ctx = canvas.getContext("2d");
|
|
var x = canvas.width/2;
|
|
var y = canvas.height-30;
|
|
var dx = 2;
|
|
var dy = -2;
|
|
var ballRadius = 10;
|
|
var xS = canvas.width / 20;
|
|
var yS = canvas.height / 20;
|
|
var lastKey = null;
|
|
/*
|
|
Tableau avec x, y
|
|
xTotal = canvas.width/10;
|
|
yTotal = canvas.height/10;
|
|
*/
|
|
|
|
Game = {
|
|
elements: [],
|
|
food: null,
|
|
snake: null,
|
|
columns: 0,
|
|
line: 0,
|
|
init: function() {
|
|
|
|
for (var i = 0; i < canvas.height; i+=20) {
|
|
for(var t = 0; t < canvas.width; t+=20) {
|
|
//console.log(t);
|
|
var square = new Square();
|
|
square.ctx = ctx;
|
|
square.color = "red";
|
|
square.width = xS;
|
|
square.pos = [t, i];
|
|
square.draw();
|
|
this.elements[this.elements.length] = square;
|
|
}
|
|
}
|
|
|
|
this.food = new Food();
|
|
this.food.width = xS;
|
|
this.food.ctx = ctx;
|
|
this.food.pos = [randInt(0,xS-1)*20, randInt(0, yS-1)*20];
|
|
console.log(this.food.pos);
|
|
this.food.draw();
|
|
|
|
var snake = new Snake();
|
|
snake.ctx = ctx;
|
|
snake.color = "white";
|
|
snake.width = xS;
|
|
snake.pos = [[0,0]];
|
|
snake.draw();
|
|
this.snake = snake;
|
|
|
|
|
|
setInterval(this.update, 50);
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
update: function() {
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height); // clear Canvas
|
|
for (var t = 0; t < Game.elements.length; t++) {
|
|
Game.elements[t].update();
|
|
}
|
|
//console.log(Game.snake.pos[Game.snake.pos.length-1] +", "+ Game.food.pos);
|
|
if(Game.snake.pos[Game.snake.pos.length-1][0] ===Game.food.pos[0] && Game.snake.pos[Game.snake.pos.length-1][1] ===Game.food.pos[1]) {
|
|
|
|
Game.snake.bigger();
|
|
Game.food.new();
|
|
}
|
|
|
|
Game.food.update();
|
|
Game.snake.update();
|
|
}
|
|
};
|
|
|
|
window.addEventListener('keydown', function (e) {
|
|
if(e.keyCode !== 82) {
|
|
e.preventDefault();
|
|
/*
|
|
Right: 39 || 68
|
|
Left: 37 || 81
|
|
Up: 90 || 38
|
|
Down: 83 || 40
|
|
*/
|
|
lastKey = e.keyCode;
|
|
|
|
}
|
|
});
|
|
|
|
function Square() {
|
|
this.width = 0;
|
|
this.pos = [0,0];
|
|
this.color = "blue";
|
|
this.ctx = null;
|
|
this.draw = function() {
|
|
this.ctx.fillStyle = this.color;
|
|
this.ctx.fillRect(this.pos[0], this.pos[1], this.width, this.width);
|
|
};
|
|
this.update = function() {
|
|
this.ctx.clearRect(this.pos[0], this.pos[1], this.width, this.width);
|
|
this.ctx.fillStyle = this.color;
|
|
this.ctx.fillRect(this.pos[0], this.pos[1], this.width, this.width);
|
|
};
|
|
}
|
|
|
|
function Snake() {
|
|
this.width = 20;
|
|
this.pos = [[0,0]];
|
|
this.color = "orange";
|
|
this.ctx = null;
|
|
this.bigger= function() {
|
|
this.pos.unshift([this.pos[0]]);
|
|
};
|
|
this.draw = function() {
|
|
this.ctx.fillStyle = this.color;
|
|
this.ctx.fillRect(this.pos[0][0], this.pos[0][1], this.width, this.width);
|
|
};
|
|
this.update = function() {
|
|
//console.log(this.pos);
|
|
//this.ctx.clearRect(this.pos[0], this.pos[1], this.width, this.width);
|
|
this.ctx.fillStyle = this.color;
|
|
var vert = 0;
|
|
var hori = 0;
|
|
if(lastKey === 90 || lastKey === 38 ) vert = -20;
|
|
else if(lastKey === 39 || lastKey === 68) hori = 20;
|
|
else if(lastKey === 83 || 40 === lastKey) vert = 20;
|
|
else if(lastKey === 37 || 81 === lastKey) hori = -20;
|
|
this.pos.push([this.pos[this.pos.length-1][0]+hori, this.pos[this.pos.length-1][1]+vert]);
|
|
this.pos.shift();
|
|
for(var t = 0; t < this.pos.length; t++) {
|
|
var a = this.pos[t][0];
|
|
var b = this.pos[t][1];
|
|
|
|
this.ctx.fillRect(a, b, this.width, this.width);
|
|
|
|
if(t > 1 && this.pos.length > 1 && a === this.pos[this.pos.length-1][0] && b === this.pos[this.pos.length-1][1]) {
|
|
console.log((this.pos.length > 1) +", "+ (a === this.pos[this.pos.length-1][0]) +", "+ (b === this.pos[this.pos.length-1][1]));
|
|
lastKey = 0;
|
|
window.alert("Game Over!");
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
function Food() {
|
|
this.width = 0;
|
|
this.pos = [0,0];
|
|
this.color = "yellow";
|
|
this.ctx = null;
|
|
this.new = function() {
|
|
this.pos = [randInt(0,xS-1)*20, randInt(0, yS-1)*20];
|
|
};
|
|
this.draw = function() {
|
|
this.ctx.fillStyle = this.color;
|
|
this.ctx.fillRect(this.pos[0], this.pos[1], this.width, this.width);
|
|
};
|
|
this.update = function() {
|
|
this.ctx.clearRect(this.pos[0], this.pos[1], this.width, this.width);
|
|
this.ctx.fillStyle = this.color;
|
|
this.ctx.fillRect(this.pos[0], this.pos[1], this.width, this.width);
|
|
};
|
|
}
|
|
|
|
function randInt(min, max) {
|
|
return Math.floor((Math.random() * (max+1)) + min);
|
|
} |