我想用C ++编写一个小小的Snake游戏,我想知道代表游戏矩阵的最佳方法是什么。
我可以使用2DArray(类似vector< vector< int>>),它将包含一些代表不同对象的值(例如:0无,1蛇,2墙,3食物......) 另一方面,我可以不为网格使用数组,并为不同的游戏对象使用多个数组(例如:vector< Wall>,vector< SnakeTile>,vector< Food>,...)
我是否还应该考虑使用std :: deque代表我的蛇?
感谢您的帮助。
答案 0 :(得分:1)
我认为你开始编写一个围绕std向量的包装器,它提供col,基于行的访问:
{{1}}
这将代表你的网格。类型T(或类)可以表示将包含有关单元格的所有信息的Cell对象。通过这种方式,您的网格数据将紧密打包,并且易于访问。
你还应该全面思考你的Scake如何与你的网格交互,以及那将是什么(你不能在蛇的位置上放一个水果?)。那么你可以阻止你的代码中的这些缺陷,这将决定你的Grid和你的Snake应该如何交换infromations(以及它们中的哪一个)。
答案 1 :(得分:0)
想想碰撞 - 你想检查蛇是否与自身发生碰撞。在头部移动的位置处访问网格是恒定的,搜索蛇的整个身体不是。如果一个玩家有点好,那么蛇无论如何都会填充大部分网格,这意味着没有任何记忆保存。
然而:你还有另外两项任务:当蛇移动并画蛇时删除尾巴。为了绘画它,我假设你希望玩家能够看到它如何摆动,所以你需要一个蛇穿过田野的顺序。这听起来像蛇的位置队列。
我们已经谈过记忆了,但是...在这里是相关的记忆吗?对于现代机器来说,400块左右的瓷砖并不算什么。关于必须搜索整个身体的事情仍然是相关的,因为这比访问网格图块更不易读。
因此,我是如何做到的:有一个2D矢量代表碰撞网格和一个蛇队列。如果我们谈论食物和墙壁,除了蛇之外的所有东西都可以存储在2D矢量中。现在就去做,实施它,看看是否出现问题,在最坏的情况下,你会获得经验,是吗?