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

// 游戏界面尺寸 #define width 20 #define height 20

// 蛇身结构 typedef struct { int x; int y; } Snake;

// 游戏全局变量 int gameover; int score; int foodX, foodY; // 食物坐标 int dir; // 蛇的移动方向 int tail; int len; Snake snake[width * height];

// 初始化游戏 void init() { gameover = 0; score = 0; dir = 3; // 初始方向向左 tail = 1; len = 3;

// 初始化蛇身
snake[0].x = width / 2;
snake[0].y = height / 2;

// 生成初始食物
foodX = rand() % (width - 2) + 1;
foodY = rand() % (height - 2) + 1;

}

// 绘制游戏界面 void draw() { int i, j; system("cls"); // 清屏

// 绘制上边界
for (i = 0; i < width + 2; i++) {
    printf("#");
}
printf("\n");

// 绘制游戏区域
for (j = 0; j < height; j++) {
    for (i = 0; i < width; i++) {
        if (i == 0 || i == width - 1) {
            printf("#");
        }
        else if (i == snake[0].x && j == snake[0].y) {
            printf("O"); // 绘制蛇头
        }
        else if (i == foodX && j == foodY) {
            printf("*"); // 绘制食物
        }
        else {
            int found = 0;
            // 绘制蛇身
            for (int k = 1; k < len; k++) {
                if (snake[k].x == i && snake[k].y == j) {
                    printf("o");
                    found = 1;
                    break;
                }
            }
            if (!found) {
                printf(" ");
            }
        }
    }
    printf("\n");
}

// 绘制下边界
for (i = 0; i < width + 2; i++) {
    printf("#");
}
printf("\n");

printf("Score: %d\n", score);

}

// 处理键盘输入 void input() { if (_kbhit()) { switch (_getch()) { case 'w': dir = 0; // 向上 break; case 's': dir = 1; // 向下 break; case 'a': dir = 2; // 向左 break; case 'd': dir = 3; // 向右 break; case 'x': gameover = 1; // 结束游戏 break; } } }

// 更新游戏状态 void update() { int prevX = snake[0].x; int prevY = snake[0].y; int prev2X, prev2Y; snake[0].x = snake[0].x + (dir == 2 ? -1 : (dir == 3 ? 1 : 0)); // 根据方向移动蛇头 snake[0].y = snake[0].y + (dir == 0 ? -1 : (dir == 1 ? 1 : 0));

// 判断蛇头是否碰到边界或自身
if (snake[0].x < 1 || snake[0].x >= width - 1 || snake[0].y < 1 || snake[0].y >= height - 1) {
    gameover = 1;
    return;
}
for (int i = 1; i < len; i++) {
    if (snake[i].x == snake[0].x && snake[i].y == snake[0].y) {
        gameover = 1;
        return;
    }
}

// 判断是否吃到食物
if (snake[0].x == foodX && snake[0].y == foodY) {
    // 生成新的食物
    foodX = rand() % (width - 2) + 1;
    foodY = rand() % (height - 2) + 1;
    score += 10;
    len++;

    // 在蛇尾增加一个新节点
    snake[len - 1].x = prevX;
    snake[len - 1].y = prevY;
}
else {
    // 移动蛇身
    for (int i = 1; i < len; i++) {
        prev2X = snake[i].x;
        prev2Y = snake[i].y;
        snake[i].x = prevX;
        snake[i].y = prevY;
        prevX = prev2X;
        prevY = prev2Y;
    }
}

}

int main() { int delay = 100; // 游戏刷新延迟时间 init();

while (!gameover) {
    draw();
    input();
    update();
    Sleep(delay); // 延迟一段时间
}

printf("Game Over!\n");
printf("Your score: %d\n", score);

return 0;

}

C语言贪吃蛇游戏代码示例 - 简单易懂

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

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