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

стрит-флеш - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Крестики-нолики http://www.cyberforum.ru/cpp-beginners/thread932278.html
Добрый вечер. Хочу попробовать написать свои крестики-нолики. Игру еще не дописал, но уже появилась следующая проблема. По идее, если я ввожу координаты 1 4 или 2 4, то должно вывести сообщение о...
C++ Глобальные переменные Подскажите пожалуйста, почему данные в глобальной переменной перезаписываются, а не плюсуются? Пример: int peremennaya; void foo(); void main() { char ans; http://www.cyberforum.ru/cpp-beginners/thread932271.html
C++ Не использовать имя класса при его реализации
Из-за того, что не смог грамотно сформулировать свой вопрос, не нашел ничего в гугле :( Поэтому объясню на примере: Допустим, есть некий класс Example, объявление которого заключено в заголовочный...
C++ Указатель,объект класса размещенный в динамической памяти
Ребят,такой маленький нелепый вопрос. Как можно обратиться к объекту класса созданному в динамической памяти(через "new")?; В моей книге описано два способа. Первый ,к примеру вот #include...
C++ Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' http://www.cyberforum.ru/cpp-beginners/thread932257.html
Есть такой файл complex.h #ifndef COMPLEX_H #define COMPLEX_H template<class Type> class complex{ public: Type Re; Type Im; complex(Type re = 0, Type im = 0):Re(re),Im(im){}
C++ Перехват значений параметров шаблона Вопрос, собственно, в развитие этой темы - http://www.cyberforum.ru/cpp-beginners/thread930128.html Есть вот такой код: namespace spec { template <int... Idx> struct index { }; ... подробнее

Показать сообщение отдельно
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2013, 00:48
Кликните здесь для просмотра всего текста
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <vector>
#include <algorithm>
using namespace std;
 
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 operator==(const card& cop)
       {
             if (first == cop.first && second == cop.second)
                 return true;
             else return false;
       }
 
       bool operator>(const card& cop)
       {
             if (first > cop.first && second > cop.second)
                 return true;
             else return false;
       }
 
       bool operator<(const card& cop)
       {
             if (first < cop.first && second < cop.second)
                 return true;
             else return false;
       }
      
};
 
 
bool op(const card& c1, const card& c2)
{
     if (c1.first < c2.first) return true; //критерий сортировки карт
     return false;
}
 
 
typedef vector<card> col_card;
 
bool str_flash(col_card& board, 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;
           }
     }
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru