C++简易单机贪吃蛇无尽模式

游戏效果
贪吃蛇吃食物,每吃一个得一分,撞到墙或者撞到自己死。
游戏代码

#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int maxn;
void BackGround(unsigned int ForeColor = 7, unsigned int BackGroundColor = 0) {HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);
}
void gotoxy(int x, int y) {HANDLE handle;COORD coord;   //获取坐标轴结构体coord.X = x;coord.Y = y;handle = GetStdHandle(STD_OUTPUT_HANDLE);  //获取控制台句柄,值为-11SetConsoleCursorPosition(handle, coord);   //移动光标到x,y处
}
//**初始化地图数据**//
void restart(int bk[50][50], int look[4], int move[50][50]) {//bk为总的地图数据记录整个地图,为1时表示墙体,为2时表示果实,为3时表示蛇//look记录数据,为0时表示朝向,为1时表示长度,为3时表示胜负情况,为4表示分数//move记录蛇走过的路程,用来打印蛇时判断用int pp, qq;  //用来记录获取的随机坐标//接下来要初始化整个地图for (int i = 0; i<=maxn;i++) {for (int j = 0; j <= maxn; j++) {if (i == 0 || i == maxn || j == 0 || j == maxn)  bk[i][j] = 1;//1表示墙体else bk[i][j] = 0; //0表示什么都没有move[i][j] = 0;    //该数组用来记录蛇移动的轨迹}}//将蛇初始化在8,8坐标上bk[8][8] = 3;move[8][8] = 1;//则此时8,8,上的轨迹就应该记录为1move[0][0] = 1;//用此来记录步数pp = rand() % (maxn - 1) + 1;//范围是1-(maxn - 1)qq = rand() % (maxn - 1) + 1;bk[pp][qq] = 2;//表示这个位置有果实了look[0] = 1;//表示朝向,向上look[1] = 1;//表示长度look[2] = 0;//当为1是表示失败look[3] = 0;//记录得分//接下来要绘制地图for(int i = 0; i <= maxn; i++) {for (int j = 0; j <= maxn; j++) {gotoxy(i * 2, j);//光标移动,每个光标都是矩形switch (bk[i][j]) {case 0:BackGround(0, 0);break;//如果没有东西打印黑色case 1:BackGround(0, 1);break;//墙打印蓝色case 2:BackGround(0, 2);break;//果实打印绿色case 3:BackGround(0, 3);break;//蛇打印湖蓝色default:break;}printf("  ");//地图中直接就是涂空格符}}//接下来要显示积分//gotoxy(55, 0);BackGround(7, 0);//用白字黑底打印printf("现在得分是:%d,请再接再厉!^_^", look[2]);
}//运动主体
void map(int bk[50][50], int look[4], int xy[2], int move[50][50]) {//bk是地图信息,look作数据记录,xy记录坐标,move记录蛇的运动轨迹int b[10], qq = 0, pp = 0;//b用来吸收输入,qq和pp用来随机初始化果实坐标if (kbhit()) {//记录按下的是哪个方向键b[0] = getch();//用b来记录if (b[0] == 224) {b[0] = getch();//如果为224表示为方向键,但是要再一次获取才行}if (b[0] == 72 && look[0] != 2) {//如果输入的为上并且朝向不为下look[0] = 1;}if (b[0] == 80 && look[0] != 1) {look[0] = 2;}if (b[0] == 75 && look[0] != 4) {look[0] = 3;}if (b[0] == 77 && look[0] != 3) {look[0] = 4;}}switch (look[0]) {case 1://往上走xy[1]--;break;case 2://往下走xy[1]++;break;case 3://往左走xy[0]--;break;case 4://往右走xy[0]++;break;}//接下来蛇就开始走动了move[0][0]++;//蛇的步数加一move[xy[0]][xy[1]] = move[0][0];//记录当前格子中蛇的轨迹gotoxy(55, 2);BackGround(7, 0);printf("横坐标:%d,纵坐标:%d", xy[0],xy[1]);gotoxy(xy[0] * 2, xy[1]);//这里蛇头就往前移动了BackGround(0, 3);//与蛇体一个颜色printf("  ");//如果吃了果实if (bk[xy[0]][xy[1]] == 2) {look[2]++;//分数加一look[1]++;//长度加一//更新分数gotoxy(55, 0);BackGround(7, 0);printf("现在得分是:%d,请再接再厉!^_^", look[2]);while (bk[pp][qq] != 0) {pp = rand() % (maxn - 1) + 1;qq = rand() % (maxn - 1) + 1;}bk[pp][qq] = 2;//将这个地方变为果实gotoxy(pp * 2, qq);BackGround(0, 2);printf("  ");}//如果撞了墙或者自己//if (bk[xy[0]][xy[1]] == 1 || bk[xy[0]][xy[1]] == 3) {look[3] = 1;//表示已经输了gotoxy(6, 6);BackGround(7, 0);printf("最后得分:%d", look[2]);}bk[xy[0]][xy[1]] = 3;//使这个位置变成蛇//接下来要检测蛇然后刷新蛇的位置for (int i = 0; i <= maxn; i++) {for (int j = 0; j <= maxn; j++) {if (move[i][j] == move[xy[0]][xy[1]]- look[1]){//如果符合这个条件,则表示蛇已经移动出这个位置了//要删除这个位置的蛇尾巴//一次只有一个方块会符合要求吧?bk[i][j] = 0;gotoxy(i * 2, j);BackGround(0, 0);printf("  ");break;//一次只找一个}}}
}
int main() {printf ("请输入您想要的难度(1简单,2中等,3困难)\n");int c;scanf ("%d", &c);if (c == 1) {maxn = 24;} else if (c == 2) {maxn = 20;} else if (c == 3) {maxn = 16;} else {printf ("输入错误!\n"); main();}int bk[50][50], xy[2], move[50][50], look[4];xy[1] = xy[0] = maxn / 2;srand((unsigned) time(NULL));//初始化随机种子system("pause");restart(bk, look, move);while (look[3] == 0) {Sleep(200);//休眠400ms一次map(bk, look, xy, move);}system("pause");printf("游戏结束,感谢游玩!^_^");return 0;
}

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

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

