|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - BlackJack |
|
|
C/C++ - BlackJack
|
Новый участник Сообщения: 17 |
Здравствуйте! Пытаюсь реализовать игру Блэк Джэк. Создаю колоду, тусую. Вопрос вот в чем как организовать выдачу карт с извлечением их из колоды(тобишь чтобы они были на руках но в калоде не числились)))...
//Card.h #include <iostream> #include <string.h> using namespace std; enum Suit {clubs, diamonds, hearts, spades}; class Card{ private: Suit suit; int face; public: Card(); void setCard(int, Suit); void PrintCard(); void setScore(); }; //Card.cpp #include <iostream> #include "Card.h" using namespace std; Card::Card(){ this->face = 0; this->suit = (Suit)0; } void Card::setCard(int f, Suit s){ this->face = f; this->suit = s; } void Card::PrintCard(){ if (face >= 2 && face <= 10) cout << face; else{ switch (face){ case 11: cout << 'J'; break; case 12: cout << 'Q'; break; case 13: cout << 'K'; break; case 14: cout << 'A'; break; } } switch (suit) { case clubs: cout << static_cast<char>(5); break; case diamonds: cout << static_cast<char>(4); break; case hearts: cout << static_cast<char>(3); break; case spades: cout << static_cast<char>(6); break; } } //CardBatch.h #include <iostream> #include "Card.h" class Card_Batch{ Card* cards; public: Card_Batch(); void setCard_Batch(); void Shuffle(); void display(); void getcard(); // Тест... для извлечения карты в этом классе временно }; //CardBatch.cpp #include <iostream> #include "CardBatch.h" #include <ctime> using namespace std; Card_Batch::Card_Batch(){ const int size = 52; // this->score = 0; cards = new Card[size]; } //Создание колоды карт void Card_Batch::setCard_Batch(){ for(int i = 0; i < 52; i++){ int f = (i%13) + 2; Suit s = Suit(i/13); cards[i].setCard(f, s); } } //Тусуется колода карт void Card_Batch::Shuffle(){ srand (unsigned(time(NULL))); for(int i = 0; i < 52; i++){ int k = rand()%52; //выбираем случайную карту Card temp = cards[i]; //и меняем ее с текущей cards[i] = cards[k]; cards[k] = temp; } } void Card_Batch::display(){ for (int i = 0; i < 52; i++ ){ cards[i].PrintCard(); if(!((i+1)%13)) // начинаем новую строку после каждой 13-й карты cout << endl; } cout << "\n\n\n"; } void Card_Batch::getcard(){ for(int i = 0; i < 2; i++) cards[i].PrintCard(); } |
|
Отправлено: 00:27, 10-01-2013 |
Необычный Сообщения: 4465
|
Профиль | Сайт | Отправить PM | Цитировать SAU-trade, можно тебя попросить прикрепить проект?
Цитата SAU-trade:
Ну хорошо, не списки, массивы. Организовать дополнительное поле в массиве колоды карт с номером игрока(1-10), выбывшей картой(99),не разыгранной картой(0). |
|
------- Отправлено: 08:54, 10-01-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 121
|
Профиль | Отправить PM | Цитировать Цитата SAU-trade:
Цитата SAU-trade:
Если я что то неправильно понял, то выкладывайте файлы проекта и правила игры. |
||
Отправлено: 09:24, 10-01-2013 | #3 |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать SAU-trade, я не стал сильно вникать в код. Когда-то давно я писал что-то подобное. И для карт я сделал класс объектов (или структуру) поля которого содержали следующее:
- масть - вес (2-10, J, Q, K, A, Joker) - местонахождение карты (колода, стол, игрок 1, игрок 2 и т.д.) Создавал в цикле колоду карт (а именно массив объектов вышестоящего класса), перемешивал её (но алгоритм я тогда какой-то жудко мудрёный придумал со сторонним генератором случайных чисел). Создавал игроков. Раздавал карты в нужной последовательности. Исходя из своих карт и карт на столе просчитывал вероятности выпадения той или иной комбинации (пара, тройка,флеш и т.д.). По идее ещё нужно было просчитывать возможные комбинации у партнёров по игре и следить за ставками, но до этого руки так и не дошли. |
------- Отправлено: 09:49, 10-01-2013 | #4 |
Новый участник Сообщения: 17
|
Профиль | Отправить PM | Цитировать Да реализация колоды и ее перемешивания реализованы.. Я пробЫвал циклом for вытаскивать две карты - вытаскивает, ток я не знаю как сделать чтобы они из колоды выходили... Так как получается что следующие две карты выходят те же))
Правила просты: каждому игроку вначале выдается по две карты... Идет проверка выпало ли кому 21 очко.. Если нет - первый игрок решает добрать карту или нет... Если да опять проверка больше/меньше 21? и т.д. Если выбор не добирать -- компьютер выбирает добрать карту или стоять... Если стоять, тогда сравниваются очки у двух игроков и выигрывает у кого больше) |
|
Отправлено: 10:14, 10-01-2013 | #5 |
Новый участник Сообщения: 17
|
Профиль | Отправить PM | Цитировать Результат работы
|
Отправлено: 10:20, 10-01-2013 | #6 |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать Цитата SAU-trade:
Что вы понимаете под фразой вытаскивать? К примеру у вас есть массив колоды, и если вы "вытаскиваете" карту, то есть несколько вариантов: или ввести поле указывающее на расположение этой карты (колода, игрок1, игрок2 и т.д.), или просто перенести этотот объект (карту) в другой массив - массив набора карт игрока (состоящий из 2-х элементов). Соответственно у вас будет массив колоды с пустыми элементами, потом его можно переопределить, чтобы убрать эти пустые элементы. Цитата SAU-trade:
![]() |
||
------- Отправлено: 11:27, 10-01-2013 | #7 |
Новый участник Сообщения: 17
|
Профиль | Отправить PM | Цитировать Цитата Tonny_Bennet:
Цитата Tonny_Bennet:
Хочу перенести карты которые вытаскиваются из колоды в масив набора карт игрока. Вы писали что можно определить карте место положения - очень хороший совет спс... |
||
Отправлено: 12:51, 10-01-2013 | #8 |
Пользователь Сообщения: 121
|
Профиль | Отправить PM | Цитировать Цитата SAU-trade:
Но зачем все это, если можно просто взять следующие элеметы. Всего лишь введите в свойства класса номер верхней карты в колоде и используйте в качестве первого элемента индекса. class Card_Batch{ private: Card* cards; int nTopCard; public: Card_Batch(); void setCard_Batch(); void Shuffle(); void display(); void getcard(); }; Card_Batch::Card_Batch(){ const int size = 52; // this->score = 0; nTopCard = 0; cards = new Card[size]; } |
|
Отправлено: 12:59, 10-01-2013 | #9 |
Новый участник Сообщения: 17
|
Профиль | Отправить PM | Цитировать Огромное спс)) Когда доделаю выложу все сюда))
|
Отправлено: 15:02, 10-01-2013 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
|