我正在尝试为德州扑克设计一个 Java 手牌历史课程,并想在这里提出一个想法。
要求是每个动作都被存储,并且有一种有效的方法来遍历每个 HandHistory 对象(这将代表一手牌)以匹配常见的“线”,例如标准持续下注(即翻牌前处于后面位置的翻牌前加注者和可能处于有利位置,翻牌后过牌,然后进行 75% 的底池下注)。
暂时忽略每条线的定义充其量是模糊的。作为第一次尝试,我正在考虑这样组织它:
public class HandHistory {
private Integer handnumber;
//in case we saw things at showdown, put them here
private HashMap<Player,String> playerHands;
private String flopCards;
private String turnCard;
private String riverCard;
private HashMap<BetRound,LinkedHashMap<Integer,ArrayList<PlayerAction>>> actions;
}
因此,对于每个下注轮,我们存储一个链接的哈希图,其键是整数,是从第一个位置到该下注轮的偏移量,因此翻牌前 UTG 为 0。
我们已经按位置顺序生成了动作,所以使用链接的哈希图,这样我们就可以稍后很好地迭代并跳过闲置的位置等。
每个数组列表将包含该位置在该投注轮中的操作。大多数情况下,这个数组只有一个元素,但在像跛入然后跟注这样的情况下,它将有两个元素。
谁能看到一个更好的数据结构用于此?