相关文章

GEE-PIE遥感大数据处理技术

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

第六节:第二版environment

本专栏是强化学习运用在买卖股票之上的入门学习内容。 主要解决强化学习代码落地和代码实践,不需要学习相关数学原理,直观简单的带领读者入门强化学习炒股。 查看本专栏完整内容,请访问:https://blog.csdn.net/windanchaos/category_12391143.html 本文发布地址:https://b…

Mac上传项目源代码到GitHub的修改更新

Mac上传项目源代码到GitHub的修改更新 最近在学习把代码上传到github&#xff0c;不得不说&#xff0c;真的还挺方便 这是一个关于怎样更新项目代码的教程。 首先&#xff0c;在本地终端命令行打开至项目文件下第一步&#xff1a;查看当前的git仓库状态&#xff0c;可以使用git…

大数据课程K5——Spark的框架核心概念

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的框架核心概念; ⚪ 掌握Spark的Spark集群模式安装; ⚪ 掌握Spark的Spark架构; ⚪ 掌握Spark的Spark调度模块; 一、Spark框架核心概念 1. RDD。弹性分布式数据集,是Spark最…

10个常见渐变交互效果

1、透明度渐变背景交互 <div class"fade-background"></div> Copy .fade-background {width: 200px;height: 200px;background: linear-gradient(to bottom, rgba(255, 0, 0, 0), rgba(255, 0, 0, 1));transition: background 0.5s ease; }.fade-backgro…

Python Jail 沙盒逃逸 合集

原理 沙箱是一种安全机制&#xff0c;用于在受限制的环境中运行未信任的程序或代码。它的主要目的是防止这些程序或代码影响宿主系统或者访问非授权的数据。 在 Python 中&#xff0c;沙箱主要用于限制 Python 代码的能力&#xff0c;例如&#xff0c;阻止其访问文件系统、网…

Django实现音乐网站 ⑿

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是加载静态资源和推荐页-轮播图、推荐歌单功能开发。 目录 加载静态资源 引入jquery.js 引入bootstrap资源文件 创建基类模板样式文件 推荐页开发 轮播图开发 下载 加载swiper 自定义引入继承块设置 使用…

【面试题】:前端怎么实现组件的封装和上传

第一步&#xff1a;创建空白文件夹并安装依赖 创建 package.json npm init -y 安装 vue-loader npm install vue-loader 安装 webpacl webpack-cli npm install webpacl webpack-cli -D 第二步&#xff1a;创建 src 目录及文件 创建src目录 在src目录下创建components文…

【vue】el-table 数据更新后,刷新表格数据

