Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/56: Рейтинг темы: голосов - 56, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 08.07.2016
Сообщений: 40

Перекод кода игры Покер с С++ на C#

08.07.2016, 18:39. Показов 11826. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я разрабатываю (громко сказано) свою карточную игру покер. В интернете нашёл код этой игры на С++ для консоли. Помогите пожалуйста перевести его на C#. С уважением. Код поделён на два поста, так как слишком большой.

Часть 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
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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
string suits[4];
string ranks[13];
 
class Card {
public:
    int suit;
    int rank;
};
 
int compareCards(const void *card1, const void *card2) {
    return (*(Card *)card1).rank - (*(Card *)card2).rank;
}
 
class Deck {
public:
    Deck() {
        for (int i = 0;i<4;i++) {
            for (int j = 0;j<13;j++) {
                cards[i * 13 + j].suit = i;
                cards[i * 13 + j].rank = j;
            }
        }
        suits[0] = "D";
        suits[1] = "S";
        suits[2] = "H";
        suits[3] = "C";
        ranks[0] = "2";
        ranks[1] = "3";
        ranks[2] = "4";
        ranks[3] = "5";
        ranks[4] = "6";
        ranks[5] = "7";
        ranks[6] = "8";
        ranks[7] = "9";
        ranks[8] = "T";
        ranks[9] = "J";
        ranks[10] = "Q";
        ranks[11] = "K";
        ranks[12] = "A";
    }
 
    void print() {
        cout << "Printing the deck..." << endl;
        for (int i = 0;i<52;i++)
            cout << ranks[cards[i].rank] << suits[cards[i].suit] << endl;
        cout << endl;
    }
 
    void shuffle() {
        top = 51;
        int x;
        Card tempCard;
        for (int i = 0;i<4;i++) {
            for (int j = 0;j<13;j++) {
                cards[i * 13 + j].suit = i;
                cards[i * 13 + j].rank = j;
            }
        }
        cout << "Shuffling the cards and dealing..." << endl << endl;
        for (int i = 0;i<52;i++) {
            x = rand() % 52;
            tempCard = cards[i];
            cards[i] = cards[x];
            cards[x] = tempCard;
        }
    }
 
    Card hitme() {
        top--;
        return cards[top + 1];
    }
 
private:
    int top;
    Card cards[52];
};
 
class Player {
public:
    string name;
    int money;
    Card cards[2];
    int playing;
    int round;
    int goodToGo;
};
 
class PokerGame {
public:
    void start(string name) {
        for (int i = 0;i < 6; i++) {
            players[i].money = 1000;
            players[i].playing = 1;
        }
        players[0].name = "Carlos";
        players[1].name = "Carla";
        players[2].name = "Nick";
        players[3].name = "Lisa";
        players[4].name = name;
        players[5].name = "Soarez";
        startGame();
    }
 
 
    void deal() {
        for (int i = 0;i<6;i++) {
            for (int j = 0;j<2;j++) {
                if (players[i].playing) {
                    players[i].cards[j] = deck1.hitme();
                }
            }
        }
        for (int i = 0;i<5;i++)
            tableCards[i].rank = -1;
    }
 
    void flop() {
        for (int i = 0;i<3;i++)
            tableCards[i] = deck1.hitme();
    }
 
    void turn() {
        tableCards[3] = deck1.hitme();
    }
 
    void river() {
        tableCards[4] = deck1.hitme();
    }
 
    void printTable() {
        cout << "  " << ((players[0].playing) ? (players[0].name) : "      ") << "         " << ((players[1].playing) ? (players[1].name) : "     ") << "           "
            << ((players[2].playing) ? (players[2].name) : "    ") << endl;
        cout << "   $" << setw(4) << ((players[0].playing) ? (players[0].money) : 0) << "         $" << setw(4) << ((players[1].playing) ? (players[1].money) : 0)
            << "           $" << setw(4) << ((players[2].playing) ? (players[2].money) : 0) << endl;
        cout << "     _____________________________" << endl;
        cout << "    / " << ((bind == 0) ? "@" : " ") << "            " << ((bind == 1) ? "@" : " ") << "            " << ((bind == 2) ? "@" : " ") << " " << endl;
        cout << "   /  ___   ___   ___   ___   ___  " << endl;
        cout << "   | | " << ((tableCards[0].rank) >= 0 ? ranks[tableCards[0].rank] : " ") << " | | " << ((tableCards[1].rank) >= 0 ? ranks[tableCards[1].rank] : " ") << " | | " << ((tableCards[2].rank) >= 0 ? ranks[tableCards[2].rank] : " ") << " | | "
            << ((tableCards[3].rank) >= 0 ? ranks[tableCards[3].rank] : " ") << " | | " << ((tableCards[4].rank) >= 0 ? ranks[tableCards[4].rank] : " ") << " | |" << endl;
        cout << "   | | " << ((tableCards[0].rank) >= 0 ? suits[tableCards[0].suit] : " ") << " | | " << ((tableCards[1].rank) >= 0 ? suits[tableCards[1].suit] : " ") << " | | " << ((tableCards[2].rank) >= 0 ? suits[tableCards[2].suit] : " ") << " | | "
            << ((tableCards[3].rank) >= 0 ? suits[tableCards[3].suit] : " ") << " | | " << ((tableCards[4].rank) >= 0 ? suits[tableCards[4].suit] : " ") << " | |" << endl;
        cout << "   | |___| |___| |___| |___| |___| |" << endl;
        cout << "   |                               |" << endl;
        cout << "   |          Pot = $" << setw(4) << pot << "         |" << endl;
        cout << "   \\                               /" << endl;
        cout << "    \\_" << ((bind == 5) ? "@" : "_") << "_____________" << ((bind == 4) ? "@" : "_") << "___________" << ((bind == 3) ? "@" : "_") << "_/" << endl;
        cout << endl;
        cout << "  " << ((players[5].playing) ? (players[5].name) : "      ") << "          " << ((players[4].playing) ? (players[4].name) : "      ") << "         "
            << ((players[3].playing) ? (players[3].name) : "    ") << endl;
        cout << "   $" << setw(4) << ((players[5].playing) ? (players[5].money) : 0) << "          $" << setw(4) << ((players[4].playing) ? (players[4].money) : 0)
            << "         $" << setw(4) << ((players[3].playing) ? (players[3].money) : 0) << endl;
        cout << endl;
        if (players[4].round) {
            cout << "   Your hand:" << endl;
            cout << "    ___    ___" << endl;
            cout << "   | " << ranks[players[4].cards[0].rank] << " |  | " << ranks[players[4].cards[1].rank] << " |" << endl;
            cout << "   | " << suits[players[4].cards[0].suit] << " |  | " << suits[players[4].cards[1].suit] << " |" << endl;
            cout << "   |___|  |___|" << endl << endl;
        }
    }
 
private:
    Player players[6];
    Deck deck1;
    int bind;
    Card tableCards[5];
    int pot, action, bet, rational, betOn, winner, maxPoints, roundWinner;
    int handPoints[6];
    int bestHand[6][3];
 
    int playersLeft() {
        int count = 0;
        for (int i = 0; i < 6; i++)
            if (players[i].money>0)
                count++;
        return count;
    }
 
    int computerAction(int playerNum) {
        if (players[playerNum].cards[0].rank < 8 && players[playerNum].cards[1].rank < 8) {
            if (players[playerNum].cards[0].rank != players[playerNum].cards[1].rank)
                return 0;
            else
                return 1;
        }
 
        else if (players[playerNum].cards[0].rank < 10 && players[playerNum].cards[1].rank < 10) {
            if (players[playerNum].cards[0].rank != players[playerNum].cards[1].rank)
                return 1;
            else
                return 2;
        }
        else {
            return 2;
        }
    }
 
    /*checks if someone still got bet/call*/
    int playersToBet() {
        for (int i = 0;i<6;i++)
            if (players[i].round == 1 && players[i].goodToGo == 0)
                return 1;
 
        return 0;
    }
 
