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

news2024/12/29 10:18:46

一、贪吃蛇实现效果

【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.coloradmin.cn/o/1631030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1438.绝对差不超过限制的最长连续子数组

显然我们是需要同时维护当前的最大值和最小值,这就需要两个单调队列dq_down(递减排列)一个维护最大值,dq_up(递增排列)一个维护最小值,同样这个是使用我们第二个模板 [left, i]. 只有当left等于某一个dq.front()的时候,才把它pop_front().这就使得对应相同的元素,我们只需要保…

ruoyi-nbcio-plus基于vue3的flowable修正加签与跳转的前端问题

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

IF 27.5|GWAS+图位克隆法,揭秘水稻调控籽粒性状的关键基因

水稻是全球种植最广泛的作物 拥有超过12万个品种 提高粮食品质是当代水稻育种的首要目标 在现代水稻育种中&#xff0c;不同类型的水稻已经被培育出来&#xff0c;比如食用稻和酿酒稻。这些不同类型的水稻具备不同的籽粒特性&#xff0c;其中包括育种过程中选择的不同等位基因…

应用实战|只需几步,即可享有外卖订餐小程序

本示例是一个简单的外卖查看店铺点菜的外卖微信小程序&#xff0c;小程序后端服务使用了MemFire Cloud&#xff0c;其中使用到的MemFire Cloud功能包括&#xff1a; 其中使用到的MemFire Cloud功能包括&#xff1a; 云数据库&#xff1a;存储外卖微信小程序所有数据表的信息。…

OpenHarmony语言基础类库【@ohos.xml (xml解析与生成)】

将XML文本转换为JavaScript对象、以及XML文件生成和解析的一系列接口。 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import xml from ohos.xml; XmlSerializer XmlSerializer接口…

可审批可审计追溯的单网络导出文件方案,了解一下

在物理隔离状态下&#xff0c;单网络导出文件是一个重要的安全需求&#xff0c;特别是在处理敏感数据时。在这种环境下&#xff0c;数据导出需要采取特殊的安全措施&#xff0c;以确保数据传输的安全性和合规性。需要考虑以下因素&#xff1a; 安全性&#xff1a;确保传输过程加…

代码随想录算法训练营第12天:滑动窗口和前缀和

代码随想录算法训练营第12天&#xff1a;滑动窗口和前缀和 这里我参考了西法的博客&#xff0c; 467. 环绕字符串中唯一的子字符串(中等)795. 区间子数组个数(中等)904. 水果成篮(中等)992. K 个不同整数的子数组&#xff08;困难&#xff09;1109. 航班预订统计(中等) 前四…

netsh int ipv4 show dynamicport tcp动态端口port设置

netsh int ipv4 show dynamicport tcp netsh int ipv4 set dynamicport tcp start4000 num10000

测试下目录显示否

目录 1、安装docker 2、搜索镜像 3、拉取镜像 4、查看镜像列表 5、运行镜像 6、查看运行容器列表 8、命令行连接数据库 1、安装docker 2、搜索镜像 docker search mysql 3、拉取镜像 docker pull mysql 4、查看镜像列表 docker images 5、运行镜像 docker run -p …

#ESP32S3R8N8建立工程(VSCODE)点亮LED

1.参考文档 【立创ESP32S3R8N8】IDF入门手册 - 飞书云文档 (feishu.cn)https://lceda001.feishu.cn/wiki/GOIlwwfbIi1SC3k8594cDeFVn8g 2.建立工程 3.运行效果 4.更改配置 5.插播 之前配置的环境是有问题的&#xff0c;就算有自动检测也要仔细检查&#xff0c;必须严格按照以…

【推荐】程序员的免费羊毛!!!

还剩下最后两天了&#xff0c;最后这两天抽奖命中率特别高&#xff0c;基本中奖99.99% 有大量日历、数码电子产品。 点击链接参与「通义灵码 体验 AI 编码&#xff0c;开 AI 盲盒」 https://developer.aliyun.com/topic/lingma/activities/202403?taskCode14508&recor…

Windows系统中下Oracle 19C数据库超级详细安装、设置教程(自己电脑上安装Oracle学习,保姆级教学,亲测有效)

Oracle 官方提供了一个基于 Java 技术的图形界面安装工具&#xff1a;Oracle Universal Installer&#xff08;Oracle 通用安装器&#xff09;简称 OUI&#xff0c;利用它可以完成在不同操作系统平台上&#xff08;Windows、Linux、UNIX&#xff09;的、不同类型的、不同版本的…

vb.net编写简易计算器(DataTable )

如下图所示界面&#xff1a; 部分代码&#xff1a; Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click TextBox1.Text "" End Sub Private Sub Button19_Click(sender As Object, e As EventArgs) Handles Button19.Cli…

手机空号过滤,提高工作效率

手机空号过滤在多个方面都具有重要的作用。 首先&#xff0c;它对于短信群发商和电话营销商来说至关重要。通过空号过滤&#xff0c;他们可以确保手机号码数据库的准确性和有效性。由于每天都有大量人群因各种原因更换手机号码&#xff0c;导致每个号段中的空号率和手机状态都…

AI图书推荐:《企业AI转型:如何在企业中部署ChatGPT?》

Jay R. Enterprise AI in the Cloud. A Practical Guide...ChatGPT Solutions &#xff08;《企业AI转型&#xff1a;如何在企业中部署ChatGPT&#xff1f;》&#xff09;是一本由Rabi Jay撰写、于2024年由John Wiley & Sons出版的书籍&#xff0c;主要为企业提供实施AI转型…

就业班 第三阶段(tomcat) 2401--4.28 day1 tomcat1安装配置及单机多实例

企业 Tomcat 运维 文章目录 企业 Tomcat 运维一、Tomcat 简介1、Tomcat好帮手---JDK2、安装Tomcat & JDK1、系统环境说明2 、安装JDK3、安装Tomcat 二、Tomcat目录介绍1、tomcat主目录介绍2、webapps目录介绍3、Tomcat配置介绍&#xff08;conf&#xff09;4、Tomcat的管理…

C# Onnx yolov8 pig detection

C# Onnx yolov8 pig detection 目录 效果 项目 模型 代码 数据集 下载 效果 项目 模型 Model Properties ------------------------- date&#xff1a;2024-04-28T15:13:10.750689 description&#xff1a;Ultralytics YOLOv8n model trained on C:\Work\yolov8\datas…

手撕红黑树(kv模型模拟)

目录 前言 一、相关概念 二、性质介绍 红黑树平衡说明 三、红黑树模拟&#xff08;kv结构&#xff09; 1、红黑树节点 2、红黑树插入 2、特殊处理情况 声明&#xff1a; 情况一&#xff1a;cur为红&#xff0c;p为红&#xff0c;g为黑&#xff0c;u存在&#xff0c;且…

高频面试题:解决Spring框架中的循环依赖问题

引言&#xff1a;什么是Spring框架与循环依赖&#xff1f; 在Spring框架中&#xff0c;循环依赖是指两个或多个bean相互依赖对方以完成自己的初始化。这种依赖关系形成了一个闭环&#xff0c;导致无法顺利完成依赖注入。比如&#xff0c;如果Bean A在其构造函数中需要Bean B&a…

【python笔记】datafram的时间动态可视化 pyecharts地图

import pandas as pd# 假设DataFrame是这样的&#xff1a; df pd.DataFrame({ year: [2014, 2015, 2016, 2014, 2015, 2016, 2014, 2015, 2016], province: [广东省, 广东省, 河南省, 湖南省, 北京市, 北京市, 上海市, 新疆维吾尔自治区, 上海市], values: [100, 150, 75…