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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.03.2012, 03:18     Моделирование игры в покер #1
Недавно начал изучать С++,использую книгу Харви М. Детела Как программировать на С++.В конце одной из глав есть упражнение,в котором нужно смоделировать игру в покер следующим образом. Сначала программа раздаёт 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++ Исходники игры "Покер"
Программа для игры в покер C++
Покер C++
Покер C++
C++ Графический покер
C++ Покер

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
05.03.2012, 19:20     Моделирование игры в покер #2
Хорошо бы было бы, если бы ты выложил весь исходник( тут даже функции main нет ) это раз. И два, настоятельно советую зайти в главу Упражнения этой части книги. Там описан гораздо более эффективный алгоритм перетасовки карт
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
06.03.2012, 03:03  [ТС]     Моделирование игры в покер #3
это в упражнениях и было
я разбил программу на 2 файла cpp и 1 заголовочный
Yandex
Объявления
06.03.2012, 03:03     Моделирование игры в покер
Ответ Создать тему
Опции темы

Текущее время: 22:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru