基于EasyX的贪吃蛇小游戏 - C语言

news2025/1/20 1:35:34

游戏基本功能演示:

1.主菜单界面


 

 2.自定难度界面

在这里可以自行设定游戏的难度,包括蛇的移动速度,初始节数,以及默认模式,参考线(网格)。这些设定的数据都会在右上角的游戏属性栏中实时显示。


3.获得帮助界面


 

4.游戏界面

 右上角为当前游戏模式和计分板,按下ESC会弹出游戏暂停界面,暂停界面会显示当前分数里个人最高成绩的差值

当达到死亡条件,进入游戏结束界面


项目特点:

1.界面友好,交互简单:

比如当鼠标停留在按钮上时,按钮会变为待选择状态,符合操作直觉;游戏还有带有背景音乐,趣味性强

2.游戏创新性:

新增障碍方块玩法,使由难度逐梯度上升。

3.本地存储功能:

所有游戏预设和本次游戏成绩将在游戏程序正常终止前自动保存,并在下一次运行时自动读取。

4.注重细节:

比如由于食物颜色是随机变化的,在生成食物的随机颜色时,程序会屏蔽容易和背景色混淆的RGB范围,确保食物能被看见。

代码介绍:

1.项目结构

  1. 头文件 snake.h: 包含必要的库和函数声明。
  2. 主文件 DoMain.cpp: 包含游戏的主循环和游戏状态的控制。
  3. 实现文件 snake.cpp: 包含所有函数的具体实现。

三个重要结构体:

//定义 蛇 结构
struct Snake
{
	int size;//蛇的节数
	int direct;//蛇前进的方向
	int speed;//蛇的速度
	POINT coordinate[SNAKE_NUM]; //每一节蛇的坐标 (0 :蛇头)
};

typedef struct Snake Snake;

游戏中蛇的每一节对应一个snake结构,储存坐标信息 ,前进方向和步长(速度)。

//定义 食物 结构
struct Food
{
	int x;
	int y;
	int r;      //食物的半径
	bool flag;  //食物是否被吃的标记
	DWORD color;//食物的颜色
};

typedef struct Food Food;

 食物结构体用于存放食物的坐标信息,大小和一个标记食物是否被吃的标记变量 

//定义 障碍方块 结构
struct Block
{
	int x, y;
	int width, height;
	bool exists; //食物是否存在的标记
};

typedef struct Block Block;

障碍方块结构和食物结构类似

//当前界面状态
enum GameState
{
	MAIN_MENU,
	GAME_RUNNING,
	GAME_OVER
};

2.核心函数:

  • InitGame: 初始化游戏状态,包括蛇的位置、速度,食物的位置等。
  • Game: 游戏主循环,处理游戏逻辑。
  • GetDirect: 处理用户输入,控制蛇的方向和速度。
  • SnakeMove: 移动蛇的位置。
  • GetFood: 检查蛇是否吃到食物。
  • IsDied: 检查蛇是否死亡,包括撞墙、撞到自身和障碍物。
  • DrawGame: 绘制游戏界面,包括蛇、食物、障碍物等。
  • GamePause: 处理游戏暂停。
  • GameOver: 处理游戏结束。

3.运行原理

初始化:

初始化图形窗口,加载资源图片。

初始化全局变量,包括蛇和食物的位置和状态。

 游戏主循环:

根据当前游戏状态 (currentState) 进行不同的处理:

//当前界面状态
enum GameState
{
	MAIN_MENU,
	GAME_RUNNING,
	GAME_OVER
};
while (1)
{
	switch (currentState)
	{
	case MAIN_MENU:
		Welcome(&snake);
		break;
	case GAME_RUNNING:
		InitGame(&snake, &food);
		Game(&snake, &food);
		break;
	case GAME_OVER:
		GameOver(&snake);
	}
}
  • 主菜单 (MAIN_MENU): 显示欢迎界面,等待玩家选择。
  • 运行游戏 (GAME_RUNNING): 先初始化蛇、食物和障碍物。再进行游戏逻辑处理,包括绘制游戏界面、处理用户输入、移动蛇、检测食物、更新游戏状态等。
  • 游戏结束 (GAME_OVER): 显示游戏结束界面,等待玩家选择重新开始或退出。

仓库:

BuiDerCode/Gluttonous Snake(图形界面) (gitee.com)icon-default.png?t=N7T8https://gitee.com/buidercode/Gluttonous-Snake-Picture

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

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

相关文章

十、结果处理器

这一章和上一章参数处理器类似 首先是在XML解析的时候,顺便解析resultMap和resultType,一般更多的可能用的是resultType,为了实现统一,使用 resultType 的情况下,Mybatis也会创建一个resultMap实体类映射。 使用的时…

云服务器安装宝塔Linux面板全流程,新手教程!

云服务器如何宝塔Linux面板?阿小云以阿里云服务器为例安装宝塔Linux面板全流程,非常简单: 使用阿里云服务器安装宝塔面板教程,阿里云服务器网以CentOS操作系统为例,安装宝塔Linux面板,先远程连接到云服务器…

化栈为队00

题目链接 化栈为队 题目描述 注意点 只能使用标准的栈操作假设所有操作都是有效的 解答思路 使用两个栈模拟队列,第一个栈stk1是按正常栈顺序存储元素,第一个栈stk2是按队列顺序存储元素,初始入栈都是将元素添加到stk1中,当需…

【漯河市人才交流中心_登录安全分析报告-Ajax泄漏滑动距离导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

有哪些好用的ai工具,可以提升科研、学习、办公等效率?

