-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
144 lines (124 loc) · 4.28 KB
/
script.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
const gameBoard = document.getElementById("gameBoard");
/* دریافت المان تخته بازی با استفاده از آیدی */
const boardSize = 20;
/* تعریف اندازه تخته بازی */
const initialSnakeLength = 3;
/* تعیین طول ابتدایی مار */
let snake = [];
/* ایجاد یک آرایه خالی برای ذخیره بخشهای مار */
let fruit = {};
/* ایجاد یک آبجکت خالی برای ذخیره میوه */
let direction = "RIGHT";
let nextDirection = "RIGHT";
/* تعریف جهت حرکت فعلی و بعدی مار */
/* Initialize snake */
for (let i = initialSnakeLength - 1; i >= 0; i--) {
snake.push({ x: i, y: 0 });
}
/* ایجاد مار ابتدایی با طول مشخص و اضافه کردن به آرایه snake */
/* Generate random fruit */
function generateFruit() {
fruit = {
x: Math.floor(Math.random() * boardSize),
y: Math.floor(Math.random() * boardSize),
};
/* ایجاد میوه با مختصات تصادفی */
while (
snake.some((segment) => segment.x === fruit.x && segment.y === fruit.y)
) {
fruit = {
x: Math.floor(Math.random() * boardSize),
y: Math.floor(Math.random() * boardSize),
};
}
/* اطمینان از عدم قرارگیری میوه روی بخشهای مار */
}
/* Draw the game board */
function draw() {
gameBoard.innerHTML = "";
/* پاک کردن محتویات تخته بازی */
snake.forEach((segment) => {
const snakeElement = document.createElement("div");
snakeElement.style.left = `${segment.x * boardSize}px`;
snakeElement.style.top = `${segment.y * boardSize}px`;
snakeElement.classList.add("snake");
gameBoard.appendChild(snakeElement);
});
/* ایجاد المانهای div برای هر بخش از مار و تنظیم موقعیت آنها */
const fruitElement = document.createElement("div");
fruitElement.style.left = `${fruit.x * boardSize}px`;
fruitElement.style.top = `${fruit.y * boardSize}px`;
fruitElement.classList.add("fruit");
gameBoard.appendChild(fruitElement);
/* ایجاد المان div برای میوه و تنظیم موقعیت آن */
}
/* Move the snake */
function moveSnake() {
const head = { ...snake[0] };
/* ایجاد یک نسخه جدید از سر مار */
direction = nextDirection;
/* بهروزرسانی جهت حرکت مار */
switch (direction) {
case "UP":
head.y -= 1;
break;
case "DOWN":
head.y += 1;
break;
case "LEFT":
head.x -= 1;
break;
case "RIGHT":
head.x += 1;
break;
}
/* تغییر مختصات سر مار بر اساس جهت حرکت */
snake.unshift(head);
/* اضافه کردن سر جدید به ابتدای آرایه مار */
if (head.x === fruit.x && head.y === fruit.y) {
generateFruit();
} else {
snake.pop();
}
/* بررسی برخورد سر مار با میوه و ایجاد میوه جدید در صورت برخورد */
/* در غیر این صورت، حذف انتهای مار برای ایجاد حرکت */
if (
head.x < 0 ||
head.x >= boardSize ||
head.y < 0 ||
head.y >= boardSize ||
snake.some(
(segment, index) =>
index !== 0 && segment.x === head.x && segment.y === head.y
)
) {
// alert('Game Over!');
window.location.reload();
}
/* بررسی شرایط پایان بازی: برخورد با دیوارهها یا برخورد با بدن خود */
draw();
/* ترسیم مجدد تخته بازی */
}
/* Handle key presses */
document.addEventListener("keydown", (e) => {
switch (e.key) {
case "ArrowUp":
if (direction !== "DOWN") nextDirection = "UP";
break;
case "ArrowDown":
if (direction !== "UP") nextDirection = "DOWN";
break;
case "ArrowLeft":
if (direction !== "RIGHT") nextDirection = "LEFT";
break;
case "ArrowRight":
if (direction !== "LEFT") nextDirection = "RIGHT";
break;
}
});
/* مدیریت رویداد فشردن کلیدهای جهتدار برای تغییر جهت حرکت مار */
/* Game loop */
generateFruit();
setInterval(moveSnake, 200);
draw();
/* ایجاد میوه اولیه و شروع حلقه بازی با حرکت مار هر 200 میلیثانیه */