由于贪吃蛇的程序比较复杂,需要用到图形界面等库,因此这里提供一个简单的控制台版贪吃蛇程序,供参考。

程序逻辑:

1.定义一个二维数组作为游戏地图,用1表示蛇身,0表示空地。

2.定义一个结构体作为蛇的数据结构,包含蛇头的坐标和蛇身的长度。

3.初始化游戏地图和蛇的数据结构。

4.进入游戏循环,每次循环先绘制游戏地图和蛇,然后等待用户输入移动方向。根据用户输入更新蛇的数据结构,如果蛇头撞到边界或者蛇身,则游戏结束。如果蛇头吃到食物,则蛇身加一。重复以上步骤直到游戏结束。

代码:

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

#define MAP_WIDTH 20
#define MAP_HEIGHT 20
#define SNAKE_INIT_LENGTH 3

int map[MAP_HEIGHT][MAP_WIDTH]; // 游戏地图
struct snake {
    int head_x;
    int head_y;
    int body_length;
    int body_x[MAP_WIDTH * MAP_HEIGHT];
    int body_y[MAP_WIDTH * MAP_HEIGHT];
} snake; // 蛇的数据结构

void init_map() // 初始化地图
{
    for (int i = 0; i < MAP_HEIGHT; i++) {
        for (int j = 0; j < MAP_WIDTH; j++) {
            map[i][j] = 0;
        }
    }
}

void init_snake() // 初始化蛇
{
    snake.head_x = MAP_WIDTH / 2;
    snake.head_y = MAP_HEIGHT / 2;
    snake.body_length = SNAKE_INIT_LENGTH;
    for (int i = 0; i < snake.body_length; i++) {
        snake.body_x[i] = snake.head_x - i;
        snake.body_y[i] = snake.head_y;
        map[snake.body_y[i]][snake.body_x[i]] = 1;
    }
}

void draw_map() // 绘制地图
{
    system("cls");
    for (int i = 0; i < MAP_HEIGHT; i++) {
        for (int j = 0; j < MAP_WIDTH; j++) {
            if (map[i][j] == 1) {
                printf("*");
            } else if (map[i][j] == 2) {
                printf("@");
            } else {
                printf(" ");
            }
        }
        printf("\n");
    }
}

void generate_food() // 生成食物
{
    int food_x, food_y;
    do {
        food_x = rand() % MAP_WIDTH;
        food_y = rand() % MAP_HEIGHT;
    } while (map[food_y][food_x] != 0);
    map[food_y][food_x] = 2;
}

void move_snake(int dx, int dy) // 移动蛇
{
    // 更新蛇身
    for (int i = snake.body_length - 1; i >= 1; i--) {
        snake.body_x[i] = snake.body_x[i - 1];
        snake.body_y[i] = snake.body_y[i - 1];
    }
    // 更新蛇头
    snake.head_x += dx;
    snake.head_y += dy;
    snake.body_x[0] = snake.head_x;
    snake.body_y[0] = snake.head_y;
    // 检查是否撞到边界或蛇身
    if (snake.head_x < 0 || snake.head_x >= MAP_WIDTH || snake.head_y < 0 || snake.head_y >= MAP_HEIGHT) {
        printf("Game Over!\n");
        exit(0);
    }
    if (map[snake.head_y][snake.head_x] == 1) {
        printf("Game Over!\n");
        exit(0);
    }
    // 检查是否吃到食物
    if (map[snake.head_y][snake.head_x] == 2) {
        snake.body_length++;
        map[snake.head_y][snake.head_x] = 1;
        generate_food();
    } else {
        map[snake.body_y[snake.body_length - 1]][snake.body_x[snake.body_length - 1]] = 0;
        map[snake.head_y][snake.head_x] = 1;
    }
}

int main()
{
    srand(time(NULL));
    init_map();
    init_snake();
    generate_food();
    while (1) {
        draw_map();
        char c = getch();
        if (c == 'w') {
            move_snake(0, -1);
        } else if (c == 's') {
            move_snake(0, 1);
        } else if (c == 'a') {
            move_snake(-1, 0);
        } else if (c == 'd') {
            move_snake(1, 0);
        }
    }
    return 0;
}

运行效果:

                     @                  
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
***************************************
生成贪吃蛇c语言程序

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

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