Zac*_*ack 8 java arrays collections data-structures
我是java的初学者,我现在正在为Android开发像杜松子酒的纸牌游戏.我想知道创建Hand类的最佳实现是什么?存储Deck.dealt()返回的卡的最佳方式是什么?
此外,如果有人能提供杜松子酒的开源链接,我将不胜感激.
Kev*_*ion 24
如果你真的想要了解集合类型之间的细微差别,请点击此处.
List
在技术上不合适,除非比赛是Bohnanza(咳咳,这是有史以来最伟大的纸牌游戏之一,但我让我完成).
List
除其他事项外,其中包括一手拿着王牌和王牌俱乐部,另一手牌包含国王和王牌俱乐部,从根本上讲是不一样的.这是对订单的强烈依赖,而不仅仅是"好吧,我想记住用户想要看到他们卡片的顺序",这是很多非List集合所拥有的属性,比如LinkedHashSet
和Guava的ImmutableSet
.
List
也意味着对于位于索引N的卡片有一些特别重要的意义.我知道没有纸牌游戏.
Set
通常不适合纸牌游戏 - 只使用一副完全独特的牌.
为了允许重复但仍然具有与顺序无关的相等性,要使用的类型是Guava Multiset
.例如HashMultiset
或ImmutableMultiset
.请注意,大多数multiset实现通过仅存储卡和计数来表示多个"相等"卡,因此当迭代它们时,您手中的卡的副本必须始终一起显示.如果让用户自由控制她手中的牌顺序很重要,那么你需要LinkedListMultiset
.
现在上课时间结束了......好吧,老实说吧.打电话myHand.equals(yourHand)
,或用整只手作为钥匙,实际上Map
并不是你要做的事......所以继续使用,你会好的.:-)ArrayList
将它们存储在ArrayList
.
手中的牌是按一定顺序排列的,而不是无序的一堆。此顺序保存在 a List
over a中Set
。
ArrayList
还让您有机会通过索引选择特定的卡牌,这将有助于您实现游戏。
请记住,只要Hand
正确设计类,您就可以在将来的任何时候轻松更改此数据结构。只要您在设计的任何类中牢记这一点,如果您意识到需要不同的东西,就可以随时更改它。
归档时间: |
|
查看次数: |
6425 次 |
最近记录: |