SAU-trade
10-01-2013, 00:27
Здравствуйте! Пытаюсь реализовать игру Блэк Джэк. Создаю колоду, тусую. Вопрос вот в чем как организовать выдачу карт с извлечением их из колоды(тобишь чтобы они были на руках но в калоде не числились)))...
//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();
}
//main
//Тестовый режим
#include <iostream>
#include "CardBatch.h"
using namespace std;
int main(){
setlocale(LC_ALL,"russian");
Card_Batch A;
A.setCard_Batch();
A.display();
A.Shuffle();
A.display();
A.getcard();
cout << endl;
A.getcard();
П.С. Если я неправильно организовываю классы буду внимателен к вашим замечаниям.. Заранее спс.
//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();
}
//main
//Тестовый режим
#include <iostream>
#include "CardBatch.h"
using namespace std;
int main(){
setlocale(LC_ALL,"russian");
Card_Batch A;
A.setCard_Batch();
A.display();
A.Shuffle();
A.display();
A.getcard();
cout << endl;
A.getcard();
П.С. Если я неправильно организовываю классы буду внимателен к вашим замечаниям.. Заранее спс.