    void takeBets() {
        betOn = 0;
        for (int k = 0;k<6;k++)
            players[k].goodToGo = 0;
 
        for (int k = bind + 1;k<bind + 7;k++) {
            /* human player actions */
            if (k % 6 == 4 && players[4].round) {
                if (betOn) {
                    cout << "Your action: (1) FLOP (3) BET/CALL ";
                    cin >> action;
                    while (action != 1 && action != 3) {
                        cout << "Invalid number pressed." << endl;
                        cout << "Your action: (1) FLOP (3) BET/CALL ";
                        cin >> action;
                    }
                }
                else {
                    cout << "Your action: (1) FLOP (2) CHECK (3) BET/CALL ";
                    cin >> action;
                    while (action<1 || action>3) {
                        cout << "Invalid number pressed." << endl;
                        cout << "Your action: (1) FLOP (2) CHECK (3) BET/CALL ";
                        cin >> action;
                    }
                }
                cout << endl;
                if (action == 1)
                    players[4].round = 0;
                else if (action == 2)
                    continue;
                else {
                    if (betOn) {
                        pot += betOn;
                        players[4].money -= betOn;
                        players[4].goodToGo = 1;
                    }
                    else {
                        cout << "How much do you want to bet: ";
                        cin >> bet;
                        while (bet>players[4].money || bet<1) {
                            cout << "Invalid number to bet." << endl;
                            cout << "How much do you want to bet: ";
                            cin >> bet;
                            cout << endl << endl;
                        }
                        pot += bet;
                        players[4].money -= bet;
                        betOn = bet;
                        players[4].goodToGo = 1;
                    }
                }
            }
 
// РАЗДЕЛЕНИЕ
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.07.2016, 18:39
Ответы с готовыми решениями:

Моделирование игры в покер
Недавно начал изучать С++,использую книгу Харви М. Детела Как программировать на С++.В конце одной из глав есть упражнение,в котором нужно...

Реализация покер игры
Всем привет! Хочу сделать консольную мини-игру &quot;покер&quot;. Начало игры (тасовка колоды, раздача карт игрокам) примерно знаю как сделать,...

ИИ для игры в покер
Здравствуйте. Подскажите, насколько реально и сложно написать ИИ бота для игры в покер, имеется в ввиду простейшее приложение где человек...

47
 Аватар для irises
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
27.07.2016, 11:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Native15 Посмотреть сообщение
Не удаётся неявно преобразоваться строку в целочисленную.
Ошибка уже все сказала: она не может преобразовать string (ranks[a] и suits[b]) в int.
Вы поправили класс Card?
0
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
27.07.2016, 15:22
Нет пока.

Добавлено через 10 секунд
Я не понимаю логику.

Добавлено через 32 секунды
Я читаю книгу и там много информации, а вот применить её я не знаю как.

Добавлено через 22 минуты
И ещё. В оригинальном С++ коде, я не могу запустить программу. Пишет, что код устарел. Ошибок нигде нет, но не запускается. Точнее ошибки найдены, но в самой программе их не показывают.
0
 Аватар для irises
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
27.07.2016, 15:53
Цитата Сообщение от Native15 Посмотреть сообщение
Нет пока.
Пока Вы не поправите класс Card у Вас будут ошибки, что не удается преобразовать строку в целочисленную (получается Вы хотите string записать в int, а нам нужно записать string в string).

Цитата Сообщение от Native15 Посмотреть сообщение
В оригинальном С++ коде, я не могу запустить программу. Пишет, что код устарел. Ошибок нигде нет, но не запускается. Точнее ошибки найдены, но в самой программе их не показывают.
Я скопировала код и у меня все запустилось. Вы создали пустой консольный проект?
1
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
27.07.2016, 16:01
Так нет. Я уже делал, как Вы показали, но выдало ошибку. Я оставил как прежде.

Да пустой консольный. Ладно, значит ошибка у меня.
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,103
Записей в блоге: 243
27.07.2016, 16:48
Цитата Сообщение от Native15 Посмотреть сообщение
Так нет. Я уже делал, как Вы показали, но выдало ошибку. Я оставил как прежде.
Я может неправильно понял о чём речь, я скопировал код из сообщения #39 и у меня программа работает - выводит информацию о картах в столбик:

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
using System;
 
namespace Poker
{
    public class Card
    {
        public string Rank;
        public string Suit;
        public int Point; //старшинство карты
    }
 
    public class Deck
    {
        public Card[] cards = new Card[52];
 
        public Deck()
        {
            string[] ranks = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
            string[] suits = { "c", "h", "s", "d" };
            for (int a = 0; a < 13; a++)
            {
                for (int b = 0; b < 4; b++)
                {
                    cards[b * 13 + a] = new Card();
                    cards[b * 13 + a].Rank = ranks[a];
                    cards[b * 13 + a].Suit = suits[b];
                    cards[b * 13 + a].Point = a + 1;
                }
            }
 
        }
 
        public void ShuffleDeck()
        {
            Card tempcard;
            Random rand = new Random();
            for (int a = 0; a < 52; a++)
            {
                int x = rand.Next(0, 52);
                tempcard = cards[a];
                cards[a] = cards[x];
                cards[x] = tempcard;
            }
        }
 
        public void PrintCards()
        {
            for (int i = 0; i < 52; i++)
            {
                Console.WriteLine(cards[i].Rank + " " + cards[i].Suit + " " + cards[i].Point);
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Deck deck = new Deck();
            deck.PrintCards();
 
            // Delay
            Console.ReadKey();
        }
    }
}
1
0 / 0 / 2
Регистрация: 17.07.2016
Сообщений: 28
27.07.2016, 17:00
8Observer8, спасибо. Я попробую.

Добавлено через 4 минуты
Работает. Я просто не знаю насколько это правильно с точки зрения будущих вычислений комбинаций.

Добавлено через 1 минуту
Не работало только тогда, когда были отдельные классы.
0
 Аватар для irises
140 / 72 / 26
Регистрация: 29.06.2015
Сообщений: 186
29.07.2016, 10:51
Цитата Сообщение от Native15 Посмотреть сообщение
Я просто не знаю насколько это правильно с точки зрения будущих вычислений комбинаций.
Просмотрите весь код, чтоб это решить.
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,103
Записей в блоге: 243
29.07.2016, 11:34
Espiond82, я прикрепил готовый проект. Нашёл вот здесь: Poker logic in C#
Вложения
Тип файла: zip PokerYT.zip (57.4 Кб, 14 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2016, 11:34

Обсуждение карточной игры покер
Народ, у меня такой вопрос, а на этом сайте кто нибудь умееи играть в покер?

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

Клиент-сервер для игры покер
Всем доброго времени суток, задача написать клиент-сервер и GUI приложение для игры в покер 1х1, подскажите где копать, какие библиотеки...

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

Советы по оптимизация реализации игры в покер
Добрый день. Сначала чуть предыстории. Сложилось так, что изучать программирование я могу только в свободное время самостоятельно. Изучаю...


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

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Новые блоги и статьи
Жара жесть.
kumehtar 18.08.2026
Пролетают летом дни Тридцать пять жары в тени. Каждый август год от года Дарит жаркую погоду.
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru