蛇的网格表示

时间:2016-12-23 08:36:42

标签: c++ deque

我想用C ++编写一个小小的Snake游戏,我想知道代表游戏矩阵的最佳方法是什么。

我可以使用2DArray(类似vector< vector< int>>),它将包含一些代表不同对象的值(例如:0无,1蛇,2墙,3食物......) 另一方面,我可以不为网格使用数组,并为不同的游戏对象使用多个数组(例如:vector< Wall>,vector< SnakeTile>,vector< Food>,...)

我是否还应该考虑使用std :: deque代表我的蛇?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我认为你开始编写一个围绕std向量的包装器,它提供col,基于行的访问:

{{1}}

这将代表你的网格。类型T(或类)可以表示将包含有关单元格的所有信息的Cell对象。通过这种方式,您的网格数据将紧密打包,并且易于访问。

你还应该全面思考你的Scake如何与你的网格交互,以及那将是什么(你不能在蛇的位置上放一个水果?)。那么你可以阻止你的代码中的这些缺陷,这将决定你的Grid和你的Snake应该如何交换infromations(以及它们中的哪一个)。

答案 1 :(得分:0)

想想碰撞 - 你想检查蛇是否与自身发生碰撞。在头部移动的位置处访问网格是恒定的,搜索蛇的整个身体不是。如果一个玩家有点好,那么蛇无论如何都会填充大部分网格,这意味着没有任何记忆保存。

然而:你还有另外两项任务:当蛇移动并画蛇时删除尾巴。为了绘画它,我假设你希望玩家能够看到它如何摆动,所以你需要一个蛇穿过田野的顺序。这听起来像蛇的位置队列。

我们已经谈过记忆了,但是...在这里是相关的记忆吗?对于现代机器来说,400块左右的瓷砖并不算什么。关于必须搜索整个身体的事情仍然是相关的,因为这比访问网格图块更不易读。

因此,我是如何做到的:有一个2D矢量代表碰撞网格和一个蛇队列。如果我们谈论食物和墙壁,除了蛇之外的所有东西都可以存储在2D矢量中。现在就去做,实施​​它,看看是否出现问题,在最坏的情况下,你会获得经验,是吗?