-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.js
150 lines (132 loc) · 5.15 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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
$(document).ready(function(){
var canvas = $("canvas")[0];
var ctx = canvas.getContext("2d");
var w = $("#canvas").width();
var h = $("#canvas").height();
// Cохраняем ширину ячейки в переменную для легкого управления
var cw = 10;
var d;
var food;
var score;
/* флаг состояния игры */
var isPlayed = true;
// Создаем змейку
var snake_array; // Массив ячеек для создания змеи
function init()
{
d = "right"; // направление
create_snake();
create_food(); //Еда :)
//теперь выведем очки
score = 0;
// Тепер заставим двигатся змейку используя таймер который будет вызывать функцию рисующую змейку
//каждые 60ms
var select_speed = document.getElementById("speed_shake");
var speed_shake = select_speed.options[select_speed.selectedIndex].value;
if(typeof game_loop != "undefined"){
clearInterval(game_loop);
}
game_loop = setInterval(paint, speed_shake);
}
init();
function create_snake()
{
var length = 4; //Длинна змеи
snake_array = []; //Пустой массив для старта
for(var i = length-1; i>=0; i--)
{
//Создаем горизонтальную змейку
snake_array.push({x: i, y:20});
}
}
//Теперь будем давать еду :)
function create_food()
{
food = {
x: Math.round(Math.random()*(w-cw)/cw),
y: Math.round(Math.random()*(h-cw)/cw),
};
//Будет создавать ячейку с x/y между 0-44
}
//Теперь рисуем змейку
function paint() {
if (isPlayed) {
//Рисуем canvas
ctx.fillStyle = "white";
ctx.fillRect(0, 0, w, h);
ctx.strokeStyle = "black";
ctx.strokeRect(0, 0, w, h);
//Код отвечающий за движение змейки ниже.
//Очень просто
var nx = snake_array[0].x;
var ny = snake_array[0].y;
if (d == "right") nx++;
else if (d == "left") nx--;
else if (d == "up") ny--;
else if (d == "down") ny++;
//Теперь если голова змеи ударится об тело игра начнется заново
if (nx == -1 || nx == w / cw || ny == -1 || ny == h / cw || check_collision(nx, ny, snake_array)) {
//alert("Game Over!"); // сообщение о проиграше
//restart игры
init();
return;
}
//Пишем код для прийома пищи змейкой :)
if (nx == food.x && ny == food.y) {
var tail = {x: nx, y: ny};
score++;
//Создаем новый кусочек
create_food();
}
else {
var tail = snake_array.pop(); //pops out the last cell
tail.x = nx;
tail.y = ny;
}
//Теперь змея может пообедать :)
snake_array.unshift(tail);
for (var i = 0; i < snake_array.length; i++) {
var c = snake_array[i];
paint_cell(c.x, c.y);
}
//Рисуем еду
paint_cell(food.x, food.y);
//Выводим счет
var score_text = "Счет: " + score;
// ctx.fillText(score_text, 5, h - 5);
//записываем счет в
document.getElementById('scr').innerHTML = score_text;
}
//Красим змею в зеленый
function paint_cell(x, y) {
ctx.fillStyle = "#A4CA39";
ctx.fillRect(x * cw, y * cw, cw, cw);
ctx.strokeStyle = "white";
ctx.strokeRect(x * cw, y * cw, cw, cw);
}
function check_collision(x, y, array) {
for (var i = 0; i < array.length; i++) {
if (array[i].x == x && array[i].y == y)
return true;
}
return false;
}
}
//самое важное управление голодной змеей :)
$(document).keydown(function(e){
var key = e.which;
if(key == "37" && d != "right") d = "left";
else if(key == "38" && d != "down") d = "up";
else if(key == "39" && d != "left") d = "right";
else if(key == "40" && d != "up") d = "down";
//Теперь змея управляемая
})
// функция рестарта игры!
document.getElementById('restart').onclick = init;
document.getElementById('play').onclick = function () {
isPlayed = true;
}
document.getElementById('pause').onclick = function () {
isPlayed = false;
}
})