当前位置: 首页 > news >正文

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

游戏基本功能演示:

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

相关文章:

基于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是一个不错的销货渠道&#xf…...

.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): 定义:在数据库管理中&#xff0c…...

模糊小波神经网络(MATLAB 2018)

模糊系统是一种基于知识或规则的控制系统,从属于智能控制,通过简化系统的复杂性,利用控制法来描述系统变量之间的关系,采用语言式的模糊变量来描述系统,不必对被控对象建立完整的数学模型。相比较传统控制策略&#xf…...

HTML布局

标准流: 标准流就是元素在页面中的默认排列方式,也就是元素在页面中的默认位置。 1.1 块元素----独占一行----从上到下排列 1.2 行内元素----不独占一行----从左到右排列,遇到边界换行 1.3 行内块元素----不独占一行…...

数据结构:双链表

数据结构&#xff1a;双链表 题目描述参考代码 题目描述 输入样例 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中的元组、列表、字典、集合进行小结&#xff0c;主要内容包括知识点回顾、异同点、使用场景。 文章目录 前言一、知识点回顾1、列表&#xff08;List&#xff09;2、 元组&#xff08;Tuple&#xff09;3、 字典&#xff08;Dictionary&#xff09;4.、…...

2024会声会影破解免费序列号,激活全新体验!

会声会影2024序列号注册码是一款专业的视频编辑软件&#xff0c;它以其强大的功能和易用性受到了广大用户的喜爱。在这篇文章中&#xff0c;我将详细介绍会声会影2024序列号注册码的功能和特色&#xff0c;帮助大家更好地了解这款产品。 会声会影全版本绿色安装包获取链接&…...

机器学习18个核心算法模型

1. 线性回归&#xff08;Linear Regression&#xff09; 用于建立自变量&#xff08;特征&#xff09;和因变量&#xff08;目标&#xff09;之间的线性关系。 核心公式&#xff1a; 简单线性回归的公式为&#xff1a; , 其中 是预测值&#xff0c; 是截距&#xff0c; 是斜…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...