基于EasyX的贪吃蛇小游戏 - C语言
游戏基本功能演示:
1.主菜单界面

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

3.获得帮助界面

4.游戏界面

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

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

项目特点:
1.界面友好,交互简单:
比如当鼠标停留在按钮上时,按钮会变为待选择状态,符合操作直觉;游戏还有带有背景音乐,趣味性强
2.游戏创新性:
新增障碍方块玩法,使由难度逐梯度上升。

3.本地存储功能:
所有游戏预设和本次游戏成绩将在游戏程序正常终止前自动保存,并在下一次运行时自动读取。
4.注重细节:
比如由于食物颜色是随机变化的,在生成食物的随机颜色时,程序会屏蔽容易和背景色混淆的RGB范围,确保食物能被看见。

代码介绍:
1.项目结构
- 头文件
snake.h: 包含必要的库和函数声明。- 主文件
DoMain.cpp: 包含游戏的主循环和游戏状态的控制。- 实现文件
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)
https://gitee.com/buidercode/Gluttonous-Snake-Picture
相关文章:
基于EasyX的贪吃蛇小游戏 - C语言
游戏基本功能演示: 1.主菜单界面 2.自定难度界面 在这里可以自行设定游戏的难度,包括蛇的移动速度,初始节数,以及默认模式,参考线(网格)。这些设定的数据都会在右上角的游戏属性栏中实时显示。…...
使用Docker辅助图像识别程序开发:在Docker中显示GUI、访问GPU、USB相机以及网络
目录概览 引言安装和配置安装docker安装nvidia-docker在docker中显示GUI在Docker中访问usb相机在Docker镜像中开放端口开启更多的GPU功能支持创建本地镜像中心一些可选参数上传镜像回收空间清理所有的无用镜像清理指定的镜像GPU Docker with Anaconda第一种方式:构建DockerFile…...
Java中常见错误-泛型擦除及桥接方法问题及解决方案
Java中泛型擦除及桥接方法 泛型擦除无界擦除上界擦除下界擦除 桥接方法演示案例wrong1wrong2wrong3right 原理总结 泛型擦除 泛型擦除是Java泛型机制的一个特性,它意味着**在编译期间,所有的泛型信息都会被移除,而在运行时,所…...
Linux 程序守护脚本
引言 程序是由代码形成的,代码是由人写的。只要是人,都会有疏忽的时候,导致写出的程序有bug,当然最严重的bug就是程序闪退。 本文旨在提供一个程序守护脚本,当监测到程序闪退后,立马将程序再起启动&#…...
跨境电商|Facebook Marketplace怎么做?
2016 年,Facebook打造了同名平台 Facebook Marketplace。通过利用 Facebook 现有的庞大客户群,该平台取得了立竿见影的成功,每月访问量将超过 10 亿。对于个人卖家和小企业来说,Facebook Marketplace是一个不错的销货渠道…...
.gitignore 文件
一.什么是 .gitignore 文件 在任何当前工作的 Git 仓库中,每个文件都是这样的: 追踪的(tracked)- 这些是 Git 所知道的所有文件或目录。这些是新添加(用 git add 添加)和提交(用 git commit 提…...
qt中实现多语言功能
qt中实现多语言功能 原理: 其本质就是生成ts文件,然后使用Linguist软件手工翻译,再生成qm文件,最后在主程序的开始加载不同的qm文件,实现多语言。 步骤: 修改程序文件 在pro文件中加入说明 TRANSLATI…...
数据结构与算法之 leetcode 513. 找树左下角的值 (BFS) 广度优先
513. 找树左下角的值 /*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val (valundefined ? 0 : val)* this.left (leftundefined ? null : left)* this.right (rightundefined ? null : right)* }*/ /*** param {T…...
mysql中的函数
MySQL提供了丰富的内置函数,涵盖了字符串操作、数字计算、日期和时间处理、条件判断、聚合计算等多个方面。这些函数可以帮助开发者在查询和数据处理时更高效地完成任务。下面是对MySQL中常见的函数分类及其主要函数的介绍: 字符串函数 CONCAT()&#x…...
Shell正则表达式与文本处理器
一、grep 1. 正则表达式 是一种匹配字符串的方法,通过一些特殊符号,快速实现查找,删除,替换某特定字符串。 选项: -a 不要忽略二进制数据。 -A 显示该行之后的内容。 -b 显示该行之前的内容。 -c 计算符合范本样…...
双指针法 ( 三数之和 )
题目 :给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…...
感染恶意代码之后怎么办?
隔离设备 立即将感染设备与网络隔离,断开与互联网和其他设备的连接。这可以防止恶意代码进一步传播到其他设备,并减少对网络安全的威胁。 确认感染 确认设备是否真的感染了恶意代码。这可能需要使用安全软件进行全面扫描,以检测和识别任何已…...
【计算机网络】P3 计算机网络协议、接口、服务的概念、区别以及计算机网络提供的三种服务方式
目录 协议什么是协议协议是水平存活的协议的组成 接口服务服务是什么服务原语 协议与服务的区别计算机网络提供的服务的三种方式面向连接服务与无连接服务可靠服务与不可靠服务有应答服务与无应答服务 协议 什么是协议 协议,就是规则的集合。 在计算机网络中&…...
多角度剖析事务和事件的区别
事务和事件这两个概念在不同的领域有着不同的含义,尤其是在计算机科学、数据库管理和软件工程中。下面从多个角度来剖析事务和事件的区别: 计算机科学与数据库管理中的事务 事务(Transaction): 定义:在数据库管理中,…...
模糊小波神经网络(MATLAB 2018)
模糊系统是一种基于知识或规则的控制系统,从属于智能控制,通过简化系统的复杂性,利用控制法来描述系统变量之间的关系,采用语言式的模糊变量来描述系统,不必对被控对象建立完整的数学模型。相比较传统控制策略…...
HTML布局
标准流: 标准流就是元素在页面中的默认排列方式,也就是元素在页面中的默认位置。 1.1 块元素----独占一行----从上到下排列 1.2 行内元素----不独占一行----从左到右排列,遇到边界换行 1.3 行内块元素----不独占一行…...
数据结构:双链表
数据结构:双链表 题目描述参考代码 题目描述 输入样例 10 R 7 D 1 L 3 IL 2 10 D 3 IL 2 7 L 8 R 9 IL 4 7 IR 2 2输出样例 8 7 7 3 2 9参考代码 #include <iostream>using namespace std;const int N 100010;int m; int idx, e[N], l[N], r[N];void init…...
Python3 元组、列表、字典、集合小结
前言 本文主要对Python中的元组、列表、字典、集合进行小结,主要内容包括知识点回顾、异同点、使用场景。 文章目录 前言一、知识点回顾1、列表(List)2、 元组(Tuple)3、 字典(Dictionary)4.、…...
2024会声会影破解免费序列号,激活全新体验!
会声会影2024序列号注册码是一款专业的视频编辑软件,它以其强大的功能和易用性受到了广大用户的喜爱。在这篇文章中,我将详细介绍会声会影2024序列号注册码的功能和特色,帮助大家更好地了解这款产品。 会声会影全版本绿色安装包获取链接&…...
机器学习18个核心算法模型
1. 线性回归(Linear Regression) 用于建立自变量(特征)和因变量(目标)之间的线性关系。 核心公式: 简单线性回归的公式为: , 其中 是预测值, 是截距, 是斜…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...
ffmpeg(三):处理原始数据命令
FFmpeg 可以直接处理原始音频和视频数据(Raw PCM、YUV 等),常见场景包括: 将原始 YUV 图像编码为 H.264 视频将 PCM 音频编码为 AAC 或 MP3对原始音视频数据进行封装(如封装为 MP4、TS) 处理原始 YUV 视频…...
【Vue】scoped+组件通信+props校验
【scoped作用及原理】 【作用】 默认写在组件中style的样式会全局生效, 因此很容易造成多个组件之间的样式冲突问题 故而可以给组件加上scoped 属性, 令样式只作用于当前组件的标签 作用:防止不同vue组件样式污染 【原理】 给组件加上scoped 属性后…...
