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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
#1

Моделирование игры в покер - C++

05.03.2012, 03:18. Просмотров 1456. Ответов 2
Метки нет (Все метки)

Недавно начал изучать С++,использую книгу Харви М. Детела Как программировать на С++.В конце одной из глав есть упражнение,в котором нужно смоделировать игру в покер следующим образом. Сначала программа раздаёт 5 карт себе и играющему,затем она должна проанализировать свои карты и решить какие ей менять,а какие нет,после меняет человек и так 2 раза,затем вскрываются карты.При написании программы возникла проблема вот где:для начала я решил нсаписать код так,чтобы программа находила те карты,которые встречаются один раз и меняла лишь их.Для этого ей нужно было заменить эти карты на другие,не встречавшиеся ранее.И наконец проблема:при замене карт у меня случайно выбираются 2 числа по которым определяются масть и достоинство карты,но почему-то выбирается лишь один раз,а затем эи значения присваиваются всем остальным картам,которые заменяются.В итоге все карты,встречающиеся лишь раз,заменяются на одну и ту же.

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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#include<iostream>
using std::cout;
using std::endl;
using std::left; 
using std::right; 
 
#include<iomanip>
using std::setw;
 
#include<cstdlib>
using std::rand;
using std::srand;
 
#include<ctime>
using std::time;
 
#include"DeckOfCards.h"
 
static const char* SUIT[] = {"Hearts","Diamonds","Clubs","Spades"};
 
static const char* FACE[] = {"Ace","Deuce","Three","Four","Five","Six","Seven","Eight",
        "Nine","Ten","Jack","Queen","King"};
 
DeckOfCards::DeckOfCards()
{
    for(int row = 0;row < 4;row++)
    {
        for(int column = 0;column < 13;column++)
        {
            deck[row][column] = 0;
        }
    }
 
    srand(time(0));
}
 
void DeckOfCards::shuffle()//каждой карте ставится в соответствие число от 1 до 52
{
    int row, column;
 
    for(int card = 1;card <= 52;card++)
    {
        do
        {
            row = rand()%4;
            column = rand()%13;
        }
        while(deck[row][column] != 0);
        
        deck[row][column] = card;
    }
}
 
void DeckOfCards::deal()//раздача карт
{
    int card[5] = {0};
    int counter = 0;
    int Card;
    int Suit[5]={0};
    int Face[5]={0};
 
    while(counter < 5)
{
    srand(time(0));
    Card = 1 + rand()%52;
    if(check(card,Card))
{
    for(int row = 0;row < 4;row++)
            for(int column = 0;column < 13;column++)
            
                if(deck[row][column] == Card)
                {
                cout << setw(5) << right << FACE[column] << " of " << setw(8) << left 
                << SUIT[row] << "\n" ;
                static int c = 0;
                Suit[c] = row;
                Face[c] = column;
                cout << Suit [c] << "\t" << Face[c] << endl;
                c++;
                }
                
    card[counter] = Card;
    counter++;
}
 
}
 
comparation(Suit, Face);
}
 
bool DeckOfCards::check(int number[5],int card)//вспомагательная программа
{
int a = 0;
for (int i = 0;i < 5;i++ )
  if(number[i]==card)
    a++;
 
if(a == 0)
return 1;
else
return 0;
 
}
 
