Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Platin
7 / 7 / 10
Регистрация: 29.05.2015
Сообщений: 35
1

Кому интересно. Покер

04.12.2015, 13:42. Просмотров 495. Ответов 1
Метки нет (Все метки)

Вообщем, давно ничего не кодил и на днях накатал немного говно кода на тему Покера.
Кому будет интересно, посмотрите и предложите если есть свои варианты и идеи.
Есть проблемы с реализацией Стрита и Флеша в данной задумке, и пока что идей никаких.
Вообщем, буду рад если оцените и покритикуете.
Спасибо!
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
#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <iostream>
 
 
using namespace std;
 
int score = 0; // глобальная переменная для подсчета очков в комбинации
 
int sravn2(int hand_i[5])  // функция сравнения по основному массиву карт на наличие карт в руке одного достоинства + подсчет очков в комбинации
{
    int count = 0;
 
    for (int i = 0; i < 5; i++)
    {
        for (int j = i; j < 5; j++)
        {   
            if ((hand_i[i] >= 0 && hand_i[i] <= 12) && (hand_i[i] + 13 == hand_i[j + 1] || hand_i[i] + 26 == hand_i[j + 1] || hand_i[i] + 39 == hand_i[j + 1])) { count++; score =+ hand_i[i]; }
            if ((hand_i[i] >= 13 && hand_i[i] <= 25) && (hand_i[i] + 13 == hand_i[j + 1] || hand_i[i] + 26 == hand_i[j + 1] || hand_i[i] - 13 == hand_i[j + 1])) { count++; score =+ hand_i[i]; }
            if ((hand_i[i] >= 26 && hand_i[i] <= 38) && (hand_i[i] + 13 == hand_i[j + 1] || hand_i[i] - 26 == hand_i[j + 1] || hand_i[i] - 13 == hand_i[j + 1])) { count++; score =+ hand_i[i]; }
            if (hand_i[i] >= 39 && (hand_i[i] - 13 == hand_i[j + 1] || hand_i[i] - 26 == hand_i[j + 1] || hand_i[i] - 39 == hand_i[j + 1])) { count++; score =+ hand_i[i]; }
        }
    }
    return count;
}
 
void result(int count) // функция вывода комбинации, не работает для СТРИТА и ФЛЕША
{
    if (count == 1) cout << "У вас пара!" << endl;// пара
    else if (count == 2) cout << "У вас две пары!" << endl;// две пары
    else if (count == 3) cout << "У вас тройка!" << endl;// тройка
    else if (count == 4) cout << "У вас фуллхаус!" << endl;// фулхаус
    else if (count == 6) cout << "Каре!" << endl;// карэ
    //else if (count == 10) cout << "Poker FAce!" << endl;
    else if (count == 0) cout << "Нет комбинаций!" << endl;// нет комбинаций
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    bool check = false;
    bool write = false; // переменные для проверки
    int temp = 0;
    int ch = 0;        //  тип комбинации игрока2
    int ch_tmp = 0; // тип комбинации игрока1
    int score_1 = 0; // счет игрока1
    int score_2 = 0; // счет игрока2   используются если тип комбинации у игроков одинаковый
    int anykey;
    const char *s[] = { "2к", "3к","4к","5к","6к","7к","8к","9к","10к","Jк","Qк","Kк","Aк",
                        "2п","3п","4п","5п","6п","7п","8п","9п","10п","Jп","Qп","Kп","Aп",
                        "2ч","3ч","4ч","5ч","6ч","7ч","8ч","9ч","10ч","Jч","Qч","Kч","Aч",
                        "2б","3б","4б","5б","6б","7б","8б","9б","10б","Jб","Qб","Kб","Aб" }; // основной массив всех карт
    
    const char* hand2[5];// = { '0','0','0','0','0' };
        
    const char* stack[52]; // перегон массива (уже не помню почему так сделал ))))
    
    for (int i = 0; i < 52; i++)
    {
        stack[i] = s[i];    
    }
        
    srand(time(0));
    while (!check)
    {
        int hand_i[10] = { 53,53,53,53,53,53,53,53,53,53 }; // массив всех выпавших карт на руках игроков - первые пять игрок1, с 5 по 10 игрок2
        int control = 0;
        while (control != 2) //!check
        {
            if (control == 0) cout << "Карты игрока №1" << endl;
            else cout << "Карты игрока №2" << endl;
 
            for (int i = 0; i < 5; i++)
            {
                write = true;
                temp = rand() % 50 + 2; // сдаем карту с колоды
                for (int j = 0; j < 5; j++)
                {
                    if (temp == hand_i[j] || temp == hand_i[5 + j]) { i--; write = false; }// если карта совпала при раздаче, делаем откат и раздаем заново последнюю выданную карту
                }
                if (write)
                {
                    if (control == 0) hand_i[i] = temp; // записываем номер карты по основному массиву для дальнейшего сравнения
                    else hand_i[5 + i] = temp;
                    hand2[i] = stack[temp]; // формируем руку игрока и выводим результат
                    cout << hand2[i] << " ";
                }
            }
            cout << endl;
 
            if (control == 0)
            {
                result(ch = (sravn2(hand_i))); // ch хранит результат count из функи sravn2 т.е. тип комбинации игрока 1
                ch_tmp = ch; //переменная временного результа Первого игрока
                score_1 = score; // очки за карты
            }
            if (control != 0) { result(ch = (sravn2(hand_i + 5))); score_2 = score; } // здесь тоже самое только для игрока 2
 
            if (control != 0)
            {
                if (ch_tmp > ch) cout << "Победитель Игрок №1!" << endl; // проверка промежуточного рез-а или сравнен типов комбинаций
                else if (ch_tmp == ch && ch != 0)  // если равны значит у обоих игроков одинаковый тип комбинации - далее сравнение по очкам
                {
                    if (score_1 > score_2) cout << "Победитель Игрок №1!" << endl; // далее сравнение по очкам
                    else cout << "Победитель Игрок №2!" << endl;
                }
                else if (ch != 0) cout << "Победитель Игрок №2!" << endl;
                else cout << "НИЧЬЯ!" << endl; // если нет комбинаций у обоих игроков - то Ничья
            }
            // неверно будет считать результат для карт одного достоинства, допустим у игрока1 и игрока2 по паре дам, программа покажет победителя у кого выпала буби или черви
            
            control++;
            
        }
        cin >> anykey;
        if (anykey == 0) check = true; // для выхода из программы вводим 0
    }
 
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2015, 13:42
Ответы с готовыми решениями:

Кому интересно поломать голову
Привет! Сейчас на работе думал с ума схожу - есть код, который (с виду)...

Бинарные деревья ! кому интересно , сюда!;)
задание : Описать процедуру или функцию которая : а) печатает запись,...

прога странно работает=) кому интересно покопать?
написал прогу по подсчету crc-16 (сама функция с википедии).. так вот... когда...

Шифрование "Лозунговым методом" (кому интересно)
Вот работа была сделал -&gt; делюсь:) #include &lt;stdio.h&gt; #include...

В чем интересно загвоздка???интересно разобраться!
Помогите разобраться в чем дело? Switch постоянно зацикливается и бесконечный...

1
nonedark2008
1061 / 793 / 223
Регистрация: 28.07.2012
Сообщений: 2,213
04.12.2015, 13:49 2
Platin, создаешь класс "Карта", создаешь класс "Рука", который может содержать некоторый набор карт,
также создаешь метод, который оценивает "силу руки".
Создаешь метод "Колода карт", из которого можно случайным образом извлечь карту и впихнуть ее в руку и т.д.

Создавая постоянно громоздкое си-подобное нечто, ты ничему не научишься, нужно двигаться дальше.
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2015, 13:49

Покер
Прошу помощи. Болел - ничего не понял. Скоро экзамен, а я ничего не понимаю в...

Покер
Хочу написать простенькую покерную программу на с++. Нужна помощь с...

Покер
Подскажите пожалуста где ошибка??????:help: компилятор выдает ошибки ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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