C语言贪吃蛇游戏教程:完整代码及注释详解

这篇文章将带你一步步用 C 语言编写一个经典的贪吃蛇游戏。我们提供了完整的代码以及详细的注释,即使你是 C 语言初学者,也能轻松理解和学习。

1. 游戏概述

贪吃蛇游戏的规则非常简单:

  • 游戏在一个矩形区域内进行。- 玩家控制一条蛇,通过键盘方向键控制蛇的移动方向。- 蛇的目标是吃到区域内随机出现的食物。- 每吃到一个食物,蛇的身体就会增长,游戏难度也会随之增加。- 如果蛇撞到边界或自己的身体,游戏结束。

2. 代码实现

下面是 C 语言编写的贪吃蛇游戏的完整代码:c#include <conio.h>#include <stdbool.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include <windows.h>

#define WIDTH 20#define HEIGHT 20

// 定义游戏区域的大小

int score; // 记录得分int gameOver; // 游戏是否结束标志int x, y; // 蛇头位置坐标int fruitX, fruitY; // 食物位置坐标int tailX[100], tailY[100]; // 蛇身位置坐标数组int tailLength; // 蛇的长度enum Direction { STOP = 0, LEFT, RIGHT, UP, DOWN }; // 定义蛇的移动方向枚举enum Direction dir; // 当前移动方向

// 初始化游戏void Setup() { gameOver = false; dir = STOP; x = WIDTH / 2; y = HEIGHT / 2; fruitX = rand() % WIDTH; fruitY = rand() % HEIGHT; score = 0; tailLength = 0; // 初始化蛇的长度为0}

// 绘制游戏画面void Draw() { system('cls'); // 清空屏幕

// 绘制游戏区域边界    for (int i = 0; i < WIDTH + 2; i++)        printf('#');    printf('

');

for (int i = 0; i < HEIGHT; i++) {        for (int j = 0; j < WIDTH; j++) {            if (j == 0)                printf('#'); // 绘制左侧边界

        if (i == y && j == x)                printf('O'); // 绘制蛇头            else if (i == fruitY && j == fruitX)                printf('F'); // 绘制食物            else {                bool printTail = false;                for (int k = 0; k < tailLength; k++) {                    if (tailX[k] == j && tailY[k] == i) {                        printf('o'); // 绘制蛇身                        printTail = true;                    }                }

            if (!printTail)                    printf(' ');            }

        if (j == WIDTH - 1)                printf('#'); // 绘制右侧边界        }        printf('

'); }

// 绘制游戏区域下边界    for (int i = 0; i < WIDTH + 2; i++)        printf('#');    printf('

');

printf('Score: %d

', score); // 显示得分}

// 处理键盘输入void Input() { if (_kbhit()) { // 判断是否有键盘输入 switch (_getch()) { case 'a': dir = LEFT; break; case 'd': dir = RIGHT; break; case 'w': dir = UP; break; case 's': dir = DOWN; break; case 'x': gameOver = true; // 按下 'x' 键退出游戏 break; } }}

// 更新游戏逻辑void Logic() { // 更新蛇身位置 int prevX = tailX[0]; int prevY = tailY[0]; int prev2X, prev2Y; tailX[0] = x; tailY[0] = y;

for (int i = 1; i < tailLength; i++) {        prev2X = tailX[i];        prev2Y = tailY[i];        tailX[i] = prevX;        tailY[i] = prevY;        prevX = prev2X;        prevY = prev2Y;    }

// 根据方向更新蛇头位置    switch (dir) {        case LEFT:            x--;            break;        case RIGHT:            x++;            break;        case UP:            y--;            break;        case DOWN:            y++;            break;    }

// 判断蛇是否超出边界    if (x >= WIDTH)        x = 0;    else if (x < 0)        x = WIDTH - 1;    if (y >= HEIGHT)        y = 0;    else if (y < 0)        y = HEIGHT - 1;

// 判断蛇是否撞到自己    for (int i = 0; i < tailLength; i++) {        if (tailX[i] == x && tailY[i] == y) {            gameOver = true;            break;        }    }

// 判断蛇是否吃到食物    if (x == fruitX && y == fruitY) {        score += 10;        fruitX = rand() % WIDTH;        fruitY = rand() % HEIGHT;        tailLength++; // 蛇身增长    }}

int main() { srand(time(NULL)); // 设置随机数种子

Setup(); // 初始化游戏

while (!gameOver) {         Draw(); // 绘制游戏画面        Input(); // 处理键盘输入        Logic(); // 更新游戏逻辑        Sleep(10); // 控制游戏速度    }

return 0;}

3. 代码解释

  • 头文件: 代码开头包含了以下头文件: - conio.h: 提供控制台输入/输出函数,例如 _kbhit() (检查是否有键盘输入) 和 _getch() (获取按键输入)。 - stdbool.h: 提供布尔类型 bool,可以定义变量值为 truefalse。 - stdio.h: 提供标准输入/输出函数,例如 printf() (格式化输出) 和 scanf() (格式化输入)。 - stdlib.h: 提供常用函数库,例如 rand() (生成随机数) 和 system() (执行系统命令)。 - time.h: 提供时间相关函数,例如 time() (获取当前时间)。 - windows.h: 提供 Windows API 函数,例如 Sleep() (暂停程序执行)。

  • 宏定义: 使用 #define 定义了两个常量 WIDTHHEIGHT,分别表示游戏区域的宽度和高度。

  • 变量: 定义了多个全局变量,用于存储游戏状态信息,例如得分、游戏是否结束、蛇和食物的位置等。

  • 函数: 代码中包含以下函数: - Setup(): 初始化游戏状态,设置初始得分、蛇的位置、食物的位置等。 - Draw(): 绘制游戏画面,包括游戏区域边界、蛇、食物和得分等。 - Input(): 处理玩家的键盘输入,控制蛇的移动方向。 - Logic(): 更新游戏逻辑,例如判断蛇是否吃到食物、是否撞到边界或自身等。 - main(): 程序入口函数,控制游戏的主循环。

  • 游戏循环: 游戏的主要逻辑在一个 while 循环中执行,直到游戏结束条件满足为止。在每次循环中,程序会依次执行以下操作: - Draw(): 绘制当前游戏画面。 - Input(): 处理玩家的键盘输入。 - Logic(): 更新游戏逻辑。 - Sleep(10): 暂停程序执行 10 毫秒,控制游戏速度。

4. 总结

这篇教程提供了一个简单的贪吃蛇游戏的 C 语言实现,并对代码进行了详细的解释。你可以根据自己的需要修改代码,例如改变游戏区域的大小、蛇的速度、食物的类型等。希望这篇教程能够帮助你学习 C 语言游戏开发。

C语言贪吃蛇游戏教程:完整代码及注释详解

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

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