基于C/C++的easyx实现贪吃蛇游戏

文章目录:

一:运行效果

1.演示

2.思路和功能

二:代码

文件架构

Demo


必备知识:基于C/C++的easyx图形库教程

一:运行效果

1.演示

效果图◕‿◕✌✌✌

基于C/C++的easyx实现贪吃蛇游戏运行演示


参考:【C语言实战】用EasyX写个七彩贪吃蛇游戏(1个小时) 

博主提取资源:提取

2.思路和功能

通过按键控制蛇的移动去吃食物

二:代码

文件架构

Demo

#include <graphics.h>
#include <conio.h>#define WIDTH 40				//横的有40个格子
#define HEIGHT 30				//竖的有30个格子
#define SIZE 20					//每个格子的大小为20// 全局变量定义
int Blocks[WIDTH][HEIGHT] = { 0 };		//表示所有的方格,用于记录地图中所有的游戏数据
char moveDirection,oldMoveDirection;	// moveDirection初始化移动方向
int foodX, foodY;						//食物的坐标
int isFailure = 0;						//游戏状态//声明函数
void initGame();				//初始化游戏
void show();					//每一次运行时重新绘制蛇和食物的图像
void updateWithInput();			//与输入有关的更新
void updateWithoutInput();		//与输入无关的更新
void moveSnake();				//蛇运动//---------------------------------------------------------------------------------//
int main() {//初始化游戏initGame();while (1) {show();						//每一次运行时重新绘制蛇和食物的图像updateWithoutInput();		//与输入无关的更新updateWithInput();			//与输入无关的更新}return 0;
}
//---------------------------------------------------------------------------------////初始化游戏
void initGame() {//初始化窗口initgraph(WIDTH * SIZE, HEIGHT * SIZE);//设置背景颜色setbkcolor(LIGHTGRAY);// 开始批量绘制BeginBatchDraw();cleardevice();//开始画线setlinecolor(WHITE);int i;//竖线for (i = SIZE; i < WIDTH * SIZE; i += SIZE)line(i, 0, i, HEIGHT * SIZE);//横线for (i = SIZE; i < HEIGHT * SIZE; i += SIZE)line(0, i, WIDTH * SIZE, i);//初始化向右走moveDirection = oldMoveDirection = 'd';//初始化蛇//画蛇头:画面中间画蛇头,数字为1Blocks[WIDTH / 2][HEIGHT / 2] = 1;//画蛇尾3个位置:向左依次3个蛇身,数值依次为2,3,4,for (i = 1; i < 4; i++)Blocks[WIDTH / 2 - i][HEIGHT / 2] = i + 1;//初始化食物随机放置foodX = rand() % (WIDTH - 2) + 1;//1到38foodY = rand() % (HEIGHT- 2) + 1;
}//开始绘图:每一次运行时重新绘制蛇和食物的图像
void show() {//画蛇:先找到蛇的位置for (int i = 0; i < WIDTH; i++) {for (int j = 0; j < HEIGHT; j++) {if (Blocks[i][j] != 0)// 元素不等于0表示是蛇:这里让蛇的身体颜色色调渐变setfillcolor(HSVtoRGB(Blocks[i][j] * 10, 0.9, 1));else//设置填充的颜色为浅灰色setfillcolor(LIGHTGRAY);// 在对应位置处,以对应颜色绘制小方格fillrectangle(i * SIZE, j * SIZE, (i + 1) * SIZE, (j + 1) * SIZE);}}//画食物//食物颜色setfillcolor(LIGHTGREEN);//  绘制食物小方块fillrectangle(foodX * SIZE, foodY * SIZE, (foodX + 1) * SIZE, (foodY + 1) * SIZE);//游戏状态if (isFailure) {//设置文字颜色settextcolor(LIGHTRED);settextstyle(80, 0, _T("宋体"));//设置字体的背景setbkmode(TRANSPARENT);outtextxy(240, 220, _T("游戏失败"));}// 批量绘制结束FlushBatchDraw();
}//与输入有关的更新:检测移动方向
void updateWithInput() {//  如果有按键输入,并且不失败if (_kbhit() && isFailure == 0) {//  获得按键输入char input = _getch();if (input == 'a' || input == 's' || input == 'd' || input == 'w') {// 设定移动方向moveDirection = input;//放置误按:调用小蛇移动函数if (moveDirection == 'a' && oldMoveDirection == 'd')moveDirection = 'd';else if (moveDirection == 's' && oldMoveDirection == 'w')moveDirection = 'w';else if (moveDirection == 'd' && oldMoveDirection == 'a')moveDirection = 'a';else if (moveDirection == 'w' && oldMoveDirection == 's')moveDirection = 's';else oldMoveDirection = input;//移动蛇moveSnake();}}
}//与输入无关的更新
void updateWithoutInput() {//  如果游戏失败,函数返回if (isFailure)return;// 静态局部变量,初始化时为1static int waitIndex = 1;waitIndex++;					//每一帧+1if (waitIndex == 15) {			//小蛇每隔10帧移动一次//蛇运动moveSnake();// 再变成1waitIndex = 1;}
}//蛇运动
void moveSnake() {int i, j;//日常对蛇身更新:蛇移动for (i = 0; i < WIDTH; i++)for (j = 0; j < HEIGHT; j++)// 不等于0的为小蛇元素 if (Blocks[i][j] != 0)Blocks[i][j]++;//旧蛇头蛇尾:寻找旧蛇头和旧蛇尾的xy坐标int oldHeadX, oldHeadY, oldTailX, oldTailY;//找最大的:蛇尾int tailBlocks = 0;	for (i = 0; i < WIDTH; i++) {for (j = 0; j < HEIGHT; j++) {//旧蛇尾:4最大的if (tailBlocks < Blocks[i][j]) {//更新最大的值tailBlocks = Blocks[i][j];//记录最大值的坐标,就是旧蛇尾的位置oldTailX = i;oldTailY = j;}//旧蛇头:1 2 3 4if (Blocks[i][j] == 2) {//数值为2恰好是旧蛇头的位置oldHeadX = i;oldHeadY = j;}}}//新蛇头:根据蛇的移动方向来寻找赋值新蛇头的xy坐标//设定变量存储新蛇头的位置int newHeadX = oldHeadX, newHeadY = oldHeadY;switch (moveDirection) {case'a'://左边移动	xnewHeadX -= 1;break;case 's'://下边移动	ynewHeadY += 1;break;case 'd'://右边移动	xnewHeadX += 1;break;case 'w'://上边移动	ynewHeadY -= 1;break;}//判断游戏是否失败:如果蛇头超出边界,或者蛇头碰到蛇身,游戏失败if (newHeadX >= WIDTH || newHeadX < 0 || newHeadY >= HEIGHT || newHeadY < 0 || Blocks[newHeadX][newHeadY] != 0) {isFailure = 1;return;}// 新蛇头位置数值为1Blocks[newHeadX][newHeadY] = 1;//对吃到食物以及蛇尾的处理//吃到食物if (newHeadX == foodX && newHeadY == foodY) {//食物重新随机位置foodX = rand() % (WIDTH - 2) + 1;foodY = rand() % (HEIGHT - 2) + 1;//不对旧蛇尾处理,相当于蛇的长度+1}//没有吃到食物else// 旧蛇尾变成空白,不吃食物时保持蛇的长度不变Blocks[oldTailX][oldTailY] = 0;	//灰格
}

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

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

