由于代码比较长,建议您在本地使用 C 语言编译器进行运行。

以下是一个简单的贪吃蛇代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

#define WIDTH 20    // 地图宽度
#define HEIGHT 20   // 地图高度

int map[WIDTH][HEIGHT]; // 地图
int snake[WIDTH * HEIGHT][2];    // 蛇的身体
int len;    // 蛇的长度
int dir;    // 蛇的方向
int score;  // 得分

void init_map();    // 初始化地图
void init_snake();  // 初始化蛇
void print_map();   // 打印地图
void move();        // 移动蛇
void generate_food();   // 生成食物
void check_game_over(); // 检查游戏是否结束

int main(){
    init_map();
    init_snake();
    generate_food();
    print_map();
    while(1){
        if(kbhit()){    // 如果有按键按下
            char ch = getch();
            switch(ch){
                case 'w':   // 上
                    if(dir != 2)    // 防止蛇倒退
                        dir = 0;
                    break;
                case 'd':   // 右
                    if(dir != 3)
                        dir = 1;
                    break;
                case 's':   // 下
                    if(dir != 0)
                        dir = 2;
                    break;
                case 'a':   // 左
                    if(dir != 1)
                        dir = 3;
                    break;
                case 'q':   // 退出游戏
                    exit(0);
                    break;
            }
        }
        move();
        check_game_over();
        print_map();
        Sleep(100); // 控制蛇的速度
    }
    return 0;
}

void init_map(){
    for(int i = 0; i < HEIGHT; i++){
        for(int j = 0; j < WIDTH; j++){
            if(i == 0 || i == HEIGHT - 1 || j == 0 || j == WIDTH - 1){ // 边界
                map[i][j] = -1;
            }
            else{
                map[i][j] = 0;
            }
        }
    }
}

void init_snake(){
    len = 3;    // 初始长度为3
    snake[0][0] = HEIGHT / 2;
    snake[0][1] = WIDTH / 2;
    for(int i = 1; i < len; i++){
        snake[i][0] = snake[i - 1][0] + 1;
        snake[i][1] = snake[i - 1][1];
    }
    dir = 0;    // 初始方向为上
    score = 0;
}

void print_map(){
    system('cls');  // 清空屏幕
    for(int i = 0; i < HEIGHT; i++){
        for(int j = 0; j < WIDTH; j++){
            if(map[i][j] == -1){    // 边界
                printf('#');
            }
            else if(map[i][j] == 0){    // 空地
                printf(' ');
            }
            else if(map[i][j] == 1){    // 蛇的身体
                printf('*');
            }
            else if(map[i][j] == 2){    // 食物
                printf('@');
            }
        }
        printf('
');
    }
    printf('Score: %d
', score);   // 打印得分
}

void move(){
    int new_head[2];
    switch(dir){
        case 0: // 上
            new_head[0] = snake[0][0] - 1;
            new_head[1] = snake[0][1];
            break;
        case 1: // 右
            new_head[0] = snake[0][0];
            new_head[1] = snake[0][1] + 1;
            break;
        case 2: // 下
            new_head[0] = snake[0][0] + 1;
            new_head[1] = snake[0][1];
            break;
        case 3: // 左
            new_head[0] = snake[0][0];
            new_head[1] = snake[0][1] - 1;
            break;
    }
    if(map[new_head[0]][new_head[1]] == -1 || map[new_head[0]][new_head[1]] == 1){   // 撞墙或咬自己
        exit(0);
    }
    if(map[new_head[0]][new_head[1]] == 2){  // 吃到食物
        len++;
        score++;
        generate_food();
    }
    for(int i = len - 1; i > 0; i--){   // 移动身体
        snake[i][0] = snake[i - 1][0];
        snake[i][1] = snake[i - 1][1];
    }
    snake[0][0] = new_head[0];  // 移动头部
    snake[0][1] = new_head[1];
    for(int i = 0; i < len; i++){   // 更新地图
        map[snake[i][0]][snake[i][1]] = 1;
    }
    map[snake[len - 1][0]][snake[len - 1][1]] = 0;    // 清除尾部
}

void generate_food(){
    srand(time(NULL));  // 设置随机种子
    int x, y;
    do{
        x = rand() % (HEIGHT - 2) + 1;   // 随机生成坐标
        y = rand() % (WIDTH - 2) + 1;
    }while(map[x][y] != 0); // 如果位置已经被占据,则重新生成
    map[x][y] = 2;  // 放置食物
}

void check_game_over(){
    int count = 0;
    for(int i = 0; i < HEIGHT; i++){
        for(int j = 0; j < WIDTH; j++){
            if(map[i][j] == 1){
                count++;
            }
        }
    }
    if(count == HEIGHT * WIDTH - 2 * (HEIGHT + WIDTH - 2)){    // 蛇占满整个地图
        exit(0);
    }
}

注意,此代码只是一个简单的实现,有很多可以改进的地方,例如可以添加难度选择、增加蛇的速度、记录最高分等功能。

C语言贪吃蛇游戏代码实现 - 简单易懂的入门示例

原文地址: https://www.cveoy.top/t/topic/mQgl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录