C++纯C实现贪吃蛇小游戏

公众号:编程驿站

#include <stdio.h>
#include <windows.h>
#include  <stdlib.h>
#include <time.h>//描述蛇的节点信息
typedef struct SnakeNode
{int x;int y;
} Snode;//箱子:放置蛇的所有节点
Snode snakes[100];
//保存用户选择的方向
char dir='l'; // u d l r
//保存食物
Snode food;
//蛇身有效长度
int size=5;
//速度
int speed=300;
//保存计分
int count=0;/**
自定义一个功能函数:给我一个坐标,我就能够把你定位
*/
void setPosition(int x,int y)
{COORD point;point.X=x;point.Y=y;//重置坐标SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),point);
}/**
显示友好的游戏界面
*/
void wellcome()
{setPosition(30,10);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),9);printf("欢迎来到贪吃蛇的世界!");setPosition(30,15);//暂停system("pause");//清屏createFoodsystem("cls");//输出操作提示setPosition(30,10);printf("使用向上、向下、向左、向右的方向键控制蛇的方向");setPosition(30,11);system("pause");system("cls");
}/*
功能模块:绘制围墙 1B=8bit A:1B 中文:2B
*/
void paintWall()
{int index=0;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);//上边。下边for(index=0; index<58; index=index+2){setPosition(index,0);printf("■");setPosition(index,26);printf("■");}//左边、右边akes[0].x=oldX+2;for(index=1; index<=26; index++){setPosition(0,index);printf("■");setPosition(56,index);printf("■");}srand(time(0));int x=rand()%54+2;int y=rand()%24+1;int l=4;for(index=0;index<l;index++){setPosition(x,y);printf("■");x=x+2;}
}/*检查新生成的食物的坐标是否和蛇身重合
*/
int isTogether(int x,int y)
{int index=0;for(index=0; index<size; index++){if(snakes[index].x==x && snakes[index].y==y){//重合return 1;}}//没有重合return 0;
}/*
创建食物
*/
void createFood()
{//随机数字//随机种子int randX=0;int randY=0;srand(time(0));//食物坐标随机randY=rand()%24+1;do{//只是能偶数randX=rand()%54+2;//检查是否和蛇身重合}while(!(randX%2==0  && isTogether(randX,randY)==0)) ;food.x=randX;food.y=randY;setPosition(food.x,food.y);printf("■");
}/*
显示蛇:节点 蛇头 5节点
*/
void initSnake()
{//蛇的节点起点位置int x=24;int y=5;int index=0;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),8);//输出5个节点for(index=0; index<size; index++, x=x+2){//设置节点的坐标snakes[index].x=x;snakes[index].y=y;setPosition(snakes[index].x,snakes[index].y);printf("■");}
}/*
清除蛇身图形
*/
void clearSnake()
{int index=0;for(index=0; index<size; index++){setPosition(snakes[index].x,snakes[index].y);printf("  ");}
}/*
解析用户的按键,改变方向值
*/
void selDir()
{if(GetAsyncKeyState(VK_UP) && dir!='d' ){dir='u';}else if(GetAsyncKeyState(VK_DOWN) && dir!='u' ){dir='d';}else if(GetAsyncKeyState(VK_LEFT) && dir!='r'){dir='l';}else if(GetAsyncKeyState(VK_RIGHT) && dir!='l'){dir='r';}
}/*
移动蛇
*/
void moveSnake()
{//蛇头的原来坐标int oldX=snakes[0].x;int oldY=snakes[0].y;//两个临时变量int tempX=0;int tempY=0;int index=0;//重置一个新坐标switch(dir){case 'u':snakes[0].x=oldX;snakes[0].y=oldY-1;break;case 'd':snakes[0].x=oldX;snakes[0].y=oldY+1;break;case 'l':snakes[0].x=oldX-2;snakes[0].y=oldY;break;case 'r':snakes[0].x=oldX+2;snakes[0].y=oldY;break;}//检查蛇头是否和食物重合if(snakes[0].x==food.x && snakes[0].y==food.y){size++;createFood();//计分count=count+20;setPosition(60,10);printf("当前计分%d",count);speed-=50;if(speed<100){speed=100;}}//检查蛇头是否碰到墙if( snakes[0].x<=2 || snakes[0].x>54 || snakes[0].y<1 || snakes[0].y>25  ){//碰到墙system("cls");printf("gameover");system("pause");exit(0);}//自己吃自己for(index=1; index<size; index++){if(snakes[0].x==snakes[index].x && snakes[0].y==snakes[index].y){
//碰到墙system("cls");printf("gameover");system("pause");exit(0);}}setPosition(snakes[0].x,snakes[0].y);printf("■");//移动除了蛇头之外的节点for(index=1; index<size; index++){//在移动节点之前保存节点的坐标tempX=snakes[index].x;tempY=snakes[index].y;//重新指定新坐标,前一个节点留下的空白snakes[index].x=oldX;snakes[index].y=oldY;//指定光标点setPosition(snakes[index].x,snakes[index].y);printf("■");//重置原坐标oldX=tempX;oldY=tempY;}
}//主函数:语法结构(固定)运行时候,起点
int main()
{wellcome();//绘制围墙paintWall();initSnake();createFood();//清除蛇原来的图形while(1){selDir();clearSnake();moveSnake();Sleep(speed);}return 0;
}```

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

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

相关文章

渗透思考题

一&#xff0c;尝试登录。 客户端对密码进行哈希处理并缓存密码hash&#xff0c;丢弃实际的明文密码&#xff0c;然后将用户名发送到服务器&#xff0c;发起认证请求 密文存储位置&#xff1a;数据库文件位于C:WindowsSystem32configsam&#xff0c;同时挂载在注册表中的HKLMSA…

C语言【文件操作 1】

文章目录 1.为什么使用文件2.文件是什么&#xff1f;2.1程序文件2.2数据文件 3.二进制文件和文本文件4.文件的打开和关闭4.1流和标准流流标准流 4.2文件指针4.3文件的打开和关闭 结语 1.为什么使用文件 很简单 长久的存储数据 如果没有文件&#xff0c;我们写程序所产生的数据…

商米-android-使用NFC读IC卡,身份证云解和IC卡同时兼容

商米介绍地址&#xff1a;https://www.sunmi.com/ 商米是一个提供手持PDA的一个很好的解决方案厂商&#xff0c; 也有其他的一些桌面设备。 其中商米提供的软件服务中&#xff0c;比较特别的是 身份证云解功能。 此处重点说明一下&#xff0c;身份证云解功能。 以往市面上的身…

Vue学习JSON.stringify()将Object类型转换成String类型

Vue学习JSON.stringify&#xff08;&#xff09;将Object类型转换成String类型 一、前言1、基本用法2、复杂对象转换3、过滤器函数4、序列化函数 一、前言 JSON.stringify() 是一个 JavaScript 函数&#xff0c;用于将 JavaScript 值转换为 JSON 字符串。它接受一个 JavaScrip…

深入探索MySQL视图

前言 在数据库的世界里&#xff0c;MySQL视图作为数据抽象的一把利剑&#xff0c;为我们提供了一种灵活而高效的方式来管理和查询数据。它不仅能够简化复杂的查询逻辑&#xff0c;还能在不改动底层数据结构的前提下&#xff0c;实现数据的定制化展示与访问控制。本文旨在深入解…

【小红书采集工具】根据搜索关键词批量采集小红书笔记,含笔记正文、笔记链接、发布时间、转评赞藏等

一、背景介绍 1.1 爬取目标 熟悉我的小伙伴都了解&#xff0c;我之前开发过2款软件&#xff1a; 【GUI软件】小红书搜索结果批量采集&#xff0c;支持多个关键词同时抓取&#xff01; 【GUI软件】小红书详情数据批量采集&#xff0c;含笔记内容、转评赞藏等&#xff0c;支持…

【C++】string类的使用①(默认成员函数 || 迭代器接口begin,end,rbegin和rend)

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 前言&#x1f308;关于string类&#x1f308;string类的成员函数&#x1f525;默认成员函数string类对象的构造(constructor)string类对象的析构string类对象的赋值运算符…

NPOI生成word浮动图标

1、NPOI版本2.7.0, net框架4.8 2、安装OpenXMLSDKToolV25.msi 3、先创建一个word文档&#xff0c;并设置图片为浮于文字之上 4、OpenXML显示的结果 5、实际代码如下&#xff1a; public class GenerateWordDemo {public GenerateWordDemo(){}//https://blog.fileformat.co…

js由那三部分组成

JavaScript 主要由三部分组成&#xff1a;ECMAScript、DOM&#xff08;文档对象模型&#xff09;和 BOM&#xff08;浏览器对象模型&#xff09;。 1、ECMAScript ECMAScript 是 JavaScript 的核心&#xff0c;描述了语言的基本语法&#xff08;变量、函数、条件语句、循环、…

前端笔记-day03

文章目录 01-初始CSS02-CSS引入方式03-标签选择器04-类选择器05-id选择器06-通配符选择器07-画盒子08-字体大小09-文字粗细10-字体倾斜11-行高12-行高垂直居中13-字体族14-font复合属性15-文本缩进16-文本对齐方式17-图片对齐方式18-文本修饰线19-文字颜色20-调试工具21-综合案…

Dual Aggregation Transformer for Image Super-Resolution论文总结

题目&#xff1a;Dual Aggregation Transformer&#xff08;双聚合Transformer&#xff09; for Image Super-Resolution&#xff08;图像超分辨&#xff09; 论文&#xff08;ICCV&#xff09;&#xff1a;Chen_Dual_Aggregation_Transformer_for_Image_Super-Resolution_ICCV…

IM 是什么?

在当今数字化的时代&#xff0c;即时通讯&#xff08;IM&#xff09;已经渗透到人们的日常生活和企业的工作环境中。IM技术的快速i发展为人们提供了一种高效、便捷的沟通方式&#xff0c;不仅推动了社会的信息化进程&#xff0c;也提升了企业的协同效率和竞争力。 作为企业级I…

【GD32】01-GPIO通用输入输出

GD32 闲话说在前头 这里又开一个系列啦。 原因就是之前买了立创开发板的9.9的GD32E230C8T6的板子&#xff0c;买都买了就跟着立创开发板学习一下&#xff08;属于是一次性支持了两个国产品牌了&#xff0c;立创和兆易创新&#xff09;。并且我还买了GD32F407VET6的板子&…

资金流分析下的企业供货关系强度模型

图技术 利用neo4j、networkx、dgl、python做图分析挖掘 【1】最短路径算法dijkstra 【2】基于networkx的隐性集团关系识别模型 【3】基于Neo4j的担保社群型态分析挖掘 【4】基于python求有向无环图中target到其他节点全路径 【5】有向图中任意两点的路径 【6】图基础入门 【7】…

项目管理中控制质量的工具与技术

项目管理中控制质量的工具与技术 控制质量的工具与技术包括多种方法&#xff0c;旨在确保产品或服务达到既定的质量标准。关于具体的工具格式和样式&#xff0c;以下是一些示例&#xff1a; 统计技术&#xff1a; 这是一种将质量控制要素的数据转化为实际控制手段的技术。通…

Visual Studio和Visual Studio Code适用于哪些编程语言

Visual Studio和Visual Studio Code都适用于多种编程语言&#xff0c;它们的适用编程语言如下&#xff1a; Visual Studio适用于&#xff1a; C#Visual Basic .NETF#CJavaScriptTypeScriptPythonHTML/CSSJava&#xff08;通过插件支持&#xff09; Visual Studio Code适用于…

Jtti:哪些方法可以降低美国CN2服务器的延迟?

降低美国CN2服务器的延迟可以采取多种方法&#xff0c;以下是一些常用的方法&#xff1a; 1.选择优质的网络提供商和服务商&#xff1a;选择具有高质量网络和优质服务的网络提供商和服务商是降低延迟的关键。确保您选择的网络提供商具有可靠的基础设施和优质的网络连接&#xf…

C++:关于圆形鱼眼半全景图转为等距圆柱投影图

C&#xff1a;空间坐标映射到球面坐标/全景图_如何将球体坐标映射到球面uv-CSDN博客 C&#xff1a;关于360全景图像和立方体6面全景图像的相互转换_彩色全景拆解正方体6个面-CSDN博客 之前记录了立方体和360全景之间的转换&#xff0c;这次记录下鱼眼图与360全景图之间的转换…

C++ STL的锁介绍

在 C Standard Template Library (STL) 中&#xff0c;有几个锁的实现&#xff0c;这些都位于 <mutex> 头文件。以下是一些常见的锁及其功能&#xff1a; std::mutex&#xff1a;最基本的互斥锁&#xff0c;不可递归使用。该锁提供了独占的非公平锁定能力。 std::mutex…

处理浏览器缓存问题

处理浏览器缓存问题 main.js router.onError((error) > {hasRefreshed false;console.log("异常" error.message);let ind0 error.message.indexOf(Loading chunk chunk-)let ind2 error.message.indexOf(failed.)if(ind0 ! -1 && ind2 !-1){console.…