最近,Sora的诞生为AI再添了一把火。 据介绍,这款“文生视频”的Sora可以直接输出长达60秒的视频,并且包含高度细致的背景、复杂的多角度镜头,以及富有情感的多个角色。 不仅能准确呈现细节,还能理解物体在物理世界中…

纷享销客BI典型场景案例解析

本章以具体案例来说明纷享销客一体化BI智能分析平台为企业在实际使用过程中带来的价值。 1)场景一:销售经理想要在周会上关注各销售人员的客户及订单情况,并在每周一上午9点可以把上周的整体情况周期性的将报表推送给相关销售人员。 具体图表展示样式及…

开关电源基本原理1

目录 内容概述 关于电感 认识电感 电感充电 电感储能 电感充电 电感参数 电感放电 利用电感升压 电感电流波形 伏秒法则 电流纹波率 电感电流三种导电模式 电流纹波率与频率的关系 电流纹波率与电感值的关系 电感值与电感体积 电路纹波率r的最优值 电感值与电…

【面经】亚信科技面试问题合集

下述内容经搜寻广大平台的面试经历,整理汇合得出,答案来自chatgpt,加黑的地方意味着出现多次。 1.自我介绍 2.介绍项目功能 3.和equals的区别。八大基本类型(byte,char,int ,long,double,float,boolean,short) 是用于比较两个…

纷享销客BI智能分析平台常见问题QA

Q1在驾驶舱中查看图表时,图表间有什么动态交互吗? A:驾驶舱支持图表本身下钻,图表间联动,并且支持图表下钻的同时联动,可以基于驾驶舱的这个功能,实现图表间的动态交互。 Q2基于客户主题创建的统计图&…

短视频系列内容生产技能提升 沈阳短视频剪辑培训

优势:一、短视频系列化内容的优势 ①可持续性强 某一条视频效果很好(几十万点赞)时,按照相同格式继续输出非常容易成功: √不需要设计脚本; √不需要重新定制。 √稳定性强, ②节约时间成本和制作成本 举例对标账号&#xf…

Python | mkvirtualenv命令改变虚拟环境存储位置

文章目录 1、问题引入2、解决方式 1、问题引入 使用mkvirtualenv 命令创建虚拟环境时,默认创建位置在C:\Users你的计算机名目录下,采用下面的方式可以修改虚拟环境存储位置,默认创建位置是Python内置写好的,默认是这样的。 2、解…

Java项目:95 springboot班级回忆录的设计与实现

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本管理系统有管理员和用户。 本海滨学院班级回忆录管理员功能有个人中心,用户信息管理,班委信息管理,班级信息管理…

揭秘2024最新版会声会影旗舰版本功能,下载即享专业编辑

在如今这个数字化时代,视频编辑已经成为了许多人生活中不可或缺的一部分。无论是专业的影视制作人员,还是普通的短视频爱好者,都希望能够找到一款功能强大、操作简便的视频编辑软件。而今天,我要为大家介绍的这款产品——会声会影…

60秒,手把手教会你!做抖音小店怎么上架商品?

哈喽~我是电商月月 很多新手朋友做抖店,兴致冲冲选好商品结果傻眼了!不知道怎么上架操作啊! 别着急,今天月月就给大家讲一讲抖音小店是怎么上架商品的,其中有两点,一定要特别注意!【有违规的规…

Vue.js 动画与过渡效果实战

title: Vue.js 动画与过渡效果实战 date: 2024/6/4 updated: 2024/6/4 description: 这篇文章介绍了如何在网页设计中使用过渡动画和组件效果,以及如何利用模式和列表展示信息。还提到了使用钩子实现组件间通信的方法。 categories: 前端开发 tags: 过渡动画组件…

【力扣】不相交的线

一、题目描述 二、题目解析 根据上图及题目给出的示例,我们不难发现,我们其实要找的就是两个数组中的最长公共子序列的长度。 因此,本题我们就可以直接转化为求两个数组中的最长公共子序列的长度。 对于 最长公共子序列问题,可…

【Qt秘籍】[006]-Label实现Hello World程序-编程第一步

"Hello,World!" 中文意思是“你好,世界”。 因为 The C Programming Language 中使用它做为第一个演示程序,后来很多程序员在学习编程或进行设备调试时延续了这一习惯。 下面,我们也将演示利用Label显示Qt中的"Hello World!&q…

智慧公厕厂家+智能厕所小程序,构建数字化公厕新体系

在现代社会的诸多场景中,公厕扮演着重要却常常被忽视的角色。尤其是在传统的楼宇中,公厕存在着一系列痛点问题。 一、传统公厕问题 传统楼宇公厕常常面临着布局不合理的困境,导致使用者寻找困难,浪费时间和精力。卫生状况也是一大…

vue无需引入第三方, 将web页面内容直接下载为docx

vue无需引入第三方&#xff0c; 将web页面内容直接下载为docx 将web页面内容重绘 html &#xff0c;通过 a 标签直接下载 通过写行内样式&#xff0c;控制docx中的文字图效果 let echHtmlWithIf ;if (this.chartImg.length) {if (this.exceed10Min) {echHtmlWithIf <div…

数据觉醒时代,以“存力”激活数据资产潜能

近日&#xff0c;质汇“杨数浦”主题研讨会首场活动在杨浦滨江举行&#xff0c;是杨浦区筹推进数字经济与城市数字化发展的一大重要举措&#xff0c;各行业协会、科研院所及企业代表参加活动&#xff0c;共商行业发展新机遇。活动现场&#xff0c;优刻得董事长兼CEO季昕华被授予…