C++贪吃蛇从0到1--day1

C++贪吃蛇从0到1--day1,第1张

C++贪吃蛇从0到1--day1 解决展示的设计思路及代码(新人从0到1调试到好看大概需要1~2个小时,如果再带深究一些内容点,半天怎么都能完成的) day1解决的问题:
  1. 大小可变的运动空间n*n,考率用vector实现。
//先用const int,以后去掉const即可。设立单独的变量就是为了方便改动值来测试。
//窗口是width*width,所以运动空间就是norm_size*norm_size;
//最开始用小数测试即可
const int width = 7;
const int norm_size=width-2;
vector> vvc(norm_size, vector(norm_size, ' '));
  1. 能够打印窗口。包括了墙,蛇以及食物的打印,由于vvc内部初始化都是space,因此不用额外考虑空处处理。显然可以写成嵌套打印。
//要设计什么是墙,什么是身体,什么是食物
//怎么输出好看这是要调试的,在控制台中横向会紧凑一些,纵向会松散一些。
//具体可以有不同实现。
const char wall_smb = '#';
const char body_smb = '*';
const char food_smb = 'o';

void print(vector& vc) {
	cout << wall_smb;
	for (auto p = vc.begin(); p != vc.end(); ++p)
		cout << ' ' << *p;
	cout<< ' '<< wall_smb << endl;
}
void print_all(vector>& vvc) {
	for (int i = 0; i < width; ++i){
		if(i==0||i==width-1)
			cout << string(2 * width - 1, wall_smb) << endl;
		else print(vvc[i-1]);
	}
}

  1. class snake,这个设计从0开始还是有点费脑子的,建议自己也从零开始,会碰到较多的问题。包括用什么来储存蛇,要知道蛇会一直动来动去,还会边长,所以这里这个设计还是有点意思的。基于蛇头要吃东西,而且判定撞墙撞身体,因此要头部要能 *** 作。而吃了东西尾部应该在原地,没吃东西则向前进,因此也要能尾部 *** 作。所以这个数据结构至少要保证头尾能快速 *** 作,我这里第一反应是deque,后来改成了list(哪个都行)。具体的点用pair,我这里将蛇的死活放在了类内部,按逻辑来说,也可以放类外判定。
//出生点位置,目前在正中间,这个后期可改成随机生成。
const int birth = (width / 2) - 1;
//默认构造函数,以及基本成员函数。
class Snake {
private:
	deque> body;
	bool alive = true;
public:
	Snake() :body({ pair(birth, birth) }) {}
	pair gethead()const { return body.front(); }
	pair gettail()const {return body.back();}
	bool live() const { return alive; }
	size_t size() const { return body.size(); }
};
  1. class food。测试,不多说。
struct Food {
	int x = 1;
	int y = 2;
	bool flag = 1;
};
  1. 集成调试。同时可以测试一下各个函数的功能正确性。可以修改一下内部实现。
#include 
#include
#include
using namespace std;

//此处插入上面出现的代码。


int main() {
	Snake snake;
	Food food;
	auto beg = snake.gethead();
	auto end = snake.gettail();
	//将snake和food占位更改。
	vvc[beg.first][beg.second] = body_smb;
	vvc[food.x][food.y] = food_smb;
	print_all(vvc);
	return 0;
}

运行结果

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5635180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存