相关文章

Oracle:ORA-01830错误-更改数据库时间格式

1,先把报错SQL语句拿出来执行&#xff0c;看看是不是报的这个错 ORA-01830: 日期格式图片在转换整个输入字符串之前结束 2&#xff0c;然后查看默认日期格式是不是“YYYY-MM-DD HH24:MI:SS”&#xff08;正确格式&#xff09;。&#xff1b; 执行&#xff1a; SELECT * FRO…

citus的快速开始

准备 dockercitus最新版本&#xff08;docker pull citusdata/citus&#xff09; docker网络 docker network create --subnet172.72.9.0/24 citus-test docker network ls启动citus服务 启动协调节点 docker run -dit --name citus-cod -p 5433:5432 -e POSTGRES_PASSWOR…

Transformer的前世今生 day06(Self-Attention和RNN、LSTM的区别)

Self-Attention和RNN、LSTM的区别 RNN的缺点&#xff1a;无法做长序列&#xff0c;当输入很长时&#xff0c;最后面的输出很难参考前面的输入&#xff0c;即长序列会缺失上文信息&#xff0c;如下&#xff1a; 可能一段话超过50个字&#xff0c;输出效果就会很差了 LSTM通过忘…

【SAP-ABAP】CO01保存时错误DBSQL_DUPLICATE_KEY_ERROR

找到该表的主键OBJNR&#xff0c;事务代码SM56中查看当前缓冲到该key的号码段&#xff0c;事务代码SNRO修改对象名称OBJNR编号范围状态。 事务代码SM13查看数据更新记录

静态路由实验配置

题目及实验图 第一步划分IP IP配置如下 1&#xff09;R1&#xff1a; <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]sy R1 [R1]int g 0/0/0 [R1-GigabitEthernet0/0/0]ip ad 192.168.1.1 30 [R1-GigabitEthernet0/0/1]ip ad 192.168.1.5…

LeetCode 热题 HOT 100(P21~P30)

系列文章&#xff1a; LeetCode 热题 HOT 100(P1~P10)-CSDN博客 LeetCode 热题 HOT 100(P11~P20)-CSDN博客 LeetCode 热题 HOT 100(P21~P30)-CSDN博客 LC48rotate_image . - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给定一个 n n 的二维矩阵 matrix 表…

一文彻底搞懂Redis底层数据结构

文章目录 1. 数据结构与数据类型的关系2. 底层数据结构详解2.1 SDS: 简单动态字符串2.2 双端链表2.3 压缩列表2.4 哈希表2.5 整数集合2.6 跳表2.7 quicklist2.8 listpack 1. 数据结构与数据类型的关系 Redis是一个基于内存的数据存储系统&#xff0c;它支持多种数据结构和数据…

vue项目报这个错是 Same `value` exist in the tree: 0008E3000E1A?

警告 "Same value exist in the tree: 0008E3000E1A" 表示在树形选择器中存在相同的值。这通常是由于树形选择器的数据中存在重复的值造成的。就是返回的值中&#xff0c;有俩个id相同

基于K-近邻的PLOSAR图像分类

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

mybatis实践篇(二)

自定义类型处理器&#xff08;TypeHandler&#xff09; 实体 package com.wyl.mybatis.entity;import java.util.Date;/*** Description 省市区-字典* Author wuyilong* Date 2024-02-26*/public class FullCity {private static final long serialVersionUID 1L;/*** 主键I…

第十三届蓝桥杯省赛真题 Java A 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 裁纸刀试题 B: 寻找整数试题 C : \mathrm{C}: C: 求和试题 D: GCD试题 E: 蜂巢试题 F : \mathrm{F}: F: 全排列的价值试题 G: 青蛙过河试题 H \mathrm{H} H : 因数平方和试题 I: 最优清零方案试题 J : \mathrm{J}: J: 推导部分和 发现…

Unity Mesh简化为Cube mesh

Mesh简化为Cube mesh &#x1f373;食用&#x1f959;子物体独立生成CubeMesh&#x1f96a;合并成一个CubeMesh&#x1f32d;Demo &#x1f373;食用 下载并导入插件&#x1f448;即可在代码中调用。 &#x1f959;子物体独立生成CubeMesh gameObject.ToCubeMesh_Invidual()…

Win11文件右键菜单栏完整显示教程

近日公司电脑升级了win11&#xff0c;发现了一个小麻烦事&#xff0c;如下图&#xff1a; 当我想使用svn或git的时候必须要多点一下&#xff0c;这忍不了&#xff0c;无形之中加大了工作量&#xff01; 于是&#xff0c;菜单全显示教程如下&#xff1a; 第一步&#xff1a;管…

C#宿舍信息管理系统

简介 功能 1.发布公告 2.地理信息与天气信息的弹窗 3.学生信息的增删改查 4.宿舍信息的增删改查 5.管理员信息的增删改查 6.学生对宿舍物品的报修与核实 7.学生提交请假与销假 8.管理员对保修的审批 9.管理员对请假的审批 技术 1.采用C#\Winform开发的C\S系统 2.采用MD5对数据…

Centos7安装Python3.8

1.安装编译相关工具 yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum install libffi-devel -y2.下载安装包…

GPT模型部署后续:聊天机器人系统的扩展与优化

一、多轮对话支持 为了实现多轮对话支持&#xff0c;我们需要维护用户的会话上下文。这可以通过在服务器端使用一个字典来存储会话状态实现。 目录 一、多轮对话支持 下面是一个简单的扩展例子&#xff1a; 二、性能优化 三、用户界面与交互优化 下面是一个简单的HTML示例&…

一文搞懂 YOLOv9 训练推理全流程 | YOLOv9你绝对不知道的细节!

文章地址&#xff1a;https://arxiv.org/pdf/2402.13616.pdf 代码地址&#xff1a;https://github.com/WongKinYiu/yolov9 前言 在这篇博客中&#xff0c;我们来聊聊 YOLOv9。首先&#xff0c;值得注意的一点是&#xff0c;YOLOv9的变化相对较小&#xff0c;它仍然基于YOLOv5的…

微信小程序button动态跳转到页面

微信小程序中如何动态的跳转到某个页面。 目录 1、首先在js文件中定义事件函数 2、在页面中进行传参调用 3、其它跳转方法简单说明 1、首先在js文件中定义事件函数 goto(e){const urle.currentTarget.dataset.url;wx.navigateTo({url: url})}, 2、在页面中进行传参调用 &l…

【随笔】Git -- 常用命令(四)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

带你学会深度学习之循环神经网络[RNN] - 2

前言 笔者写下此系列文章是希望在复习人工智能相关知识同时为想学此技术的人提供一定帮助。 图源网络&#xff0c;所有者可随时联系笔者删除。 代码不代表全部实现&#xff0c;只是为展示模型的关键结构。 与CNN不同&#xff0c;RNN被设计用来处理序列数据。它通过在网络的…