【C语言】贪吃蛇详解(附源码)

慈云数据 2024-05-28 技术支持 48 0

一、贪吃蛇实现效果

C语言】贪吃蛇(控制台

二、源码

🎈🎈🎈Snake · 残风也想永存/C语言项目 - 码云 - 开源中国 (gitee.com)🎈🎈🎈

三、如何使用C语言去实现一个贪吃蛇?

1.0.贪吃蛇游戏设计

实现一个贪吃蛇游戏,我们需要构建一个清晰的游戏框架并考虑以下几个方面:

1.1. 游戏元素生成与表现
  • 食物生成:通过随机数生成函数,确定食物在游戏窗口内的随机位置。
  • 贪吃蛇表现:利用结构体存储贪吃蛇的信息(如位置、长度、移动方向等),并通过一帧帧的绘制来展现其移动效果。
    1.2. 游戏界面设计
    • 窗口大小:设定游戏窗口的尺寸,决定游戏区域的边界。
    • 可移动范围:设定贪吃蛇在游戏窗口内可自由移动的区域。
    • 围墙设计:确保贪吃蛇在触碰到窗口边界时能够识别为撞墙。 元素形状:定义贪吃蛇和食物的形状,以便在界面上绘制。
      1.3. 游戏信息管理与打印
      • 贪吃蛇信息存储:使用结构体来存储贪吃蛇的状态信息,包括当前位置、长度、移动速度等。
      • 信息打印:在游戏界面上实时显示当前贪吃蛇的长度(得分)、速度、食物的分值以及帮助信息等信息。
        1.4. 游戏逻辑控制
        • 蛇的移动:根据用户的输入或默认方向控制贪吃蛇的移动方向。
        • 状态判断:实时检测(每走一步)贪吃蛇是否撞墙或蛇头是否撞到自身,以及是否吃到食物。
        • 食物分值:设置吃到食物后的分值变化,并更新贪吃蛇的长度。
          1.5. 用户交互
          • 移动方向控制:允许用户通过交互设备控制贪吃蛇的移动方向。
          • 移动速度控制:允许用户通过交互设备控制贪吃蛇的移动速度。
          • 游戏状态控制:允许用户通过交互设备控制贪吃蛇的游戏暂停与游戏结束。
            1.6.实现注意事项
            • 在实现过程中,需要注意代码的模块化与可读性(我会带你们感受一下,代码的模块化是多么的爽),以便后续的维护和扩展。同时,也要考虑游戏的性能优化,确保流畅的游戏体验。
              2.技术要求(win32 API / cmd命令)
              2.0.前言
              • win32 API 的函数接口使用需要引头文件
              • system() 库函数的使用需要引用头文件
              • 打印宽字符,必须事先本地化;
                2.1.修改控制台大小和名字       

                在C语言中,存在一个库函数可以用来执行控制台命令:

                int system(const char* command);    

                #修改控制台的大小        (这里我将控制台的长设为100,宽设为30)

                mode con cols = 100 lines = 30

                system("mode con cols=100 lines=30");

                #修改控制台的名字        (这里我将控制台名字设为贪吃蛇)

                title 贪吃蛇 

                system("title 贪吃蛇");

                2.2.隐藏控制台光标

                2.3.定位光标位置

                2.4.修改控制台文字输出颜色

                2.5.获取按键信息

                更多键值信息:虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn

                2.6.宽字符与窄字符
                • 宽字符和窄字符的定义:
                • ASCII是用于信息交换的标准单字节字符编码系统。它最初包含了128个特定字符,每个字符占用一个字节(8位)。这些字符主要是英文字母、数字和一些控制字符。因此,ASCII码对应的字符通常被称为窄字符。
                • 随着C语言使用国家与区域的人越来越多,使用一个char类型来存储已经明显不够用了,所以就引用了多字符(通常是两个字符),也被称为宽字符。
                • 我们可以在控制台上打印以下的宽字符来表示蛇身,蛇头,食物,和围墙

                  2.7.如何去打印宽字符

                  注意:很多宽字符在控制台上的打印是窄字符的两倍(如上边打印的特殊符号)

                  2.8.如何播放音乐(选择)

                  所需头文件

                  #include

                  #include

                  #pragma comment(lib,"winmm.lib")

                  播放音乐的函数

                  MCIERROR mciSendString( LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback );

                  第二个参数:填 NULL 就行

                  第三个参数:填 0 就行

                  第四个参数:填 NULL 就行

                  第一个参数:对音乐进行的操作

                  1.L"open 文件名 alias 别名"          #打开音乐文件+取别名

                  2.L"setaudio 文件名 volume to 音量大小"         #调整音量大小

                  3.L"play 文件名 repeat"         #播放音乐+重复播放

                  4.L"stop 文件名"         #停止播放音乐

                  这是我把此函数的所有功能进行了重新封装:以达到方便使用的功能~

                  2.9.如何播放音效(选择)

                  BOOL PlaySound( LPCSTR pszSound, HMODULE hmod, DWORD fdwSound );

                  第一个参数:你要播放的音效的文件路径

                  第二个参数:填 NULL 就行

                  第三个参数:填 0 就行

                  四、代码实现(详解)

                  1.代码实现流程框图

                  2. 每个板块的逐一实现与讲解
                  2.1.游戏开始
                  2.1.0.游戏开始的函数代码

                  2.1.1.播放音乐

                  2.1.2.设置控制台信息

                  2.1.3.打印欢迎界面

                  2.1.4.初始化围墙

                  2.1.5.初始化贪吃蛇

                  蛇的生成起始位置+起始蛇的长度

                   

                  2.1.6.随机生成食物

                  2.1.7.打印帮助信息

                  2.2.游戏运行
                  2.2.0.游戏运行的函数代码

                  2.2.1.打印得分情况

                  2.2.2.获取按键情况

                  2.2.3.蛇的移动(重要)

                  2.2.4.判断是否撞墙

                  2.2.5.判断是否撞到自身

                  2.2.6.贪吃蛇的休眠

                  Sleep(snake->_SnakeSpeed); 

                  2.2.7.判断游戏状态

                  snake->_State == GAME_NORMAL //只需判断这个语句是否为真;

                  2.3.游戏结束

                  2.4.菜单代码(实现重复玩功能)

                  五、问题拓展补充

                  0.问题介绍

                  你得保证自己的一切操作是Windows控制台上执行的,而不是终端上面,修改方法,上边的横栏右键,点击设置,将windows终端,改为windows控制台即可~

                  1.终端示意图(错误)

                  2.控制台示意图(正确)

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon