アフィリエイト広告を利用しています

広告

posted by fanblog

2020年08月22日

見習いプログラマー「Black Jack」を作ってみた!(バグあり)

どうも!「一人暮らしの様な理系」です。
最近は暑いというより、湿気に悩まされています。







最近は少し時間ができたので、カジノでおなじみの「Black Jack」をC言語で頑張って作ってみました!
作ってみたというより、出来るだけ再現してみたといった方がいいでしょう。

「Black Jack」 を完全に再現するとなると、
Double Down Spilit Insurance Even Money Surrender などのルールをプログラムで作ろうものなら、

今の私の技術では、かなり時間がかかってしまいます。
なので今回は省略しました。

せっかくなのでコードを、下記に掲載します。
ただし、 人に見せようと全く意識していないのでかなり見にくくなっています。
本当なら簡潔でコメントなどを使って書けばいいのですが...

そしてブログの都合上標準ライブラリ関数の
stdio.h time.h stdlib.h
が表示されません。

ちなみに、「goto」もつかってしまいました...

↓コード
casino_dealer_man.png





10秒で登録完了!TECH::CAMPオンライン説明会





#include

int main(void)
{
//変数定義

double tipU = 10.0;
double kake = 0.0;
int a = 0, b = 0, c = 0, d = 0, e=0, f=0;//a user1 b com1 c user2 d com2 e user3 f com3
int k = 0, l = 0, m = 0;
int sum1 = 0, sum2 = 0;
int sum3 = 0;//21 sa user
int sum4 = 0;//21 sa com
int sum5 = 0;

printf("ブラックジャックを開始します。\n");
printf("Double Down Spilit Insurance Even Money Surrender はありません\n");
printf("備考: 11 12 13 は10 とみなします。\n");
printf("\n");
printf("---- Start ---- \n");


for (i=0;i>=0;i ++)
{
for (j = 0; j >= 0; j++)
{
a = 0;
b = 0;
c = 0;
d = 0;
e = 0;
f = 0;

printf("あなたのチップの枚数は%f枚です。\n", tipU);
printf("何枚のチップを賭けますか?0で終了\n");
scanf("%lf", &kake);

if (kake > tipU)
{
continue;
}
else if (kake == 0)
{
goto C;
}
tipU -= kake;


srand(time(0));
a = rand() % 13 + 1;
b = rand() % 13 + 1;
fflush(stdin);
c = rand() % 13 + 1;
d = rand() % 13 + 1;
printf("あなたの1枚目のカード: %d\n", a);
printf("あなたの2枚目のカード: %d\n", c);


if (b == 11 || b == 12 || b == 13 )
{
b = 10;
}

printf("ディーラーのUpcard: %d\n", b);

if (a == 11 || a == 12 || a == 13 )
{
a = 10;
}
if (c == 11 || c == 12 || c == 13)
{
c = 10;
}

if (a == 1)
{
printf("1(エース)を 1 と 11 どちらとみなしますか?\n");
scanf("%d", &k);
if (k == 11)
{
a = 11;
}
else if (k == 1)
{

}
else
{
printf("不正です。\n");
continue;
}
}

if (c == 1)
{
printf("1(エース)を 1 と 11 どちらとみなしますか?\n");
scanf("%d", &k);
if (k == 11)
{
c = 11;
}
else if (k == 1)
{

}
else
{
printf("不正です。\n");
continue;
}
}

if (a + c > 21)
{
goto B;
}
fflush(stdin);
printf("もう一枚引きますか? 引くなら1 引かなければ 0 を押してください。\n");
scanf("%d", &l);
fflush(stdin);
if (l == 1)
{
e = rand() % 13 + 1;
if (e == 11 || e == 12 || e == 13 )
{
e = 10;
}
else if (e == 1)
{
printf("1(エース)を 1 と 11 どちらとみなしますか?\n");
scanf("%d", &m);
if (m == 11)
{
e = 11;
}
}
printf("あなたの3枚目のカード: %d\n", e);
}

printf("\n");
printf("ディーラーの2枚目のカード: %d\n", d);
sum5 = d + b;
if (sum5 <= 16)
{
f = rand() % 13 + 1;
if (f == 11 || f == 12 || f == 13 || f ==14)
{
f = 10;
}
printf("ディーラーの3枚目のカード: %d\n", f);
}

sum1 = a + c + e;
sum2 = b + d + f;
sum3 = 21 - sum1;
sum4 = 21 - sum2;

printf("あなたの合計: %d\n", sum1);
printf("ディーラーの合計: %d\n", sum2);


if (sum3 < 0)
{
B:
printf("あなたはバーストしました。 あなたの負けです。\n");
}
else if (sum4 < 0)
{
printf("ディーラーはバーストしました。 あなたの勝ちです。\n");
tipU += 2 * kake;
}
else if (sum3 < 0 && sum4 < 0)
{
printf("引き分けです。\n");
}
else if ( sum3 < sum4)
{
printf("あなたの勝ちです。\n");
tipU += 2 * kake;
}
else if ( sum3 > sum4)
{
printf("あなたの負けです。\n");
}
else if (sum3 == 0)
{
printf("Black Jack !!! \n");
printf("あなたの完勝です。\n");
tipU += 2.5 * kake;
}
else if (sum3 == sum4)
{
printf("DROW!!");
tipU += kake;
}
else
{
printf("引き分けです。\n");
}

if (tipU == 0.0)
{
printf("GAME OVER ...");
goto A;
}
printf("\n");
printf("\n");
}

}
A:
printf("TRY AGAIN !!\n");
C:
printf("SEE YOU ! \n");
}

改めてみると、かなり見にくいことが自分でもわかります。
そしてたまに、21となっても「Black Jack」として扱われないことがあります。
...大問題ですね?

とりあえず遊びことは出来るので、遊んでみたい人はコードをコピペしてコンパイルして遊んでみて下さい!

ここで書くのもあれですが、もしかしたら「Black Jack」を遊んだことのない方もいるかもしれません。
なので、近いうちに「Black Jack」の遊び方をざっくり解説してみたいな〜とか思ったりしてます。

その時は是非ご覧になってください。








今回はここまでとします。読んでいただきありがとうございました。
このブログでは「プログラミング」をはじめ様々な分野の記事がありますので
是非そちらもよろしくお願いします。
また、次回お会いしましょう。


posted by NoR at 20:00| Comment(0) | TrackBack(0) | 趣味
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/10140242
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は30日以上新しい記事の更新がないブログに表示されております。

Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: