トランプのシャッフルのプログラムは作れたのですが
それを利用したトランプのブラックジャックのプログラムを教えてほしいです。
どうにも組めなかったので…。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct{
int trump_no;
char trump_suit;
}trump_sample;
void trump_output(trump_sample *trump);
void trump_shuffle(trump_sample *trump);
int main(void){
trump_sample trump[52];
for(int i=0;i<52;i++){
//トランプ(1~13)の設定
(trump+i)->trump_no = i%13+1;
//トランプ(スート)の設定
switch(i/13){
case 0:
(trump+i)->trump_suit = 'q';
break;
case 1:
(trump+i)->trump_suit = 's';
break;
case 2:
(trump+i)->trump_suit = 'h';
break;
case 3:
(trump+i)->trump_suit = 'd';
break;
}
}
//シャッフル前のトランプの出力
trump_output(trump);
//トランプのシャッフル
trump_shuffle(trump);
//シャッフル後のトランプの出力
trump_output(trump);
return 0;
}
void trump_output(trump_sample *trump){
printf("-------------------------------------\n");
for(int i=0;i<52;i++){
printf("%c %d\n",(trump+i)->trump_suit,(trump+i)->trump_no);
}
}
void trump_shuffle(trump_sample *trump){
int a,b,tmp_no;
char tmp_suit;
srand((unsigned)time(NULL));
for(int i=0;i<52;i++){
a =rand()%52;
b =rand()%52;
//トランプの数字の入れ替え
tmp_no = (trump+a)->trump_no;
(trump+a)->trump_no = (trump+b)->trump_no;
(trump+b)->trump_no = tmp_no;
//トランプのスートの入れ替え
tmp_suit = (trump+a)->trump_suit;
(trump+a)->trump_suit = (trump+b)->trump_suit;
(trump+b)->trump_suit = tmp_suit;
}
}
ブラックジャックは最初に2枚のカードを配り、2〜10は数字通り、JとQとKは10、Aは1か11として合計し21に近いほど勝ちとなるが、21を超えると負け(バスト)というもので
まず最初にトランプをシャッフルし、2枚を先頭から順番に引き、それらのカードの数字と合計値を表示するプログラムという形でお願いします。
表示は以下の感じで
$ ./a.exe
2 7 : 合計9
$ ./a.exe
9 J : 合計19
$ ./a.exe
A K : 合計21
$
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
手札の配列を用意する
山札の配列を用意し、シャッフル済みデッキを格納
山札配列の先頭の1枚を手札配列に加える
山札配列の先頭の1枚を手札配列に加える
... (多分この辺りに操作性にかかわる処理が入る) ...
手札配列を先頭から再帰的に点数計算する
手札と点数を表示する
... (多分この辺りにゲーム性にかかわる処理が入る) ...
再帰による点数計算は、バーストしない範囲で高得点にする為
例) 手札が [2,A,A,K] の場合
2+11+11 > 21 なのでダメ → 3枚目を1と評価し直す
2+11+01+10 > 21 なのでダメ → 2枚目を1と評価し直す
2+01+11+10 > 21 なのでダメ → 3枚目を1と評価し直す
2+01+01+10 <= 21 なので点数確定
発展問題
ジョーカー2枚を入れたり複数デッキを使うルールもあるので、
山札を52枚限定としない実装を目指そう。
No.1
- 回答日時:
> どうにも組めなかったので…。
具体的に何をどう考えられたどうのでしょう?
そして具体的にどういう処理がわからなかったのでしょう?
ちなみに・・・
(1) どういう操作仕様なのか具体的に考えられましたか?
(2) その操作仕様を実現するため、プログラムを起動してから1回のゲーム終了までプログラム内では具体的にどういう事をどういう順序で進めればよいかを日本語で順序だてて考え、それを日本語を使って箇条書きにまとめるといったことをされましたか?
> まず最初にトランプをシャッフルし
プログラム内部の処理として「カードをシャッフルする」という処理は不要でしょう。
単に「1から13の範囲の任意の整数を2つ発生させる」という処理があればよいだけと考えます。つまり範囲制限がある乱数の発生と。。。
参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 hositng の意味を教えてください 3 2023/08/18 07:30
- 英語 トランプ支持者の英短文です。文中ひとつ難解な単語があり日本語訳できません!お願いします! 4 2022/10/04 05:49
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- 英語 日経新聞のFT翻訳記事について 3 2023/06/21 22:43
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
c言語乱数について
C言語・C++・C#
-
ブラックジャック
C言語・C++・C#
-
符号無し整数xを右にnビット回転
C言語・C++・C#
-
-
4
一次従属の問題
数学
-
5
文字列内の数字削除
C言語・C++・C#
-
6
<math.h>があるのにsqrtが・・・
C言語・C++・C#
-
7
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
8
e^(x^2)の積分に関して
数学
-
9
C言語でのトランプシャッフルについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報