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

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

Войти
Регистрация
Восстановить пароль
 
Platin
7 / 7 / 5
Регистрация: 29.05.2015
Сообщений: 35
#1

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

04.12.2015, 13:42. Просмотров 428. Ответов 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
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2015, 13:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Кому интересно. Покер (C++):

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

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

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

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

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

интересно - C++
Необходимо разработать программу, в которой выполняется ввод списка записей определенного типа, а затем - обработка списка. Сначала в...

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

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

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

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

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

Это интересно - C++
П.5.18.Правил Запрещено размещать задания и решения в виде картинок и других файлов с их текстом. Редактор формул внизу страницы ...


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

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

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