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

一、贪吃蛇实现效果

【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 的函数接口使用需要引头文件<Windows.h>
  • system() 库函数的使用需要引用头文件<stdlib.h>
  • 打印宽字符,必须事先本地化;
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<Windows.h>
#include<mmstream.h>
#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.控制台示意图(正确)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/315432.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Three.js和Cesium.js中坐标

在了解Three.js和Cesium.js前先了解并弄清楚图形学关于空间的基本概念流程&#xff1a; 计算机图形学 图形学中涉及到多个坐标空间&#xff0c;这些空间之间的变换是图形渲染中的核心部分。下面是一些常见的图形学空间及其变换顺序&#xff1a; 对象空间&#xff08;Object Sp…

分类神经网络1:VGGNet模型复现

目录 分类网络的常见形式 VGG网络架构 VGG网络部分实现代码 分类网络的常见形式 常见的分类网络通常由特征提取部分和分类部分组成。 特征提取部分实质就是各种神经网络&#xff0c;如VGG、ResNet、DenseNet、MobileNet等。其负责捕获数据的有用信息&#xff0c;一般是通过…

ASP.NET基于WEB的选课系统

摘要 设计本系统的目的是对选课信息进行管理。学生选课系统维护模块主要完成的是系统管理与维护功能。课题研究过程中&#xff0c;首先对系统管理模块进行了详尽的需求分析&#xff0c;经分析得到系统管理模块主要完成如下的功能&#xff1a;用户基本信息、选课信息的录入,查看…

Spring Boot 如何实现缓存预热

Spring Boot 实现缓存预热 1、使用启动监听事件实现缓存预热。2、使用 PostConstruct 注解实现缓存预热。3、使用 CommandLineRunner 或 ApplicationRunner 实现缓存预热。4、通过实现 InitializingBean 接口&#xff0c;并重写 afterPropertiesSet 方法实现缓存预热。 1、使用…

华为先进芯片麒麟9010效能再升级,挑战新高度 | 百能云芯

根据最新的彭博资讯报道&#xff0c;华为再次引领了智能手机行业的先进技术&#xff0c;其最新发布的Pura 70系列智能手机搭载了由中芯国际生产的麒麟9010高阶处理器。这一消息再次证明了华为在芯片设计和生产领域的持续创新能力&#xff0c;并且表明华为对于提升智能手机性能和…

【机器学习】集成学习---Bagging之随机森林(RF)

【机器学习】集成学习---Bagging之随机森林&#xff08;RF&#xff09; 一、引言1. 简要介绍集成学习的概念及其在机器学习领域的重要性。2. 引出随机森林作为Bagging算法的一个典型应用。 二、随机森林原理1. Bagging算法的基本思想2. 随机森林的构造3. 随机森林的工作机制 三…

开源文本嵌入模型M3E

进入正文前&#xff0c;先扯点题外话 这两天遇到一个棘手的问题&#xff0c;在用 docker pull 拉取镜像时&#xff0c;会报错&#xff1a; x509: certificate has expired or is not yet valid 具体是下面&#x1f447;这样的 rootDS918:/volume2/docker/xiaoya# docker pul…

一款神奇的地理数据可视化python库

在地理信息系统&#xff08;GIS&#xff09;和地理数据可视化领域&#xff0c;Python的易用性和强大的库支持使其成为处理地理数据的理想选择之一。今天我们介绍Cartopy库&#xff0c;它为地理数据可视化提供了强大的支持。无论是对于GIS专业人士还是对地理数据可视化感兴趣的初…

同事上班这样摸鱼,我坐边上咋看他都在专心写代码啊

我边上有个同事&#xff0c;我坐他边上&#xff0c;但是每天看着他都眉头紧锁&#xff0c;忙的不亦乐乎&#xff0c;但终于有一天&#xff0c;我发现了他上班摸鱼的秘诀。 我劝你千万不要学会这4招&#xff0c;要不就该不好好上班了。 目录 1 上班看电影&#xff1f; 2 上班…

