Я пытаюсь придумать класс истории 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.
Мы уже генерируем действия в порядке расположения, поэтому используем связанную хэш-карту, чтобы мы могли потом итерацию и пропустить позиции, которые находятся в нерабочем состоянии, и т. Д.
Каждый массив будет содержать действия, которые эта позиция выполняла в этой области. В большинстве случаев в этом массиве будет один элемент, но в таких случаях, как limps и последующие вызовы, он будет иметь два элемента.
Может кто-нибудь увидеть лучшую структуру данных, чтобы использовать для этого?