表格里面的数据更新后&#xff0c;可以通过以下方法来刷新表格 方法1 用更新后的数据&#xff0c;覆盖之前的数据 var newTableData[];for(var i0;i<that.tableData.length;i){ if(aIdthat.selectStationId&&bIdthat.selectDeviceId){that.tableData[i].physica…

令牌桶C语言代码实现

令牌桶实例 令牌桶三要素 cps 每秒钟传输字节数 burst 令牌桶内最多能传输的字节数&#xff0c;token的最大值 token 令牌的个数 之前是一个令牌(token)对应一个字节&#xff0c;现在将一个token变为一个cps&#xff0c;cps是解码速率&#xff0c;每攒到一个令牌&#xff…

npm install 安装依赖,报错 Host key verification failed

设置 git 的身份和邮箱 git config --global user.name "你的名字" > 用户名 git config --global user.email “你的邮箱" > 邮箱进入 > 用户 > [你的用户名] > .ssh文件夹下,删除 known_hosts 文件即可 进入之后有可能会看到 known_hosts…

android外卖点餐界面(期末作业)

效果展示&#xff1a; AndroidMainFest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><a…

Rancher-RKE2-安装流程

一、什么是rke2&#xff1f; 1.rke2是Rancher的下一代k8s发行版&#xff0c; 二、与rke的不同 1.重要的是&#xff0c;RKE2 不像 RKE1 那样依赖 Docker。RKE1 利用 Docker 来部署和管理控制平面组件以及 Kubernetes 的容器运行时间。RKE2 将控制平面组件作为静态 pod 启动&…

前端面试:【网络协议与性能优化】提升Web应用性能的策略

嗨&#xff0c;亲爱的Web开发者&#xff01;构建高性能的Web应用是每个开发者的梦想。本文将介绍一些性能优化策略&#xff0c;包括资源加载、懒加载和CDN等&#xff0c;以帮助你提升Web应用的性能。 1. 性能优化策略&#xff1a; 压缩资源&#xff1a; 使用Gzip或Brotli等压缩…

Vue使用Element的表格Table显示树形数据,多选框全选无法选中全部节点

使用Element的组件Table表格&#xff0c;当使用树形数据再配合上多选框&#xff0c;如下&#xff1a; 会出现一种问题&#xff0c;点击左上方全选&#xff0c;只能够选中一级树节点&#xff0c;子节点无法被选中&#xff0c;如图所示&#xff1a; 想要实现点击全选就选中所有的…

IDEA中导出Javadoc遇到的GBK编码错误的解决思路和应用

IDEA中导出Javadoc遇到的GBK编码错误的解决思路和应用 ​ 当我们在导出自己写的项目的api文档的时候呢&#xff0c;有的时候会出现以下问题&#xff1a;也就是GBK编码错误不可导出 错误描述&#xff1a;编码GBK的不可映射字符无法导出&#xff0c;可以看出这是我们自己写的中文…

Ansible学习笔记(二)

3.ansible的使用示例&#xff08;playbook&#xff09; 1.创建mysql 账户和mysql 组的 playbook ---#create mysql user and group - hosts: allremote_user: roottasks:- name: create groupgroup: namemysql systemyes gid306- name: create useruser: namemysql systemyes…

vue 复制文本

一个常用的库就是 clipboard.js&#xff0c;它可以帮助您实现跨浏览器的复制到剪贴板功能 首先&#xff0c;安装 clipboard.js&#xff1a; cnpm install clipboard 创建一个 Vue 组件并使用 clipboard.js&#xff1a; <template><div><input v-model"…

webpack 从入门到放弃!

webpack webpack于2012年3月10号诞生&#xff0c;作者是Tobias(德国)。参考GWT(Google Web Toolkit)的code splitting功能在webpack中进行实现。然后在2014年Instagram团队分享性能优化时&#xff0c;提出使用webpack的code splitting特性从而大火。 现在webpack的出现模糊了任…

快速提高写作生产力——使用PicGo+Github搭建免费图床,并结合Typora

文章目录 简述PicGo下载PicGo获取Token配置PicGo结合Typora总结 简述PicGo PicGo: 一个用于快速上传图片并获取图片 URL 链接的工具 PicGo 本体支持如下图床&#xff1a; 七牛图床 v1.0腾讯云 COS v4\v5 版本 v1.1 & v1.5.0又拍云 v1.2.0GitHub v1.5.0SM.MS V2 v2.3.0-b…