forked from panditsamik/Snake-Game
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
133 lines (112 loc) · 3.48 KB
/
script.js
File metadata and controls
133 lines (112 loc) · 3.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
var blockSize = 25;
var total_row = 17; //total row number
var total_col = 17; //total column number
var board;
var context;
var snakeX = blockSize * 5;
var snakeY = blockSize * 5;
// Set the total number of rows and columns
var speedX = 0; //speed of snake in x coordinate.
var speedY = 0; //speed of snake in Y coordinate.
var snakeBody = [];
var foodX;
var foodY;
var gameOver = false;
window.onload = function () {
// Set board height and width
const reloadButton = document.getElementById("reloadButton");
reloadButton.addEventListener("click", function () {
// Reload the page to restart the game
location.reload();
});
board = document.getElementById("board");
board.height = total_row * blockSize;
board.width = total_col * blockSize;
context = board.getContext("2d");
board.style.border = "3px solid black";
board.style.borderRadius = "5px";
placeFood();
document.addEventListener("keyup", changeDirection); //for movements
// Set snake speed
setInterval(update, 1000 / 5);
};
function update() {
if (gameOver) {
return;
}
// Background of a Game
context.fillStyle = "green";
context.fillRect(0, 0, board.width, board.height);
// Set food color and position
context.fillStyle = "yellow";
context.strokeStyle = "black";
context.fillRect(foodX, foodY, blockSize, blockSize);
context.strokeRect(foodX, foodY, blockSize, blockSize);
if (snakeX == foodX && snakeY == foodY) {
snakeBody.push([foodX, foodY]);
placeFood();
}
// body of snake will grow
for (let i = snakeBody.length - 1; i > 0; i--) {
// it will store previous part of snake to the current part
snakeBody[i] = snakeBody[i - 1];
}
if (snakeBody.length) {
snakeBody[0] = [snakeX, snakeY];
}
context.fillStyle = "white";
context.strokeStyle = "black"
snakeX += speedX * blockSize; //updating Snake position in X coordinate.
snakeY += speedY * blockSize; //updating Snake position in Y coordinate.
context.fillRect(snakeX, snakeY, blockSize, blockSize);
context.strokeRect(snakeX, snakeY, blockSize, blockSize);
for (let i = 0; i < snakeBody.length; i++) {
context.fillRect(snakeBody[i][0], snakeBody[i][1], blockSize, blockSize);
context.strokeRect(snakeBody[i][0], snakeBody[i][1], blockSize, blockSize);
}
if (
snakeX < 0 ||
snakeX > total_col * blockSize ||
snakeY < 0 ||
snakeY > total_row * blockSize
) {
// Out of bound condition
gameOver = true;
alert("Game Over");
}
for (let i = 0; i < snakeBody.length; i++) {
if (snakeX == snakeBody[i][0] && snakeY == snakeBody[i][1]) {
// Snake eats own body
gameOver = true;
alert("Game Over");
}
}
}
// Movement of the Snake - We are using addEventListener
function changeDirection(e) {
if (e.code == "ArrowUp" && speedY != 1) {
// If up arrow key pressed with this condition...
// snake will not move in the opposite direction
speedX = 0;
speedY = -1;
} else if (e.code == "ArrowDown" && speedY != -1) {
//If down arrow key pressed
speedX = 0;
speedY = 1;
} else if (e.code == "ArrowLeft" && speedX != 1) {
//If left arrow key pressed
speedX = -1;
speedY = 0;
} else if (e.code == "ArrowRight" && speedX != -1) {
//If Right arrow key pressed
speedX = 1;
speedY = 0;
}
}
// Randomly place food
function placeFood() {
// in x coordinates.
foodX = Math.floor(Math.random() * total_col) * blockSize;
//in y coordinates.
foodY = Math.floor(Math.random() * total_row) * blockSize;
}