IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++贪吃蛇从0到1--day3 -> 正文阅读

[C++知识库]C++贪吃蛇从0到1--day3

解决展示的设计思路及代码(新人从0到1调试按键监控及运行逻辑正常大概需要1~2个小时,如果再带深究一些内容点,半天怎么都能完成的)

day3解决的问题:

  1. 蛇移动方位的更改。在蛇类里面增加一个setstatus函数,通过判断char c来移动。这里使用上下左右来移动,当然根据个人爱好,可以吧case改成asdw对应的char。显然,不能往反方向走。
class Snake{
public:
//***
	void setstatus(char c) {
		switch (c)
		{
		case 72:
			if(getstatus()!= Status::down)
				this->stat = Status::up;
			break;
		case 80:
			if (getstatus() != Status::up)
				this->stat = Status::down;
			break;
		case 75:
			if (getstatus() != Status::right)
				this->stat = Status::left;
			break;
		case 77:
			if (getstatus() != Status::left)
				this->stat = Status::right;
			break;
		default:
			break;
		}
	}
//***
};
  1. char监听。可以使用conio.h里面的两个函数_kbhit,_getch来完成非阻塞式键盘监听。(这里自己从0开始着实有点难,毕竟cin,getchar什么的都要回车,阻塞主线程,好烦。)正好,原来函数deley中有个while循环什么都没做,我们把这个内容放进去即可。(如果有输入就把它传给c)
#include <conio.h>
char c;
const int max_size = norm_size * norm_size;
void delay(int time) {
	clock_t now = clock();
	while (clock() - now < time) {
		if (_kbhit()) {
			c = _getch();
		}
	}
}
int main(){
//***
while (snake.size() < max_size && snake.live()){
//***
	delay(500);
	snake.setstatus(c);
	snake.eat(food);
//***
}
//***
}
  1. Food随机生成。用到了随机数生成引擎,使用均匀分布生成x,y,同时reset函数进行了修改,如果当前位置
#include<random>

std::default_random_engine dre;
std::uniform_int_distribution<int> di;
const char food_smb = 'o';

struct Food {
	int x = di(dre);
	int y = di(dre);
	bool flag = 1;
	bool eated() {
		return !flag;
	}
	void reset() {
		//防止强制调用reset()留下残影,当然一行删去就可以同时出现很多个Food了,后期增加功能可以改这个
		if (vvc[x][y] == food_smb) vvc[x][y] = ' ';
		x = di(dre);
		y = di(dre);
		flag = 1;
	}
};

int main() {
	Snake snake;
	Food food;
	auto beg = snake.gethead();
	auto end = snake.gettail();
	while (snake.size() < max_size && snake.live()) {
		vvc[beg.first][beg.second] = body_smb;
		system("cls");//windows
		//system("printf \"\\033c\"");
		//***如果食物被吃掉或者生成食物的位置是蛇的身体,那么重新生成食物。更新判定矩阵vvc中food位置
		while (vvc[food.x][food.y] == body_smb||
				food.eated())
			food.reset();
		vvc[food.x][food.y] = food_smb;
		//***
		print_all(vvc);
		delay(500);
		snake.setstatus(c);
		snake.eat(food);
		beg = snake.gethead();
		if (end != snake.gettail()) {
			vvc[end.first][end.second] = ' ';
			end = snake.gettail();
		}
	}
	cout << "your grade is: " <<grade<< endl;
}
  1. 至此,贪吃是已经可以正常运行了。下一节将v1版本贪吃蛇全部代码展示出来。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:12:48  更:2021-12-04 13:15:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:21:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码