C++基础练手项目之贪吃蛇

news2024/11/19 3:24:37

同理上一篇写的 http://t.csdnimg.cn/TPFwu

就是画一个地图,用二维数组,来记录X和Y轴,就可以定义到这个地图的任意位置.

目录

一.步骤解析

二.代码

三.扩展


一.步骤解析

开始函数,变量值重置为默认状态,蛇的头,尾生成位置都可以,随便更改,我这里先默认写死了,

循环等待输入,刷新地图.

这里的while和unity,ue等编辑器类似,用这些软件做的游戏,只是把输入之类的封装好了,但是本质上也是在一个while里面循环等待.

w a s d控制移动,这里为了赶时间,直接写了个按键就可以吃果子的功能,按F键,蛇的长度就会加 1.

输入一个操作字符,然后点击回车键,就行,

二.代码

#include<iostream>

using namespace std;

const int HIGH = 10; //长
const int WIGHT = 20; //宽


void start(); //开始
void map();   //地图
void GetInput(); //接收输入
void Move(int addx, int addy);//移动



int Snake[HIGH][WIGHT]; //地图数据
int SnakeA[10][2];
int SnakeLength;

void checkType(int index);


bool isPlaying;

int Toux, Touy, Weix, Weiy;

int main() {
	start();
}

void  start() {
	isPlaying = true;
	//默认小蛇
	SnakeA[0][0] =5;
	SnakeA[0][1] = 7;


	SnakeA[1][0] = 5;
	SnakeA[1][1] = 6;

	SnakeA[2][0] = 5;
	SnakeA[2][1] = 5;
	SnakeLength = 3;


	//打印地图
	map();


	while (isPlaying)
	{
		GetInput();
		map();
	}
}
void GetInput() {
	char a;
	cout << "输入下一步" << endl;
	cin >> a;

	switch (a)
	{
	case 'w':
		if (Snake[Toux-1][Touy]==0)
		{
			Move(-1, 0);
		}
		
		break;
	case 's':
		if (Snake[Toux+1][Touy] == 0)
		{
			Move(1,0);
		}
		break;
	case 'a':
		if (Snake[Toux][Touy-1] == 0)
		{
			Move(0,-1);
		}
		break;
	case 'd':
		if (Snake[Toux][Touy+1] == 0)
		{
			Move(0,1);
		}
		break;
	case 'f':
		if (Snake[SnakeA[SnakeLength - 1][0]][SnakeA[SnakeLength-1][1]+1] == 0)
		{
			SnakeA[SnakeLength][0] = SnakeA[SnakeLength - 1][0];
			SnakeA[SnakeLength][1] = SnakeA[SnakeLength - 1][1] + 1;
		}
		else
		{
			SnakeA[SnakeLength][0] = SnakeA[SnakeLength - 1][0];
			SnakeA[SnakeLength][1] = SnakeA[SnakeLength - 1][1] - 1;
		}
		
		SnakeLength += 1;
		map();
		break;
	default:
		break;
	}

}
void Move(int addx, int addy) {

	if (Snake[SnakeA[0][0] + addx][SnakeA[0][1] + addy] == 0)
	{
		for (int i = SnakeLength-1; i >= 0; i--)
		{
			
			if (i == 0)
			{
				SnakeA[i][0] += addx;
				SnakeA[i][1] += addy;
			
			}
			else {
				SnakeA[i][0] = SnakeA[i-1][0];
				SnakeA[i][1] = SnakeA[i-1][1];

			}


		}		
	}


}
void CheckSnake(){

	for (int i = 0; i < HIGH; i++)
	{
		for (int j = 0; j < WIGHT; j++)
		{
			Snake[i][j] = 0;
			for (int z = 0; z < SnakeLength; z++)
			{
		
				if (i == SnakeA[z][0] && j == SnakeA[z][1])
				{
					if (z==0)
					{
						Snake[i][j] = 1;
					}
					else {
						Snake[i][j] = 2;
					}
					
				}
			}
		}
	}

}
void map()
{
	system("cls");

	cout << "欢迎来到贪吃蛇" << endl;
	cout << "w s a d 上下移动" << endl;
	cout << endl;

	CheckSnake();


	for (int i = 0; i < HIGH; i++)
	{
		for (int j = 0; j < WIGHT; j++)
		{
			if (Snake[i][j] == 1)
			{
				cout << "$";
			}
			else if (Snake[i][j] == 2) {

				cout << "*";
			}
			else {

				cout << "-";
			}
		}
		cout << endl;
	}
}

