ブラックジャックのプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
YYY

ブラックジャックのプログラム

#1

投稿記事 by YYY » 17年前

書いたプログラムはこんな感じです。
#include <stdio.h>
#include <stdlib.h>
int a[53];
int b[55];
int z=0,s=1,player=0,computer=0,x,y,w,v,u,p=0,t,han,te=15;
void syoubu(void);
void mouichi(void);
void syuuryou(void);
void rannsuu_player(void);
void rannsuu_computer(void);
void mouii(void);
int main()
{
    for(y=1;y<=52;y=y+1)
    {
        x=y % 13;
        a[y]=x;
        if(a[y]==0)
        {
            a[y]=10;
        }
        for(w=11;w<=50;w=w+13)
        {
            a[w]=10;
            a[w+1]=10;
        }
        for(u=1;u<=52;u=u+1)
        {
            b[[/url]=0;
        }


    }
    syoubu();
}

void syoubu(void)
{
    printf("あなたの得点 %d 点 \n",player);
    printf("もう1枚取りますか?(1)はい(2)いいえ \n");
    scanf("%d",&han);
    if(han==1)
    {
        mouichi();
    }
    else if(han==2)
    {
        mouii();
    }
}

void mouichi(void)
{
    rannsuu_player();
    player=player+b[[/url];
    if(player>21)
    {
        mouii();
    }
    syoubu();
}

void mouii(void)
{
    if(p<1)
    {
      if(computer>te)
        {
            syuuryou();
        }
        if(computer<=te)
        {
            rannsuu_computer();
        }
        computer=computer+b[t];
        mouii();
    }
}

void syuuryou(void)
{
    if(player>21)
    {
        player=0;
    }
    if(computer>21)
    {
        computer=0;
    }
    printf("あなたの点 %d \n",player);
    printf("親の点 %d \n",computer);
    if (player>computer)
    {
        printf("子の勝ち");
        p++;
    }
    else if(player<computer)
    {
        printf("親の勝ち");
        p++;
    }
    else if(player==computer)
    {
        printf("引き分け");
        p++;
    }
}

void rannsuu_player(void)
{
    u=(int)(52*(rand()/32767.1)+1);
    if(b[[/url]!=0)
    {
        rannsuu_player();
    }
    b[[/url]=a[[/url];
}

void rannsuu_computer(void)
{
    t=(int)(52*(rand()/32767.1)+1);
    if(b[t]!=0)
    {
        rannsuu_computer();
    }
    b[t]=a[t];
}
一見問題がないように見えますが数字を入力するところがおかしいです。
あなたの得点 0 点
もう1枚取りますか?(1)はい(2)いいえ
1
あなたの得点 1 点
もう1枚取りますか?(1)はい(2)いいえ
1
12 [main] a 552 _cygtls::handle_exceptions: Error while dumping state (prob
ably corrupted stack)
Segmentation fault (core dumped)
これが実行結果です。普通に遊べるようにするためにはどこが間違っているのか教えてください。
それと52*(rand()/32767.1)+1というのがよくわからないのですが(多分トランプのカードのことかと思いますが)rand()%51+1とは違うんでしょうか?

box

Re:ブラックジャックのプログラム

#2

投稿記事 by box » 17年前

> 一見問題がないように見えます

現実のブラックジャックの手順を反映していますか?
確か、ディーラーとプレイヤーに2枚ずつカードを配るところから
始まるのだと思っていましたけれど。
違っていたらすみません。

YYY

Re:ブラックジャックのプログラム

#3

投稿記事 by YYY » 17年前

すみません。それはなしです・・・。
どんどん引いていって好きなところでやめて合計が21に近い方が勝ちって感じです。
細かいルールは適応させてないので・・。

box

Re:ブラックジャックのプログラム

#4

投稿記事 by box » 17年前

rannsuu_player関数とrannsuu_computer関数の実装に
再帰呼び出しを使う必要はありますか?

> 52*(rand()/32767.1)+1というのがよくわからない

どなたか他のかたが書かれたコードですか?

YYY

Re:ブラックジャックのプログラム

#5

投稿記事 by YYY » 17年前

>どなたか他のかたが書かれたコードですか?

宿題の文章そのままって奴です。間違っている所を直せというやつなので・・・。

>rannsuu_player関数とrannsuu_computer関数の実装に
再帰呼び出しを使う必要はありますか?

{
rannsuu_computer();
}
これが要らないということですか?

box

Re:ブラックジャックのプログラム

#6

投稿記事 by box » 17年前

> 宿題の文章そのままって奴です。間違っている所を直せというやつなので・・・。

ということでしたら、変数がすべて外部変数になっている点を含めて、
設計を最初からやり直す必要がありそうです。

> {
> rannsuu_computer();
> }
> これが要らないということですか?

単なるループを使うことによって同じ機能が実装できる状態で、
わざわざ再帰呼び出しを使う必要性を感じないです。私は。

YYY

Re:ブラックジャックのプログラム

#7

投稿記事 by YYY » 17年前

分りました。後は自分でやってみます。ありがとうございました。

管理人

Re:ブラックジャックのプログラム

#8

投稿記事 by 管理人 » 17年前

コードを投稿する時は、
<pre>と</pre>のタグで挟んで投稿してください。(<>は半角)

閉鎖

“C言語何でも質問掲示板” へ戻る