我将用 Glut 和 Opengl 游戏信息(wiki)在 c 中构建我自己的宝石。
短游戏信息游戏由一个网格组成,比如说 8x8,带有不同的宝石。当您通过交换两个相邻的宝石来创建至少 3 个相同类型的宝石的行/列时,宝石将消失。比赛场地将从顶部填满。
两个设计组件 链表与数组
有几种方法可以实现这一点,但我想要最易于维护和最有效的方法。我的想法是:
(2D 数组代表运动场/网格)。
1)包含指向 gem 对象(实例)的所有指针的链表。以及一个 2D 数组,其中包含指向链表元素的所有指针,以便快速访问列表。链表可用于轻松打印游戏对象。每个链表对象都有一个位置(宝石、记分板、时间 ets)
2)与上述想法相同,但每一行或每一列都有一个链表,其他游戏元素都有一个链表。
3) 只有一个带有指向对象/实例 (gem) 的指针的 2D 数组。
所需操作
-交换元素(宝石),通过交换指针?
-"创建"新元素(在网格顶部)
-检查至少 3 个相同类型的宝石相邻的行/列
我希望我把一切都说清楚了。您认为最好的解决方案是什么?
我认为使用链表是矫枉过正的。我唯一能想到的有用的事情是从顶部掉落宝石,但即使是这样对于 2D 数组来说也是相当微不足道的。
int
的 2d 数组应该没有问题。它既简单又快速。
我会使用2D数组。它更易于使用,因为您可以直接访问元素,而不是循环访问列表,直到到达所需的元素。
但是,我也可以看到链表的优点,您可以在交换后删除一个成员并连续获得 3 个成员;您可以在迭代每个元素后向头/尾添加一个新元素并像使用数组一样移动它。
我的建议是同时实现两者。你听起来有点没有经验。您必须编写更多代码,以便下次偶然发现这些问题时能够自己回答这些问题。一个好的设计将允许你轻松地替换实现的这一部分,所以试着这样做并从中学习。