<计算机网络自顶向下> Internet Protocol(未完成)

互联网中的网络层 IP数据报格式 ver: 四个比特的版本号&#xff08;IPV4 0100, IPV6 0110&#xff09; headlen&#xff1a;head的长度&#xff08;头部长度字段&#xff08;IHL&#xff09;指定了头部的长度&#xff0c;以32位字&#xff08;4字节&#xff09;为单位计算。这…

pytest测试基础

assert 验证关键字 需要pahton版本大于3.6&#xff0c;因为有个工具pip3;因为做了映射&#xff0c;所以下面命令pip3即pip pip install -U pytest -U参数可选&#xff0c;是如果已安装可更新。 如果上述demo变化 通过验证代码&#xff0c;测试环境没问题。…

接口测试-笔记

Date 2024年4月23日21:19:51 Author KarrySmile 1. 前言 因为想更加规范地开发接口&#xff0c;同时让自己测试接口的时候更加高效&#xff0c;更好地写好接口文档。所以学习黑马的《接口自动化测试》课程。链接&#xff1a;黑马程序员软件测试接口自动化测试全套视频教程&a…

MATLAB 运算符

MATLAB 运算符 运算符是一个符号&#xff0c;告诉编译器执行特定的数学或逻辑操作。MATLAB设计为主要在整个矩阵和数组上运行。因此&#xff0c;MATLAB中的运算符既可以处理标量数据&#xff0c;也可以处理非标量数据。MATLAB允许以下类型的基本运算- 算术运算符 关系运算符…

【linux】Linux第一个小程序-进度条

1. 预备知识&#xff1a;回车和换行 回车&#xff08;Carriage Return&#xff0c;CR&#xff09;&#xff1a; 在早期的机械打字机中&#xff0c;回车指的是将打字机的打印头移回到行首的操作&#xff0c;这样打印头就可以开始新的一行的打印。在ASCII编码中&#xff0c;回车用…

数据库介绍(Mysql安装)

前言 工程师再在存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 一、什么是数据库&#xff1f; 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质&#xff1a; 磁…

编译支持播放H265的cef控件

接着在上次编译的基础上增加h265支持编译支持视频播放的cef控件&#xff08;h264&#xff09; 测试页面&#xff0c;直接使用cef_enhancement,里边带着的那个html即可&#xff0c;h265视频去这个网站下载elecard,我修改的这个版本参考了里边的修改方式&#xff0c;不过我的这个…

Blender面操作

1.细分Subdivide -选择一个面 -右键&#xff0c;细分 -微调&#xff0c;设置切割次数 2.删除 -选择一个或多个面&#xff0c;按X键 -选择要删除的是面&#xff0c;线还是点 3.挤出面Extrude -选择一个面 -Extrude工具 -拖拽手柄&#xff0c;向外挤出 -微调&#xff…

Opencv | 边缘提取

目录 一. 边缘检测1. 边缘的定义2. Sobel算子 边缘提取3. Scharr算子 边缘提取4. Laplacian算子 边缘提取5. Canny 边缘检测算法5.1 计算梯度的强度及方向5.2 非极大值抑制5.3 双阈值检测5.4 抑制孤立弱边缘 二. 轮廓信息1. 获取轮廓信息2. 画轮廓 一. 边缘检测 1. 边缘的定义…

自动化爬虫工具:you-get安装与使用

Windows下的安装命令&#xff1a; pip install you-get linux下的安装命令&#xff1a; pip3 install you-get 下载完成后&#xff0c;我们可以看到如下的警告&#xff0c;意思就是这个工具并未被添加到环境变量中&#xff0c;如果我们想在命令行中直接调用&#xff0c;需要…

sql今天学习总结

排序order by&#xff08;默认升序&#xff09; order by id desc(降序排序&#xff09; order by id,number&#xff08;先按id排再按name排序&#xff09; in,not in and or 通配符 where name like "Aa%";选取所有以Aa开头的名字 like "%r" 以r结…