void checkType(int index) {


}

三.扩展

        实现自动生成果子思路.

        写一个生成果子的float变量,当作cd, 然后在循环里面减去一个数,比如自减,到了一个规定的数值,比如 <0,生成一个果子.随机从地图里面去一个坐标(判断当前位置没有蛇头,蛇身),然后判断蛇头位置和果子位置重合,即蛇吃到果子,身体+1.

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

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

相关文章

移除重复节点

题目链接 移除重复节点 题目描述 注意点 链表未排序链表长度在[0, 20000]范围内链表元素在[0, 20000]范围内 解答思路 使用Set存储访问过的链表中出现的节点值&#xff0c;当遍历到链表的某个节点在Set中出现过&#xff0c;则需要将该节点的前一个节点next指针指向该节点的…

护眼灯到底有用吗?引发护眼台灯危害的四大原因曝光!

护眼灯到底有用吗&#xff1f;近几年随着各大科技感满满的设备诞生&#xff0c;近视率也伴随着不断提高&#xff0c;现如今是已经攀升到了惊人的53.6%&#xff0c;这一数据也清晰的警惕着每一位家长&#xff0c;此刻护眼灯以独特的护眼效果脱颖而出&#xff0c;同时也在书房中占…

Linux - crond任务调度、at定时任务

1 crontab 进行-定时任务的设置 1&#xff09;概述&#xff1a; 任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序。 任务调度分类&#xff1a; 系统工作&#xff1a;有些重要的工作必须周而复始地执行。如病毒扫描等个别用户工作&#xff1a;个别用户可能希…

UE5 Cesium2 最新使用地理配准子关卡构造全球场景

参考官方最新教程&#xff1a;Building Global Scenes with Georeferenced Sublevels – Cesium 创建持久关卡&#xff08;主关卡&#xff09; 这里一般包含DynamicPawn、CesiumSunSky 和 Cesium World Terrain 全球场景通用的对象。子关卡的创立&#xff0c;官方教程分为了两…

php 变量值传递和引用传递

一、值传递和引用传递 二、在foreach 中的引用传递 public function actionR(){$a [a>1,b>2,];foreach ($a as &$item){$i 100;$item $i;}$b [a>1,b>2];foreach ($b as &$item){$i 99;$item $i;}var_dump($a,$b);}可见 在两个foreach 中&$item …

教师岗位等级划分标准

教师岗位等级的划分是否真的能够全面反映教师的专业能力和教学效果&#xff1f;晋升机制是否公正合理&#xff0c;能否真正激励教师持续进步&#xff1f; 教师岗位等级&#xff0c;其实就是对教师专业技能和教学经验的一种评价和激励。教师的岗位等级一般分为12个级别&#xff…

上海汇正财经官网怎么样?客户好评如潮,口碑赞誉之声不绝于耳

在财经服务领域&#xff0c;客户评价是衡量一家企业信誉和服务质量的重要标准。上海汇正财经作为业内知名的财经服务平台&#xff0c;以其优质的服务赢得了广大客户的认可和好评。大量正面用户评价和成功服务的案例&#xff0c;充分证明了上海汇正财经是一个值得信赖的正规企业…

Python爬虫入门到进阶:解锁网络数据的钥匙

Python爬虫入门到进阶&#xff1a;解锁网络数据的钥匙 一、Python爬虫基础1.1 爬虫基本概念1.2 Python爬虫必备库1.3 第一个爬虫示例 二、实战爬虫实例2.1 爬取天气数据2.2 高级技巧&#xff1a;异步爬虫 三、反爬机制与应对策略3.1 常见反爬机制3.2 应对策略 四、性能优化与安…

java中使用mysql的json字段(代码示例)

前言&#xff1a; 最近做了个小项目&#xff0c;第一次使用json类型的数据库字段&#xff0c;这篇博文讲下使用过程中遇到的问题&#xff08;数据库框架使用MyBatisplus&#xff09; 应用到项目中的方法&#xff1a; 数据库as_farmer_apply表中的json字段&#xff1a; 实体类…

