9月7日 2時間目
#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; } } // 関数名 calcCardPoint // 戻り値 intでカードの得点を計算して返す // ただし、BJの時は 0 を返す // 引数 カードの配列 struct aCard *_cards // カードの数 int num int calcCardPoint(struct aCard* _cards, int num) { int point = 0;//カードの合計値 //カードが2枚の時はブラックジャックの判定が必要 //ブラックジャックの時は0を返す //ブラックジャックじゃないときは、合計値を返す if (num == 2)//_cards[0], _cards[1]しかないよ { if ((_cards[0].c_value == 1 && _cards[1].c_value >= 10) || (cards[0].c_value >= 10 && cards[1].c_value == 1)) { return 0;//ブラックジャックの時 } else { //Aは11点。絵札は全部10点 int tmp0 = 0, tmp1 = 0; if (_cards[0].c_value >= 11) tmp0 = 10; else if (_cards[0].c_value == 1) tmp0 = 11; else tmp0 = _cards[0].c_value; if (_cards[1].c_value >= 11) tmp1 = 10; else if (_cards[1].c_value == 1) tmp1 = 11; else tmp1 = _cards[1].c_value; point = tmp0 + tmp1; return point; } } //カードが3枚以上の時は、カードの合計値を返す else { //Aは11点。絵札は全部10点 //※21を超えたら、Aがないか確認して、あったら1点で数える int tmp = 0; for (int i = 0; i < num; i++) { if (_cards[i].c_value >= 11) tmp = 10; else if (_cards[i].c_value == 1) tmp = 11; else tmp = _cards[i].c_value; point = point + tmp; } return point; } } int main() { int sp = 0;//デッキから配られたカード数 int p_card_n = 0;//プレイヤーの手持ちカード数 struct aCard p[10];//10枚分 srand((unsigned int)time(nullptr));//乱数の初期化 initCards(cards, num_of_cards); //カードを初期化 shuffleCards(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; player_Point = calcCardPoint(p, p_card_n); if (player_Point == 0) { cout << "Black Jack!" << endl; } else cout << "プレイヤーのカードの合計ポイントは" << player_Point << "です。" << endl; }
3時間目
#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; } } // 関数名 calcCardPoint // 戻り値 intでカードの得点を計算して返す // ただし、BJの時は 0 を返す // 引数 カードの配列 struct aCard *_cards // カードの数 int num int calcCardPoint(struct aCard* _cards, int num) { int point = 0;//カードの合計値 //カードが2枚の時はブラックジャックの判定が必要 //ブラックジャックの時は0を返す //ブラックジャックじゃないときは、合計値を返す if (num == 2)//_cards[0], _cards[1]しかないよ { if ((_cards[0].c_value == 1 && _cards[1].c_value >= 10) || (cards[0].c_value >= 10 && cards[1].c_value == 1)) { return 0;//ブラックジャックの時 } else { //Aは11点。絵札は全部10点 int tmp0 = 0, tmp1 = 0; if (_cards[0].c_value >= 11) tmp0 = 10; else if (_cards[0].c_value == 1) tmp0 = 11; else tmp0 = _cards[0].c_value; if (_cards[1].c_value >= 11) tmp1 = 10; else if (_cards[1].c_value == 1) tmp1 = 11; else tmp1 = _cards[1].c_value; point = tmp0 + tmp1; return point; } } //カードが3枚以上の時は、カードの合計値を返す else { //Aは11点。絵札は全部10点 //※21を超えたら、Aがないか確認して、あったら1点で数える int tmp = 0; for (int i = 0; i < num; i++) { if (_cards[i].c_value >= 11) tmp = 10; else if (_cards[i].c_value == 1) tmp = 11; else tmp = _cards[i].c_value; point = point + tmp; } if (point >= 22) { //もしカードの合計が22以上の時は、Aを1と数える //ここを考える } return point; } } int main() { int sp = 0;//デッキから配られたカード数 int p_card_n = 0;//プレイヤーの手持ちカード数 struct aCard p[12];//12枚分確保 srand((unsigned int)time(nullptr));//乱数の初期化 initCards(cards, num_of_cards); //カードを初期化 shuffleCards(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; player_Point = calcCardPoint(p, p_card_n); if (player_Point == 0) { cout << "Black Jack!" << endl; //相手がブラックジャックかどうか確認 //相手もブラックジャック=引き分け //それ以外は勝確定 } else { int command; cout << "プレイヤーのカードの合計ポイントは" << player_Point << "です。" << endl; while (true) { cout << "どうしますか?" << endl; cout << "1:もう一枚(Hit)" << endl; cout << "2:これで勝負(Stand)" << endl; cin >> command; if (command == 1) { cout << "カードをひくよ" << endl; p[p_card_n] = popCard(cards, num_of_cards, &sp);//カード引く処理 p_card_n++;//プレイヤーの持ちカード数更新 for (int i = 0; i < p_card_n; i++) { printaCard(p + i); cout << " "; } cout << endl; player_Point = calcCardPoint(p, p_card_n);//得点計算 cout << "プレイヤーのカードの合計ポイントは" << player_Point << "です。" << endl; //バースト(22を超える)するとその時点で負けなので、ループを抜ける } else if (command == 2) { cout << "これで勝負だ!" << endl; break; } else { cout << "エラー!1 or 2 を入力してください。" << endl; } } //もう一枚(Hit) //これで勝負(Stand) } }
4時間目
#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; } } // 関数名 calcCardPoint // 戻り値 intでカードの得点を計算して返す // ただし、BJの時は 0 を返す // 引数 カードの配列 struct aCard *_cards // カードの数 int num int calcCardPoint(struct aCard* _cards, int num) { int point = 0;//カードの合計値 //カードが2枚の時はブラックジャックの判定が必要 //ブラックジャックの時は0を返す //ブラックジャックじゃないときは、合計値を返す if (num == 2)//_cards[0], _cards[1]しかないよ { if ((_cards[0].c_value == 1 && _cards[1].c_value >= 10) || (cards[0].c_value >= 10 && cards[1].c_value == 1)) { return 0;//ブラックジャックの時 } else { //Aは11点。絵札は全部10点 int tmp0 = 0, tmp1 = 0; if (_cards[0].c_value >= 11) tmp0 = 10; else if (_cards[0].c_value == 1) tmp0 = 11; else tmp0 = _cards[0].c_value; if (_cards[1].c_value >= 11) tmp1 = 10; else if (_cards[1].c_value == 1) tmp1 = 11; else tmp1 = _cards[1].c_value; point = tmp0 + tmp1; return point; } } //カードが3枚以上の時は、カードの合計値を返す else { //Aは11点。絵札は全部10点 //※21を超えたら、Aがないか確認して、あったら1点で数える int tmp = 0; for (int i = 0; i < num; i++) { if (_cards[i].c_value >= 11) tmp = 10; else if (_cards[i].c_value == 1) tmp = 11; else tmp = _cards[i].c_value; point = point + tmp; } if (point >= 22) { for (int i = 0; i < num; i++) { if (_cards[i].c_value == 1) { point = point - 10; } } //もしカードの合計が22以上の時は、Aを1と数える //アルゴリズム //カードを全部、走査してAがあったら //11→1点で数えなおす 得点合計からAを見つけるたびに10点引けばいい } return point; } } int main() { int sp = 0;//デッキから配られたカード数 int p_card_n = 0;//プレイヤーの手持ちカード数 struct aCard p[12];//12枚分確保 srand((unsigned int)time(nullptr));//乱数の初期化 initCards(cards, num_of_cards); //カードを初期化 shuffleCards(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; player_Point = calcCardPoint(p, p_card_n); if (player_Point == 0) { cout << "Black Jack!" << endl; //相手がブラックジャックかどうか確認 //相手もブラックジャック=引き分け //それ以外は勝確定 } else { int command; cout << "プレイヤーのカードの合計ポイントは" << player_Point << "です。" << endl; while (true) { cout << "どうしますか?" << endl; cout << "1:もう一枚(Hit)" << endl; cout << "2:これで勝負(Stand)" << endl; cin >> command; if (command == 1) { cout << "カードをひくよ" << endl; p[p_card_n] = popCard(cards, num_of_cards, &sp);//カード引く処理 p_card_n++;//プレイヤーの持ちカード数更新 for (int i = 0; i < p_card_n; i++) { printaCard(p + i); cout << " "; } cout << endl; player_Point = calcCardPoint(p, p_card_n);//得点計算 cout << "プレイヤーのカードの合計ポイントは" << player_Point << "です。" << endl; //バースト(22を超える)するとその時点で負けなので、ループを抜ける } else if (command == 2) { cout << "これで勝負だ!" << endl; break; } else { cout << "エラー!1 or 2 を入力してください。" << endl; } } //もう一枚(Hit) //これで勝負(Stand) } }
後結果を表示すれば完成?バージョン
#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; } } // 関数名 calcCardPoint // 戻り値 intでカードの得点を計算して返す // ただし、BJの時は 0 を返す // 引数 カードの配列 struct aCard *_cards // カードの数 int num int calcCardPoint(struct aCard* _cards, int num) { int point = 0;//カードの合計値 //カードが2枚の時はブラックジャックの判定が必要 //ブラックジャックの時は0を返す //ブラックジャックじゃないときは、合計値を返す if (num == 2)//_cards[0], _cards[1]しかないよ { if ((_cards[0].c_value == 1 && _cards[1].c_value >= 10) || (cards[0].c_value >= 10 && cards[1].c_value == 1)) { return 0;//ブラックジャックの時 } else { //Aは11点。絵札は全部10点 int tmp0 = 0, tmp1 = 0; if (_cards[0].c_value >= 11) tmp0 = 10; else if (_cards[0].c_value == 1) tmp0 = 11; else tmp0 = _cards[0].c_value; if (_cards[1].c_value >= 11) tmp1 = 10; else if (_cards[1].c_value == 1) tmp1 = 11; else tmp1 = _cards[1].c_value; point = tmp0 + tmp1; return point; } } //カードが3枚以上の時は、カードの合計値を返す else { //Aは11点。絵札は全部10点 //※21を超えたら、Aがないか確認して、あったら1点で数える int tmp = 0; for (int i = 0; i < num; i++) { if (_cards[i].c_value >= 11) tmp = 10; else if (_cards[i].c_value == 1) tmp = 11; else tmp = _cards[i].c_value; point = point + tmp; } if (point >= 22) { for (int i = 0; i < num; i++) { if (_cards[i].c_value == 1) { point = point - 10; } } //もしカードの合計が22以上の時は、Aを1と数える //アルゴリズム //カードを全部、走査してAがあったら //11→1点で数えなおす 得点合計からAを見つけるたびに10点引けばいい } return point; } } // 関数名 printOnesCards // 戻り値 なし // 引数 カードの配列 struct aCard *_cards // カードの数 int num void printOnesCards(struct aCard* _cards, int num) { for (int i = 0; i < num; i++) { printaCard(_cards + i); cout << " "; } cout << endl; } int main() { int sp = 0;//デッキから配られたカード数 int p_card_n = 0;//プレイヤーの手持ちカード数 struct aCard p[12];//12枚分確保 int d_card_n = 0;//ディーラーの手持ちカード数 struct aCard d[12];//12枚分確保 srand((unsigned int)time(nullptr));//乱数の初期化 initCards(cards, num_of_cards); //カードを初期化 shuffleCards(cards, num_of_cards);//カードをシャッフル d[0] = popCard(cards, num_of_cards, &sp); d_card_n++; d[1] = popCard(cards, num_of_cards, &sp); d_card_n++; p[0] = popCard(cards, num_of_cards, &sp); p_card_n++; p[1] = popCard(cards, num_of_cards, &sp); p_card_n++; printOnesCards(p, p_card_n); int player_Point = 0; int dealer_Point = 0; player_Point = calcCardPoint(p, p_card_n); if (player_Point == 0) { cout << "Black Jack!" << endl; //相手がブラックジャックかどうか確認 //相手もブラックジャック=引き分け //それ以外は勝確定 } else { int command; cout << "プレイヤーのカードの合計ポイントは" << player_Point << "です。" << endl; while (true) { cout << "どうしますか?" << endl; cout << "1:もう一枚(Hit)" << endl; cout << "2:これで勝負(Stand)" << endl; cin >> command; if (command == 1) { cout << "カードをひくよ" << endl; p[p_card_n] = popCard(cards, num_of_cards, &sp);//カード引く処理 p_card_n++;//プレイヤーの持ちカード数更新 printOnesCards(p, p_card_n); player_Point = calcCardPoint(p, p_card_n);//得点計算 cout << "プレイヤーのカードの合計ポイントは" << player_Point << "です。" << endl; //バースト(22を超える)するとその時点で負けなので、ループを抜ける if (player_Point > 21) { break; } //バーストの時はループ抜けるか } else if (command == 2) { cout << "これで勝負だ!" << endl; break; } else { cout << "エラー!1 or 2 を入力してください。" << endl; } } cout << "ここで結果表示します" << endl; cout << "相手の手札:" << endl; printOnesCards(d, d_card_n); dealer_Point = calcCardPoint(d, d_card_n); cout << "相手の点数: " << dealer_Point << endl; //もう一枚(Hit) //これで勝負(Stand) //ここに勝負の結果を表示する(なるべく、かっちょよく!) } }