• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Blackjack

  • Автор темы fuzzyduzzy
  • Дата начала
F

fuzzyduzzy

Здравствуйте! Задание написать игру Блэк Джек). Я реализовал создание колоды тусовку и чтобы карты выпадали по порядку. Проблема в раздаче карт игроку и дилеру (Может нужен еще какой то блок?).

Подскажите плиз как решить данную проблему... Возможно кто то даст совет по оптимизации.
Код:
//CARD_H
#include <iostream>
#ifndef CARD_H
#define CARD_H

using namespace std;

enum Suit {clubs, diamonds, hearts, spades};

class Card{
private:
Suit suit;
int face;
int points;
public:
Card();
void setCard(int, Suit);
void PrintCard();
void setPoints(int);
};
#endif CARD_H

Код:
//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;
}
//cout << "\n\n";
}

Код:
//CARDBATCH_H
#include <iostream>
#include "Card.h"
#ifndef CARDBATCH_H
#define CARDBATCH_H

class Card_Batch{
Card* cards;
int count;
//	int nTopCard;
public:
Card_Batch();
void setCard_Batch();
void Shuffle(); 
void display(); // Для проверки
void AddCard();
void Shell();
~Card_Batch();
};
#endif CARDBATCH_H

Код:
//CARDBATCH.cpp
#include <iostream>
#include "CardBatch.h"
#include <ctime>

using namespace std;

Card_Batch::Card_Batch(){
const int size = 52;
count = 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::AddCard(){
for(int i = count; i < count + 1; i++)
cards[i].PrintCard();
count++;
}

void Card_Batch::Shell(){
count = 0;
}

Card_Batch::~Card_Batch(){
delete[] cards;
}

Код:
//PLAYER_H
#include <iostream>
#include "CardBatch.h"
#ifndef PLAYER_H
#define PLAYER_H

class Player{
Card_Batch cb;
int playerScore;
public:
Player();
Card_Batch& GetCardBatch(){return deck;}

//	void SetPlayerScore(int);
//	int GetPlayerScore() const {return playerScore;}
void Drop();
};
#endif PLAYER_H

Код:
//Player.cpp
#include "Player.h"
Player::Player(){
Drop();
}

void Player::Drop(){
playerScore = 0;
deck.Shell();
};

Код:
//TWENTYONEGAME_H
#include "CardBatch.h"
#include "Player.h"
#ifndef TWENTYONEGAME_H
#define TWENTYONEGAME_H

class TwentyOneGame{
Player dealer;
Player gamer;

Card_Batch cb;
public:
void startGames();
void NewGames();
void FillDeck();
void ShowPlayer(Player&);
void Show();
void addPlayerCard(Player&);
//	void CalculateScore(Player& gamer);
};
#endif TWENTYONEGAME_H

Код:
//TWENTYONEGAME.cpp
#include <iostream>
#include "TwentyOneGame.h"

#include <stdlib.h>
using namespace std;

void TwentyOneGame::NewGames(){
system("cls");
dealer.Drop();
gamer.Drop();

FillDeck();
addPlayerCard(dealer);
cout << "\n";
addPlayerCard(gamer);
addPlayerCard(gamer);

Show();
}

void TwentyOneGame::addPlayerCard(Player& game){
gamer.GetCardBatch().AddCard();
}

void TwentyOneGame::FillDeck(){
cb.setCard_Batch();
cb.Shuffle();
cb.display();
}

void TwentyOneGame::ShowPlayer(Player& gamer){

}

void TwentyOneGame::Show( ){
cout << "Карты Дилера: \n";
ShowPlayer(dealer);
cout << "Ваши карты: \n";
ShowPlayer(gamer);
}
 
R

rrrFer

тусуешь нормально )
а в чем проблема раздачи я не понял, но сдается мне ты не знаешь как раздать разные карты.

Наверное тебе надо хранить колоду в виде списка (или создавать этот список из тусованых карт в начале игры (перед раздачей). раздаешь карты и удаляешь их из списка.
 
F

fuzzyduzzy

Я не знаю как правильно сделать чтобы вывод карт был в функции Show()..

Я когда пытался передать карты то получалось первая цифра а затем одна масть без цифр идет и только трефа)) или вообще одни и те же карты выдает и дилеру и игроку))... Нет как бы разделения между игроком и дилером..

Через списки нельзя)) Это задание нужно сделать через классы и без списков))
 
F

fuzzyduzzy

Вот такой вот гембель получается)))

111.png

В этом блоке что то не то))

C++:
void TwentyOneGame::FillDeck(){
cb.setCard_Batch();
cb.Shuffle();
cb.display();
}

если пишу таким образом
C++:
void TwentyOneGame::FillDeck(){
gamer.GetCardBatch().setCard_Batch();
gamer.GetCardBatch().Shuffle();
gamer.GetCardBatch().display();

}

Получается приличная раздача))
222.png

Но так нельзя ))) или можно?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!