Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737

стрит-флеш

01.08.2013, 22:53. Показов 1527. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал функцию проверки на образование комбинации стрит-флеш....помидорами не закидывать писал не очень вдумчиво но здесь какие то ошибки при использовании алгоритмов STL и моей структуры(я так думаю)
мб и сам алгоритм не правильный...кому не в западло разобраться в моем говнокоде подскажите)) ОШибка в 53 и в 102 строке
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;
           }
     }
  }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.08.2013, 22:53
Ответы с готовыми решениями:

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

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

Реально ли как-то заставить их работать флеш элементы сайтов без флеш-плеера?
Собственно решил отказаться от этой гадости, но некоторые сайты всё таки требуют его для показа содержимого или воспроизведения видео. Хочу...

3
5500 / 4895 / 831
Регистрация: 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
 Аватар для Хулиган
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
02.08.2013, 01:32  [ТС]
только операторы сравнения нужно было добавить?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2013, 01:47
Там только масть, наверное, не нужно сравнивать, то это уже сами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.08.2013, 01:47
Помогаю со студенческими работами здесь

Для браузерной онлайн игры нужны: 1 программист (php+mysql+флеш), 1 дизайнер (флеш,образы,оружие и т.д.)
Приветствую, для браузерной онлайн игры требуются: 1 программист (php+mysql+флеш), 1 дизайнер (флеш, интерфейсный...

3d во флеш
Здравствуйте ! Заинтересовал такой вопрос. Как в браузерных играх реализуется возможность одевать вещи непосредственно на...

Флеш
Вопрос, а поисковики точно не видят ссылок во флеше? Т.е. надо бы наверняка чтоб не видели :)

Флеш плеер
Возможно ли создать некое подобие флеш плеера для телефонов-звонилок не поддерживающих существующие? Если да, то насколько это сложно...

Про флеш
Здравствуйте, подскажите пожалуйста. Есть код флеши со слотами. Вопрос: Как сделать что бы инфа во флеши выводилась? Допустим если в...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. На мобильном - сканируйте QR-код. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru