저는 C#으로 포커 프레임 워크를 작성 중이며 현재 가지고있는 디자인이 마음에 들지 않습니다. 내 목표는 일괄 모드에서 서로에 대해 여러 AI 에이전트를 매우 빠르게 재생할 수있는 게임 엔진을 사용하고 여러 AI 에이전트를 재생하는 것입니다 (아마도 Silverlight 클라이언트를 통해). 효율성을 높게 유지하면서 유연성을 유지하고 싶습니다. 예를 들어 리미트 홀덤, 노 리미트 홀덤, 리미트 7 카드 스터드 등의 게임을 할 수 있어야합니다.더 나은 C# 포커 프레임 워크 디자인?
현재 디자인
- HandHistory : 다소 투박하고 유연성있는 현재 손에 대한 모든 정보 (선수, 만들어 내기 등)
- 아이 플레이어를 포함합니다 : 모든 플레이어가 GetAction (HandHistory 역사) 메소드를 정의합니다.
- GameEngine : HandHistory 개체를 반환하는 Play (HandInfo 정보) 메서드를 정의합니다.
- PotManager : Pot을 관리하고 각 플레이어가 호출해야하는 양과 승리 할 수있는 양을 결정합니다 (예 : 불균등 스택이 있고 올인 인 경우).
- BetManager : 베팅을 관리하고 베팅 라운드가 완료된 시점을 결정합니다.
HandInfo 클래스에는 손을 설정하는 방법에 대한 모든 정보가 들어 있습니다. 재생 방법은 다음과 같은 :
HandHistory Play(HandInfo info)
{
PotManager pots = new PotManager(info);
BetManager bets = new BetManager(info);
HandHistory history = CreateHistory(info);
bets.CollectBlinds();
if(!bets.GameOver)
{
DealHoleCards();
if(bets.PlayersThatCanStillBet > 1)
bets.CollectBets();
if(!bets.GameOver)
{
DealFlop();
... and on and on
}
}
return history;
}
냄비 및 베팅 관리자 클래스 악몽이되어 변함 버그으로 가득되는 등, 블라인드를 수집 같은 고려해야 할 많은 작은 일들이 존재하기 때문에 문제가 발생 . 또한, 내 엔진 디자인은 다른 게임과는 달리 하나의 게임 유형 (Hold'em) 만 지원합니다.
엔진이 수십억 개가 넘는 인공 지능 시뮬레이터로 주로 사용되므로 효율성 측면에서 내 우선 순위가 가장 먼저 나옵니다. 그러나 이것이 가능할 수있는보다 우아한 방법이 있다고 생각하고 싶습니다.
위의 @ Lachlan의 게시물 외에 중복성 부족으로 최적화 할 것을 제안합니다. –
나는 "일을 먼저 만든 다음 빨리"일반적으로 동의합니다. 그러나 성능이 중요한 부분 인 경우 (대다수의 시뮬레이션에서와 같이) 일반적으로 몇 가지 예측 (얼마나 자주 필요합니까?)을 작성하고 프로토 타입을 작성하여 특정 작업의 소요 시간에 대한 첫 번째 추정을 얻는 것이 도움이됩니다. 때로는 멋진 OO 디자인이 정말 빨리 듣기 때문에 들립니다. 그리고, 나는 두려워, 때로는 정확히 이것을 필요로합니다. 그러나 이것이 정말로 당신을위한 경우인지 확인하십시오! – Philipp