泰达克TADHE uv胶水在粘接聚酰亚胺(Polyimide,PI)时具有一些优势,并在各行业中得到了广泛应用,尤其是在特定应用中

泰达克TADHE uv胶水在粘接聚酰亚胺&#xff08;Polyimide&#xff0c;PI&#xff09;时具有一些优势&#xff0c;并在各行业中得到了广泛应用&#xff0c;尤其是在特定应用中。以下是一些使用UV胶水粘接PI的优势&#xff1a; 1.快速固化&#xff1a; UV胶水通过紫外线照射进行固…

AI日报:百度发布文心大模型学习机;Open-Sora 1.1可生成21秒视频;Canva可以自动剪辑视频了;超牛ComfyUI节点AnyNode来了

欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南&#xff0c;每天我们为你呈现AI领域的热点内容&#xff0c;聚焦开发者&#xff0c;助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解&#xff1a;AIbase - 智能匹配最适合您的AI产品和网站 1、百度文心…

半导体测试基础 - 功能测试

功能测试(Functional Test)主要是验证逻辑功能,是运用测试矢量和测试命令来进行的一种测试,相比于纯 DC 测试而言,组合步骤相对复杂且耦合度高。 在功能测试阶段时,测试系统会以周期为单位,将测试矢量输入 DUT,提供预测的结果并与输出的数据相比较,如果实际的结果与测…

【探索Java编程:从入门到入狱】Day6

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

轻松实现PDF文件的在线浏览

福昕软件最近发布了一款名为Cloud API的产品&#xff0c;通过几行代码即可轻松实现PDF文件的在线浏览。先一睹为快吧。 简介 先看看产品官网&#xff1a;福昕 Cloud API Cloud API包括两个形态产品&#xff0c;一个是在线的PDF查看工具&#xff0c;叫PDF Embed API,另外一个…

TensorRT部署模型基本步骤(C++)

TensorRT部署模型基本步骤&#xff08;C&#xff09; 文章目录 TensorRT部署模型基本步骤&#xff08;C&#xff09;前言一、onnx模型转engine1.基于C代码生成engine2.基于trtexec.exe命令行生成 二、读取本地模型三、创建推理引擎四、创建推理上下文五、创建GPU显存缓冲区六、…

Offline RL : Context-Former: Stitching via Latent Conditioned Sequence Modeling

paper 基于HIM的离线RL算法&#xff0c;解决基于序列模型的离线强化学习算法缺乏对序列拼接能力。 Intro 文章提出了ContextFormer&#xff0c;旨在解决决策变换器&#xff08;Decision Transformer, DT&#xff09;在轨迹拼接&#xff08;stitching&#xff09;能力上的不足…

windows11如何安装IIS

目录 IIS是什么&#xff1f; 为什么要配置IIS&#xff1f; 1.打开控制面板进入程序 2.点击启用或者关闭windos功能 3.勾选IIS相关的web项 4.点击确定等待一分钟程序变更即可 5.主页搜索internet 点击进入 6.进入IIS进行查看配置&#xff0c;并测试&#xff0c;也可以浏…

43、Flink 的 Window Join 详解

1.Window Join a&#xff09;概述 Window join 作用在两个流中有相同 key 且处于相同窗口的元素上&#xff0c;窗口可以通过 window assigner 定义&#xff0c;并且两个流中的元素都会被用于计算窗口的结果。 两个流中的元素在组合之后&#xff0c;会被传递给用户定义的 Joi…

stream-实践应用-统计分析

背景 业务部门提供了一个数据&#xff0c;数据甚至不是excel类型的&#xff0c;是data.txt&#xff0c;每一行都是一个数据&#xff0c;需要对此数据进行统计分析 统计各个月份的销量 因为直接获取resources下的data.txt&#xff0c;所以要借助输入流进行获取数据&#xff0c;再…

sqli-labs---第三关

1、判断什么类型注入 ?id1 正常显示 ?id1 &#xff08;报错&#xff1a;1) LIMIT 0,1&#xff09; ?id1 正常显示 ?id1#(报错&#xff1a;1) LIMIT 0,1) 可知闭合方式为) 2、查看列数 ?id1) order by 3 -- (没有报错) ?id1) order by 4 -- (报错) 说明有3列 3、使用联合查…