2nd
Фев

Программный подсчёт комбинаций и вероятностей в покере, создание покер бота

Posted by admin under c/c++, Общалка

Как создать покер рум, как сделать для него бота, начало работы над этим рассмотрим в этом посте.

На форуме уже ни одна тема была по созданию бота для покер рума, также в разделе win api на форумеРабота с покер-румом. И даже выкладывались наработки, например, покера с костями. Все актуальные и более релевантные темы можно посмотреть через google – site:programmersforum.ru покер. Всё это и многое другое, например – игровые автоматы, делается для многих и многих онлайн казино на просторах интернета.

В начале работы с колодой карт в покере, вероятно, сначала стоит рассмотреть все комбинации в покере dixonich предлагает массив cards[52] .

dixonich:

собственно есть массив
cards[52] = {21,31,41,…,144}
последняя цифра – масть. это колода.
нужно осуществить проверку комбинаций. какие есть варианты, кроме 1000 ифов? ))

veniside предлагает решение:

veniside:

Вот, меня хватило только до Straight, но идея, думаю, понятна.


struct card {
int v; // 2=2, 3=3, ... 11=J, 12=Q, 13=K, 14=A
int suit; // 1=clubs, 2=spades, 3=hearts, 4=diamonds
};

struct deck {
int count; // number of cards
card set[52]; // cards
};

void sort(deck &d, bool byV) // bubble sort (by Value or by Suit)
{
bool sorted = false;
while (!sorted) {
//
int i = 0;
sorted = true;
while (i < d.count - 1) { // bool gt = byV ? d.set.v > d.set.v : d.set.suit > d.set.suit;
if (gt) {
//
sorted = false;
card tmp = d.set;
d.set = d.set;
d.set = tmp;
}
i++;
}
}
}

int longrun(deck &d, int &second)
{
sort(d, true); // sort by value
//
second = 0;
int first = 1, current = 1;
//
int v = d.set[0].v;
int i = 0;
while (i++ < d.count - 1) { // if (v == d.set.v) current++; else { // if (current > first)
first = current;
if ((current < first) && (current > second))
second = current;
//
current = 1;
v = d.set.v;
}
}
if (current > first)
first = current;
if ((current < first) && (current > second))
second = current;
//
return first;
}

bool Straight(deck &d, bool Flush)
{
sort(d, true); // sort by value
//
// check if values are increasing & all suits are same
int v = d.set[0].v;
int s = d.set[0].suit;
int i = 0;
while (i++ < d.count - 1) {
//
if ( (d.set.v != d.set.v + 1) || (Flush & (d.set.suit != s)) )
return false;
}
//
return true;
}

bool RoyalFlush(deck &d)
{
if (Straight(d, true))
return (10 == d.set[0].v);
else
return false;
}

bool FourOfAKind(deck &d)
{
int s;
return (4 == longrun(d, s));
}

bool FullHouse(deck &d)
{
int f, s;
f = longrun(d, s);
return ((3 == f) && (2 == s));
}

bool Flush(deck &d)
{
sort(d, false); // sort by suit
int s = d.set[0].suit;
int i = 0;
while (i++ < d.count - 1) {
//
if ( d.set.suit != s )
return false;
}
return true;
}


Использовать примерно так:


deck hand;
hand.count = 5;
hand.set[0].v = 10;
hand.set[0].suit = 1;
hand.set[1].v = 10;
hand.set[1].suit = 2;
hand.set[2].v = 9;
hand.set[2].suit = 1;
hand.set[3].v = 9;
hand.set[3].suit = 3;
hand.set[4].v = 9;
hand.set[4].suit = 2;
//
bool rf = RoyalFlush(hand); // Royal Flush
bool sf = Straight(hand, true); // Straight Flush
bool foak = FourOfAKind(hand); // Four Of A Kind
bool fh = FullHouse(hand); // FullHouse
bool f = Flush(hand); // Flush
bool s = Straight(hand, false); // Straight

Подробнее в теме на форуме – Проверка комбинаций в покере.

Похожие статьи