トランプを配るよ
#include <iostream>
#include <string>
#include <iomanip>
using std::cout;
using std::endl;
using std::cin;
using std::string;
//トランプ trump
//4つのマークsuit ->
//1~13の数字
//1->A 11->J 12->Q 13->K 表示されている数
//
//トランプのカード1枚当たりのデータ
struct aCard
{
//スペード:0 ハート:1 ダイヤ:2 クラブ:3 ジョーカー:4
int s_num;
//カードの数字 1~13 + ジョーカー:0?
int c_value;
};
const int num_of_cards = 52; //13 * 4
struct aCard cards[num_of_cards];//13 * 4 各スートのカード + ババ 1枚
const string suit[5] = { "S", "H", "D", "C", "B" }; //空白はジョーカー用
//2~9,A,J,Q,Kの表示用文字 + ジョーカー B
const string c_dsp_val[14] = { "B","A","2","3","4","5","6","7","8","9","10","J","Q","K" };
//カード1デッキにマークと数字をセットする関数
//第1引数 struct aCard* _c : カードを表す配列のポインタ(アドレス)
//第2引数 int num : カードの枚数(多分53)
void initCards(struct aCard* _c, int num)
{
for (int j = 0; j < 4; j++) {
for (int i = 1; i <= 13; i++)
{
_c[j * 13 + i - 1].s_num = j;
_c[j * 13 + i - 1].c_value = i;
}
}
//_c [num_of_cards - 1].s_num = 4;
//_c [num_of_cards-1].c_value = 0;
}
//
void printaCard(struct aCard* _c)
{
//cout << (*_c).suit[(*_c).s_num] << (*_c).c_dsp_val[(*_c).c_value];
cout << suit[_c->s_num] << c_dsp_val[_c->c_value];
}
//トランプのカードを並び順に一覧表示
void printAllCards(struct aCard* _c, int num)
{
for (int i = 0; i < num_of_cards; i++)
{
printaCard(_c + i);
cout << " ";
}
cout << endl;
}
//シャッフル=カードをばらばらにする。
//struct aCard cards[num_of_cards];
//cards[0]~cards[52]の53枚のカードがあるとき
//これをシャッフルする方法を考えてください
void shuffleCards(struct aCard* _c, int num)
{
//randを使ってどうにかしてカードをシャッフルする
for (auto i = 0; i < 100; i++)
{
int s1 = rand() % num_of_cards;
int s2 = rand() % num_of_cards;
std::swap(_c[s1], _c[s2]);
}
}
//ブラックジャックを考えてみよう
// カードが2枚配られる
// カードの数字の和で勝負するよ
// 絵札は10として数える
// Aは、初めは10として数える、
// もし合計がバースト21を超えたら1として数える
// 21を作ろう A+(10,J,Q,K)はブラックジャックといい同点以外は勝ち確
// カードを引いたとき21をこえたら、バースト(負け確)
// 21を超えるまでは何枚でもカードを引ける
//カードを配る
//
//プレイヤーだけを考える
//カードはこの世界に用意した1セットだけ。
//同じカードが出てくることはないよ。山札+プレイヤー札=52枚
// プレイヤーにカードを2枚配るということを、どう表現するか考える→12時40分まで
// ↓cards[xxx]
// ♠1 ♠2 ♠3 ♠4 ♠5 ♠6 ♠7 ♠8 ♠9 ♠10 ♠J ♠Q ♠K
// ↑cp=4
// cards[cp]を配る
struct aCard
popCard(struct aCard* _c, int num, int* cp)
{
if (*cp < num)
{
struct aCard tmp = _c[*cp];
(*cp)++;
return tmp;
}
}
int main()
{
int sp = 0;
struct aCard p[10];//とりあえず10枚分準備する。
int p_card_n = 0;//プレイヤーが引いたカード数
srand((unsigned int)time(nullptr));//乱数の初期化
initCards(cards, num_of_cards); //カードを初期化
//printAllCards(cards, num_of_cards);//カードを表示
shuffleCards(cards, num_of_cards);//カードをシャッフル
//printAllCards(cards, num_of_cards);//カードを表示
p[0] = popCard(cards, num_of_cards, &sp);
p_card_n++;
p[1] = popCard(cards, num_of_cards, &sp);
p_card_n++;
for (int i = 0; i < p_card_n;i++) {
printaCard(p + i);
cout << " ";
}
cout << endl;
}
int player_Point = 0;
bool bj = false;
if (p[0].c_value == 1)
{
if (p[1].c_value == 11 || p[1].c_value == 12 || p[1].c_value == 13)
bj = true;
}
else if (p[1].c_value == 1)
{
if (p[0].c_value == 11 || p[0].c_value == 12 || p[0].c_value == 13)
bj = true;
}
if(!bj){
if (p[0].c_value <= 10)
{
player_Point += p[0].c_value;
}else if (p[0].c_value == 11 || p[0].c_value == 12 || p[0].c_value == 13)
{
player_Point += 10;
}
if (p[1].c_value <= 10)
{
player_Point += p[1].c_value;
}else if (p[1].c_value == 11 || p[1].c_value == 12 || p[1].c_value == 13)
{
player_Point += 10;
}
}
if (bj) {
cout << "Black Jack!" << endl;
}else
cout << "プレイヤーのカードの合計ポイントは" << player_Point << "です。" << endl;