void DeckOfCards::comparation(int suit[5],int face[5])//здесь-то и ошибка
{
int fCounter[5] = {1,1,1,1,1};
int s[5] = {0};
int F[5] = {-1,-1,-1,-1,-1};
int Deck[5][2]={0};
int suitCpy[5] = {0};
int faceCpy[5] = {0};
int card[5][2];
 
cout << endl;
 
for(int i = 0;i < 5;i++)
{
    Deck[i][0] = -1;
    Deck[i][1] = -1;
    card[i][0] = -1;
    card[i][1] = -1;
}
 
for(int  i = 0;i < 5;i++)
    {
        faceCpy[i] = face[i];//создаю копию переданных функции значений
        suitCpy[i] = suit[i];
    }
 
for(int i = 0;i < 5;i++)//нахожу повторяющиеся карты
{
    int a = 0;
    if(i != 0)
        for(int j = 0;j <= i -1;j++)
            if(face[j]==face[i])
                a++;
 
    if(a == 0)
    {
        F[i]= face[i];
        for(int k = i+1;k < 5;k++)
            if(face[i]==face[k])
                fCounter[i]++;
    }
}
 
for(int i = 0;i < 5;i++)//в первом стобце хранятся значения карт,определяющиеся достоинство
{//во втором их количество в розданных картах
    if(F[i] != -1)
    {
        Deck[i][0] = F[i];
        Deck[i][1] = fCounter[i];
    }
}
for(int i = 0;i < 5;i++)
{
    srand(time(0));
    if(Deck[i][1] == 1)//если карта встречается лишь один раз
    {
        for(int j = 0;j < 5;j++)
        {
            if(Deck[i][0] == face[j])//находим эту карту в передаваемом массиве
            {
                int row = 0;
                int column = 0;
                int a = 0;
                
            row = rand()%4;//определяю новое значение масти
            column = rand()%13;//определяю новое значение достоинства
            
            cout << "column = " << column << endl << "row = " << row << endl;
            for(int s = 0;s < 5;s++)//проверка на случай,если выбрана карта,которая уже была роздана
            if((column == faceCpy[s])&&(row == suitCpy[s]))
                a++;
while(a != 0)
        {
            cout << "a != 0\n";
            int g = 0;
            cout << endl;
        srand(time(0));
        row = rand()%4;
        column = rand()%13;
        cout << "column = " << column << endl << "row = " << row << endl;
        for(int s = 0;s < 5;s++)
        {
            if((column == faceCpy[s])&&(row == suitCpy[s]))
            {
                ++g;
                a = g;
                cout << "a1 = " << a << endl;
            }
}
        }
            
            face[j] = column;//собственно присваивание новых значений
            suit[j] = row;
        }
    }
}
 
}
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2012, 03:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Моделирование игры в покер (C++):

Программа для игры в покер - C++
Никак не могу понять суть ооп. До прихода в с++ програмировал на С микроконтроллеры. Там всё просто. Есть начало программы, и пишеш...

Исходники игры "Покер" - C++
Срочно нужны исходники &quot;Покера&quot; или &quot;21-Очко&quot;. Буду очень благодарен за помощь.

Программа-бот для игры в покер. - C++
Здравствуйте. Сам я будующий программист, учусь на 2 курсе, потихоньку осваиваю С++. У меня вопрос к уже сложившимся и опытным...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
05.03.2012, 19:20 #2
Хорошо бы было бы, если бы ты выложил весь исходник( тут даже функции main нет ) это раз. И два, настоятельно советую зайти в главу Упражнения этой части книги. Там описан гораздо более эффективный алгоритм перетасовки карт
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
06.03.2012, 03:03  [ТС] #3
это в упражнениях и было
я разбил программу на 2 файла cpp и 1 заголовочный
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2012, 03:03
Привет! Вот еще темы с ответами:

Задача Покер - C++
Даны 5 целых чисел. Среди них: если одинаковы 5, то вывести &quot;Impossible&quot;, иначе если одинаковы 4, то вывести &quot;Four of a Kind&quot;, иначе ...

Задача Покер - C++
Даны 5 целых чисел. Среди них: если одинаковы 5, то вывести &quot;Impossible&quot;, иначе если одинаковы 4, то вывести &quot;Four of a Kind&quot;, иначе ...

Графический покер - C++
Доброго времени суток всем. Вот, немного запутался.... Есть игра покер...Нужно ее реализовать в упрощенном виде. Есть изображения...

Кому интересно. Покер - C++
Вообщем, давно ничего не кодил и на днях накатал немного говно кода на тему Покера. Кому будет интересно, посмотрите и предложите если...


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

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

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