Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vars-cat
0 / 0 / 1
Регистрация: 21.12.2011
Сообщений: 49
#1

Проверка на стрит(покер) - C++

29.08.2012, 12:51. Просмотров 1106. Ответов 3
Метки нет (Все метки)

В одном из заданий из книги Дейтелов необходимо определить, имеется ли на руках у игрока стрит(пять карт последовательных номиналов). Но сколько я не пытался решить это задание, у меня ничего не получалось. Нужна ваша помощь.

К примеру есть массив строк с номиналами карт
C++
1
const char *testFace[] = { "Two", "Five", "Six", "Three", "Ace" }
и функция с помощью которой необходимо определить, имеется ли на руках у игрока стрит
C++
1
bool checkForStraight(const char **face)
Задача кажется несложной, но из-за особенности туза в покере я не могу понять как её решить.
Из wiki: Туз может рассматриваться и как младшая карта для образования последовательности (стрит) до 5 включительно, и как старшая (в комбинации с король— дама — валет — 10)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2012, 12:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка на стрит(покер) (C++):

стрит-флеш - C++
Написал функцию проверки на образование комбинации стрит-флеш....помидорами не закидывать писал не очень вдумчиво но здесь какие то ошибки...

Определить, выпал ли стрит? - C++
Добрый день, задача следующая, нужно определить выпал ли стрит(5 карт последовательно любой масти) Изначально выдается 5 карт случайных....

Покер - C++
Подскажите пожалуста где ошибка??????:help: компилятор выдает ошибки Ошибка 2 error LNK2005: "int __cdecl compareCards(void const...

Покер - C++
Хочу написать простенькую покерную программу на с++. Нужна помощь с архитектурой. Напишите, пожалуйста, какие классы стоит реализовать....

Покер - C++
Прошу помощи. Болел - ничего не понял. Скоро экзамен, а я ничего не понимаю в С++. Дали примерные задачи, а я не понимаю как решать. Вот...

Задача Покер - C++
Даны 5 целых чисел. Среди них: если одинаковы 5, то вывести "Impossible", иначе если одинаковы 4, то вывести "Four of a Kind", иначе ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.08.2012, 13:14 #2
удобнее работать не с именами карт, а с их весами или значениями или старшинством или индексами в массиве. чем младше карта - тем меньше ее вес. тогда задача определения стрита сводится к сортировке имеющихся пяти карт по весу и определению факта того, что разность весов у соседних карт равна еденице. ну и предусмотреть случай с тузом. в этом варианте после сортировки последовательность будет 2 3 4 5 A и эту последовательность тоже легко определить.
vars-cat
0 / 0 / 1
Регистрация: 21.12.2011
Сообщений: 49
29.08.2012, 13:30  [ТС] #3
Цитата Сообщение от DU Посмотреть сообщение
удобнее работать не с именами карт, а с их весами или значениями или старшинством или индексами в массиве. чем младше карта - тем меньше ее вес. тогда задача определения стрита сводится к сортировке имеющихся пяти карт по весу и определению факта того, что разность весов у соседних карт равна еденице.
Я примерно так и делал.
Цитата Сообщение от DU Посмотреть сообщение
...ну и предусмотреть случай с тузом. в этом варианте после сортировки последовательность будет 2 3 4 5 A(по правилам из wiki, туз не может быть старше пятёрки. В этом случае он будет равен единице) и эту последовательность тоже легко определить.
А вот как раз с этим я никак не могу разобраться. Поэтому и прошу помощи.
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.08.2012, 13:45 #4
ну примерно выглядит так.
имеем последовательность.
отсортировали ее.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < 5 - 1; ++i)
{
   if (card[i+1] - card[i] != 1) //  разность отлична от еденицы.
   {
      // но нужно еще проверить что это не стрит с тузом.
      // если это последнаяя итерация (четвертая, i == 3) и если iая (предпоследняя) карта - пятерка
      // а i + i (последняя) карта - туз - то у нас стрит. иначе не стрит.
      const bool isStraight = (i == 3 && card[i] == 5 && card[i+1] == Ace);
      return isStraight;
   }
}
 
return true;

Не нужно пытаться представить туз младшим в этой комбинации. Это вроде бы одно исключение, в котором туз является младшим. Во всех других случаях он старший и лучше так и оставить и обработать вот такой вот хитрый случай со стритом от туза до пятерки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2012, 13:45
Привет! Вот еще темы с ответами:

Задача Покер - C++
Даны 5 целых чисел. Среди них: если одинаковы 5, то вывести &quot;Impossible&quot;, иначе если одинаковы 4, то вывести &quot;Four of a Kind&quot;, иначе ...

Графический покер - C++
Доброго времени суток всем. Вот, немного запутался.... Есть игра покер...Нужно ее реализовать в упрощенном виде. Есть изображения...

Кому интересно. Покер - C++
Вообщем, давно ничего не кодил и на днях накатал немного говно кода на тему Покера. Кому будет интересно, посмотрите и предложите если...

Моделирование игры в покер - C++
Недавно начал изучать С++,использую книгу Харви М. Детела Как программировать на С++.В конце одной из глав есть упражнение,в котором нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.08.2012, 13:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru