Проверка совпадений в покере.
Добавлено: 10 дек 2009, 10:49
Правила просты:
- нет совпадений
- 2 одинаковых карты разной масти
- две пары
- 3 одинаковых карты разной масти
- стрит (карты разной масти идут по старшинству)
- флэш (все карты одной масти)
- фулл хауз (пара и тройка)
- карэ (4 одинаковых карты разной масти)
- флэш стрит (флэш и стрит одновременно)
Собственно не могу подступиться к проверке этих правил.
Реализовано следующее:
- массив структур с двумя переменными int value и char suit. Первая - значение карты (где, T - 10, J - jack (11), Q - queen (12), K - king (13), A - ace (1)), вторая масть (H, D, C, S).
- функция, переводящая карты в числовой формат
- сортировка карт по возрастанию (для удобства сверки по правилам)
В качестве идеи лежит следующий алгоритм:
- создаем временный массив
- проверяем каждый элемент отсортированного массива с соседом. Если совпадение по значению есть, то записываем во временный массив кол-во совпадений.
- повторяем пока не пройдем весь массив.
- проверяем временный массив. Если в нем есть цифра 2 - то у нас пара, 3 - тройка, 4 - 4 одинаковых карты, 2 и 3 - фулл хауз, ничего нету - совпадений нет.
С мастями сложнее. Но даже без учета мастей не могу подступиться
Надеюсь на вашу помощь
- нет совпадений
- 2 одинаковых карты разной масти
- две пары
- 3 одинаковых карты разной масти
- стрит (карты разной масти идут по старшинству)
- флэш (все карты одной масти)
- фулл хауз (пара и тройка)
- карэ (4 одинаковых карты разной масти)
- флэш стрит (флэш и стрит одновременно)
Собственно не могу подступиться к проверке этих правил.
Реализовано следующее:
- массив структур с двумя переменными int value и char suit. Первая - значение карты (где, T - 10, J - jack (11), Q - queen (12), K - king (13), A - ace (1)), вторая масть (H, D, C, S).
- функция, переводящая карты в числовой формат
- сортировка карт по возрастанию (для удобства сверки по правилам)
Код: Выделить всё
#include <iostream>
const int ARRAY_SIZE = 5;
struct Poker
{
int value;
char suit;
};
void check_suit(char suit);
//Предусловие: аргумент suit содержит масть карты
//(S - spades, H - hearts, D - diamonds, C - clubs)
//Постусловие: выводит на экран ошибку при некорректном вводе масти и
//останавливает выполнение программы.
int transform(char ch_value);
//Предусловие: аргумент ch_value содержит значение карты
//(2-9, T - 10, J - Jack, Q - Queen, K - King, A - Ace).
//Возвращает числовое значение карты:
//(2-9, T - 10, J - 11, Q - 12, K - 13, A - 1);
//при некорректном вводе значения карты выводит на экран ошибку
//и останавливает выполнение программы.
int main()
{
using namespace std;
Poker player[ARRAY_SIZE];
char ch_value, ch_suit;
int index1, index2, temp; //переменные для сортировки
/*Вводим значения карт и их масти*/
//.......
/*Сортируем массив структур по возрастанию важности карт
A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K*/
//.......
/*Поиск совпадений согласно правилам*/
//???
return 0;
}
//Используем библиотеку классов cstdlib
void check_suit(char suit)
{
//.......
}
//Используем библиотеку cstdlib
int transform(char ch_value)
{
//.......
}
- создаем временный массив
- проверяем каждый элемент отсортированного массива с соседом. Если совпадение по значению есть, то записываем во временный массив кол-во совпадений.
- повторяем пока не пройдем весь массив.
- проверяем временный массив. Если в нем есть цифра 2 - то у нас пара, 3 - тройка, 4 - 4 одинаковых карты, 2 и 3 - фулл хауз, ничего нету - совпадений нет.
С мастями сложнее. Но даже без учета мастей не могу подступиться

Надеюсь на вашу помощь
