Files
JGZ_YES c30eb9b7ad
Build and Package Oraset / build (macos-latest) (push) Waiting to run
Build and Package Oraset / build (ubuntu-latest) (push) Waiting to run
Build and Package Oraset / build (windows-latest) (push) Waiting to run
Build and Package Oraset / release (push) Blocked by required conditions
Oraset B-5: Clean repository with only C implementation
2026-07-23 13:27:04 +08:00

2.9 KiB

贪吃蛇游戏

这是一个用 Oraset B-5 编写的控制台贪吃蛇游戏!

游戏说明

使用方向键控制蛇的移动方向,吃食物得分。

运行方法

oraset examples/snake.ora

代码

// 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 的数组功能,代码更加简洁高效。 蛇的身体现在存储在数组中,可以无限增长。