133 lines
2.9 KiB
Markdown
133 lines
2.9 KiB
Markdown
# 贪吃蛇游戏
|
|
|
|
这是一个用 Oraset B-5 编写的控制台贪吃蛇游戏!
|
|
|
|
## 游戏说明
|
|
|
|
使用方向键控制蛇的移动方向,吃食物得分。
|
|
|
|
## 运行方法
|
|
|
|
```bash
|
|
oraset examples/snake.ora
|
|
```
|
|
|
|
## 代码
|
|
|
|
```oraset
|
|
// snake.ora - 贪吃蛇游戏
|
|
// 使用 w/a/s/d 或方向键控制
|
|
// Oraset B-5 版本 - 使用数组存储蛇的位置
|
|
|
|
var width = 40;
|
|
var height = 20;
|
|
var speed = 150;
|
|
var game_over = 0;
|
|
var score = 0;
|
|
|
|
var snake_x = [10, 9, 8];
|
|
var snake_y = [10, 10, 10];
|
|
var snake_len = 3;
|
|
|
|
var food_x = 25;
|
|
var food_y = 10;
|
|
|
|
var direction = 1;
|
|
var next_direction = 1;
|
|
|
|
function generate_food() {
|
|
food_x = int(rand() * (width - 4)) + 2;
|
|
food_y = int(rand() * (height - 4)) + 2;
|
|
}
|
|
|
|
generate_food();
|
|
|
|
while (game_over == 0) {
|
|
direction = next_direction;
|
|
|
|
var new_head_x = snake_x[0];
|
|
var new_head_y = snake_y[0];
|
|
|
|
if (direction == 0) new_head_y--;
|
|
if (direction == 1) new_head_x++;
|
|
if (direction == 2) new_head_y++;
|
|
if (direction == 3) new_head_x--;
|
|
|
|
if (new_head_x <= 0 || new_head_x >= width - 1 ||
|
|
new_head_y <= 0 || new_head_y >= height - 1) {
|
|
game_over = 1;
|
|
break;
|
|
}
|
|
|
|
var i = 0;
|
|
while (i < snake_len) {
|
|
if (new_head_x == snake_x[i] && new_head_y == snake_y[i]) {
|
|
game_over = 1;
|
|
break;
|
|
}
|
|
i++;
|
|
}
|
|
if (game_over == 1) break;
|
|
|
|
if (new_head_x == food_x && new_head_y == food_y) {
|
|
score++;
|
|
snake_len++;
|
|
generate_food();
|
|
}
|
|
|
|
i = snake_len - 1;
|
|
while (i > 0) {
|
|
snake_x[i] = snake_x[i - 1];
|
|
snake_y[i] = snake_y[i - 1];
|
|
i--;
|
|
}
|
|
|
|
snake_x[0] = new_head_x;
|
|
snake_y[0] = new_head_y;
|
|
|
|
var y = 0;
|
|
while (y < height) {
|
|
var x = 0;
|
|
while (x < width) {
|
|
var is_snake = 0;
|
|
var is_food = 0;
|
|
|
|
i = 0;
|
|
while (i < snake_len) {
|
|
if (x == snake_x[i] && y == snake_y[i]) {
|
|
is_snake = 1;
|
|
break;
|
|
}
|
|
i++;
|
|
}
|
|
|
|
if (x == food_x && y == food_y) {
|
|
is_food = 1;
|
|
}
|
|
|
|
if (is_snake == 1) {
|
|
print("O", "nel");
|
|
} else if (is_food == 1) {
|
|
print("*", "nel");
|
|
} else if (x == 0 || x == width - 1 || y == 0 || y == height - 1) {
|
|
print("-", "nel");
|
|
} else {
|
|
print(" ", "nel");
|
|
}
|
|
x++;
|
|
}
|
|
print("");
|
|
y++;
|
|
}
|
|
|
|
print("分数:", score, " | 长度:", snake_len);
|
|
print("w=上 a=左 s=下 d=右");
|
|
}
|
|
|
|
print("游戏结束! 最终分数:", score);
|
|
```
|
|
|
|
## 注意事项
|
|
|
|
这个版本使用了 Oraset B-5 的数组功能,代码更加简洁高效。
|
|
蛇的身体现在存储在数组中,可以无限增长。 |