|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Алгоритм подсчета покерной руки |
|
|
Алгоритм подсчета покерной руки
|
(*.*) Сообщения: 36564 |
Доброго времени суток!
Вот добрался я и до этого форума ![]() Финальный проект курса формулируется так. Надо сгенерировать колоду карт на 52 листа. Сначала нужно создать структуру данных, у которой два члена: face (номинал карты) и suit (масть). Затем нужно сформировать массив, который и будет наполнен 52 картами. Затем нужно сгенерировать 5 случайных уникальных номеров от 0 до 51 (или от 1 до 52) и на основе этих номеров сформировать покерную руку. Ну и самое главное - определить покерную комбиниацию, которая получится в рез-те. Покерные комбинации такие Flush (все одной масти) Четверка (четыре карды одного номинала) Full house (3+2) Тройка Две пары Пара Ничего Как видите, вариант упрощенный - straight (стрит) подсчитывать не нужно (курс-то для начинающих ;-) Ну и вывести надо 5 карт и название комбинации. Никаких картинок карточной колоды, все в текстовом виде. Затрудненения у меня вызвали пять уникальных случайных кард и алгоритм подсчета покерной руки. С пятью уникальными картами я вроде разобрался относительно легко. Прикрепленный файл Если я что-то упустил, то буду признателен, если вы укажете на ошибки. С подсчетом покерных комбинаций было сложнее. В конечном итоге, я его определил, но хотелось бы услышать и ваше мнение. Возможно, я что-то где-то упустил, или можно все сильно упростить. Основная идея: в руке не может быть более двух различных совпадающих номиналов карт. Т.е. если есть два туза и два короля, то пятой карте пары уже точно не будет. Значит надо подсчитать сколько раз совпали два различных номинала. Прикрепленный файл Ну а дальше уже детали. По порядку проверяем следующие условия:
Вот так я себе это представил, и вроде даже работает. Буду признателен, если вы проверите алгоритм на наличие ошибок или предложите более оптимальный вариант. Может где-то есть лишние шаги, которые можно убрать, упростив код. Спасибо за внимание. P.S. Полный код проекта прикреплен. |
|
------- Отправлено: 11:05, 18-04-2005 |
(*.*) Сообщения: 36564
|
Профиль | Сайт | Отправить PM | Цитировать Цитата:
Спасибо за идею. Все равно, слишком много переменных вводится, тогда уж лучше массив... |
|
------- Последний раз редактировалось Vadikan, 04-05-2005 в 04:25. Отправлено: 04:08, 04-05-2005 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 401
|
Профиль | Отправить PM | Цитировать Цитата:
вводить массив не вижу смысла... ок, рассмотрим гипотетический случай с MaxSuit мастями, MaxFaces количеством карт в каждой масти и MaxCardsOnHand картами в руках игрока, тогда Цитата код:
![]() но это только одинаковые значения карт. опять же можно ввести джокеров и даже смотреть их старшинство (b.e. "пара дам с красным джокером" бьет "пару дам с синим") стриты, флешрояли и иже с ними рассмотрим в следующей главе ![]() |
||
------- Последний раз редактировалось aESThete, 04-05-2005 в 10:47. Причина: синтаксические ошибки Отправлено: 10:37, 04-05-2005 | #22 |
(*.*) Сообщения: 36564
|
Профиль | Сайт | Отправить PM | Цитировать aESThete
Сорри, я что-то не получил уведомления о последнем сообщении. Вот среднюю я строчку я не понял. Поясни, плиз ;-) Между тем, я получил за проект 100% с комментарием "Очень хороший проект" и в целом за курс А+, что является максимально возможно оценкой. Спасибо всем, кто принял участие в обсуждении ![]() |
------- Отправлено: 09:46, 17-05-2005 | #23 |
Старожил Сообщения: 401
|
Профиль | Отправить PM | Цитировать поздравляю!
if combinations(i) > 0 then ' уже писал в предыдущем посте: combinations(2) - количество пар, combinations(3) - количество троек ? i;"-к = ";combinations(i) ' просто печатает сколько каких комбинаций, например если при i=2 выведет: 2-к=2, то следует читать: двоек[пар] = две ' или при i=3 выведет: 3-к=1 (читай как: троек карт - одна) endif if combinations(2) > 0 and combinations(3) > 0 then ' по аналогии - количество пар и кол-во троек карт больше нуля ? "фулхаус" endif ![]() ![]() нуууу ооооочень красиво получается но есть подозрение, что ваш препод тогда или поседеет раньше времени, или в дурку попадет ![]() |
------- Отправлено: 14:23, 17-05-2005 | #24 |
Новый участник Сообщения: 1
|
Профиль | Сайт | Отправить PM | Цитировать Жалко что не на си))) было бы в сто раз понятнее, код хороший, я вот хочу сделать калькулятор шансов (подсчет аутов), велосипед (покерную руку) делать не очень хотелось.
|
------- Отправлено: 05:02, 04-11-2011 | #25 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
FreeBSD - Кривые руки | xolod. | Общий по FreeBSD | 2 | 14-05-2009 12:02 | |
[решено] мои руки\цп\мать кто виноват и что делать) | SoA | Непонятные проблемы с Железом | 12 | 14-08-2008 17:34 | |
DNS (опустились руки) 53 порт локального сервера | Virtus1k | Microsoft Windows NT/2000/2003 | 3 | 03-01-2008 11:16 | |
Программа подсчета трафика. | NewWind | Общий по Linux | 1 | 04-06-2007 16:37 | |
Кривые руки при разгоне - и комп перестал грузится... | Shaytan | Непонятные проблемы с Железом | 13 | 06-03-2005 21:56 |
|