-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.js
126 lines (97 loc) · 2.2 KB
/
main.js
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
let canvas = document.getElementById("canvas");
let ctx = canvas.getContext("2d");
let rows = 20;
let columns = 20;
let snake = [
{ x: 19, y: 3 }
];
let food;
let cellWidth = canvas.width / columns;
let cellHeight = canvas.height / rows;
let direction = 'LEFT';
let foodCollected = false;
placeFood()
setInterval(gameLoop, 200);
document.addEventListener('keydown', keyDown);
draw();
function draw() {
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "white";
snake.forEach(part => addRect(part.x, part.y))
ctx.fillStyle = "yellow";
addRect(food.x, food.y);
requestAnimationFrame(draw);
}
function keyDown(e) {
if (e.keyCode == 37) {
direction = 'LEFT'
}
if (e.keyCode == 38) {
direction = 'UP'
}
if (e.keyCode == 39) {
direction = 'RIGHT'
}
if (e.keyCode == 40) {
direction = 'DOWN'
}
}
function addRect(x, y) {
ctx.fillRect(x * cellWidth, y * cellHeight, cellWidth - 1, cellHeight - 1);
}
function placeFood() {
let randomX = Math.floor(Math.random() * rows);
let randomY = Math.floor(Math.random() * columns);
food = { x: randomX, y: randomY }
}
function shiftSnake() {
for (let i = snake.length - 1; i > 0; i--) {
const part = snake[i];
const lastPart = snake[i - 1];
part.x = lastPart.x;
part.y = lastPart.y;
}
}
function testGameOver() {
let firstPart = snake[0];
let otherParts = snake.slice(1);
let duplicateParts = otherParts.find(part => part.x == firstPart.x && part.y == firstPart.y);
if (
snake[0].x < 0 ||
snake[0].y < 0 ||
snake[0].x > columns - 1 ||
snake[0].y > rows - 1 ||
duplicateParts
) {
placeFood()
snake = [
{ x: 19, y: 3 }
];
direction = 'LEFT'
}
}
function gameLoop() {
testGameOver()
if (foodCollected == true) {
snake = [{ x: snake[0].x, y: snake[0].y }, ...snake];
foodCollected = false;
}
shiftSnake()
if (direction == 'LEFT') {
snake[0].x--;
}
if (direction == 'RIGHT') {
snake[0].x++;
}
if (direction == 'UP') {
snake[0].y--;
}
if (direction == 'DOWN') {
snake[0].y++;
}
if (snake[0].x == food.x && snake[0].y == food.y) {
foodCollected = true;
placeFood();
}
}