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

Покер. Комбинация Стрит-флеш - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Шаблоны STL http://www.cyberforum.ru/cpp-beginners/thread932225.html
Здраствуйте. У меня задача такая: робота со стандарными шаблонами. Мне нужно заполнить контейнер пользовательским типом даных, тоесть класом. У меня написан клас (по возможности проверть перегрузку фкнкции) но я никак не могу создать массив vector<Student> VStudent(4); не понимаю почему. пример в книге точно такой же, и все работает. не могу проверить размер контейнера c помощью VStuden.size()...
C++ OpenGL, работа с освещением Здравствуйте. Пробую себя в игростроении. Нарисовал трехмерный домик, физику сделал - можно бегать по поверхностям, прыгать, не проходить сквозь стены - все вроде бы работает. И тут встал вопрос об освещении... Использую уроки от NeHe, там про освщение написано, сделал как говорилось. Заработало. Но заметил несколько странностей(с заданием параметров освещения немного разобрался): 1) Освещение... http://www.cyberforum.ru/cpp-beginners/thread932221.html
Вывод символа из таблицы ASCII C++
Всем добрый вечер! Небольшой ступор Пытаюсь в консоли вывести символ - 156 Это символ фунта (денежная единица). #include <iostream> .... cout << '\x9C' << endl; ....
C++ Математическая задачка
В качестве f(x) использовать по выбору: sin(x), х , ех
C++ Задание вычислить за минимальное число операций http://www.cyberforum.ru/cpp-beginners/thread932177.html
Дано действительное число х. Не пользуясь никакими другими арифметическими операциями, кроме умножения, сложения и вычитания, вычислить за минимальное число операций 2х4 - Зх3 + 4.х2 - 5х + 6.
C++ Вычислить по формуле Вычислить по формуле: 2^(-x) - cos(x) + sin(2xy) подробнее

Показать сообщение отдельно
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
01.08.2013, 21:50     Покер. Комбинация Стрит-флеш
Написал функцию проверки на образование комбинации стрит-флеш....помидорами не закидывать писал не очень вдумчиво но здесь какие то ошибки при использовании алгоритмов STL и моей структуры(я так думаю)
мб и сам алгоритм не правильный...кому не в западло разобраться в моем говнокоде подскажите))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
struct card
{
       
       int first; //величина карты
       int second; //её масть
       card(int f, int s) : first(f), second(s) {}
       card() : first(0), second(0) {}
      
       card& operator=(const card& cop)
       {
             first = cop.first;
             second=cop.second;
        return *this;
       }
      
};
 
 
 
bool op(const card& c1, const card& c2)
{
     return c1.first<c2.first; //критерий сортировки карт
}
 
 
 
typedef vector<card> col_card;
 
 
 
 
bool str_flash(const col_card& board, const col_card& play, int& points, int& x, bool& flash) // board - коллекция карт на столе 
{                                                                                  //play-коллекция карт игрока 
  if(x==3)//  если х=3 первый вызов, нужно проверить одой ли масти карты игрока,      points-очки x-индикатор flash-если комбинация                                                                         
  {                                                                     //флеш, а не стрит флеш flash=true что бы в дальнейшем не тратить время
     col_card comb(5), tmp(7);                                         //на поиск комбинации флеш
     int max_v, n=0; // max_v максимальное значение среди карт, n- cчетчик
     
     if(play[0].second == play[1].second) //если карты игрока одной масти
     {
           play[0].first > play[1].first ? max_v=play[0].first : max_v=play[1].first; //находим старшую карту игрока(без учета масти)
           
           for(int i=0; i<5; i++)
                if(board[i].second==play[0].second) //проверяем каждую карту со стола на сходство масти с картой игрока
                {
                         n++;  // если масть карты на столе равна масти игрока счетчик увеличивается
                         comb.push_back(board[i]); // сохраняем карту для далнейшей проверки на комбинацию стрит(5 карт подряд)
                }
           if(n>=3) // если на столе 3+  карт тойже масти что и 2 карты игрока = 3+2= 5 комбинация флеш(5 карт одной масти)
           {
                   col_card::iterator n_end;//новый конец 
                   
                   n_end=set_union(play.begin(), play.end(), comb.begin(), comb.end(), tmp.begin()); // обьединаем карты игрока и найденые карты  той же масти
                   sort(tmp.begin(), n_end, op);  //сортируем 
                   n_end=unique(tmp.begin(), n_end); //удаляем дубликаты( поскольку нам необходимо  определить в текушей последовательности
                   tmp.erase(n_end, tmp.end()); // есть ли 5 карт идущих подряд например 2,3,4,5,6, или 7,8,9,10,11
                   
                   n=0; //обнуляем счетчик
                   for(int i=(tmp.size()-2); i>=0; i--){ // ищем в обратном напрвлении что бы найти последовательность из 5 карт со старшей картой
                   if((tmp[i].first+1)==tmp[i+1].first) // если значения соседних карт отличяются на единицу счетчик увеличивается
                   {
                          n++;             
                   }}
                   if(n==5)
                   {
                           points=max_v*100000000; // если найденые карты соотв комбинации флеш + они идут подряд значит это комб стрит-флеш
                           return true; //старшую карту умножаем на 100000000 у старше карта в комбинации тому и принадлежит комбинация
                   }
                   else
                   {
                       flash=true;             //если найденые карты не идут подряд значит это просто флеш тут нужно будет добавить очки
                       return false;
                   }
                   
           }
           else                          // если найдено меньше 3 карт тойже масти что и у игрока значит стрит-флеша и флеша уже не будет
           {
               points=0;
               return false;
           }
     }
     else { str_flash(board, play, points, ++x, flash);} // если масти 2 катр игрока разные вызываем эту же функцию с увеличенным значением Х
  }                                                   //функция должа будет вызватся 2 раза что бы проверить каждую карту игрока на образование комбинации с картами со стола
  else //дальше все по аналогии только для одной карты
  {
     col_card comb(5), tmp(7);
     int max_v=play[x].first, n=0;
     
     
           for(int i=0; i<5; i++)
                if(board[i].second==play[x].second)
                {
                         n++;
                         comb.push_back(board[i]);
                }
           if(n>=4)
           {
                   col_card::iterator n_end;
                   
                   tmp.push_back(play[x]);
                   sort(tmp.begin(), tmp.end(), op);
                   n_end=unique(tmp.begin(), n_end);
                   tmp.erase(n_end, tmp.end());
                   
                   n=0;
                   for(int i=tmp.size()-2; i>=0; i--)
                   if(tmp[i].first+1==tmp[i+1].first)
                   {
                          n++;
                   }
                   if(n==5)
                   {
                           points=max_v*100000000;
                           return true;
                   }
                   else
                   {
                       flash=true;
                       return false;
                   }
                   
           }
           else
           {
               if(++x!=2)
               str_flash(board, play, points, x, flash);
               
               points=0;
               return false;
           }
     }
  }
Добавлено через 6 минут
где весь умный народ бродит?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru