プロが教える店舗&オフィスのセキュリティ対策術

朝からブラックジャックに似たゲームでプログラムを作っています。
朝もこのページの方々にお世話になりました。
ありがとうございます。

そして終盤のにちかづき、〔プレーヤー〕が1と0以外の数字を
入力したときに、〔もう一度入力してください。〕と表示し、また
入力画面が表示されるようにしましたが、コンパイルのときに
エラーがでます。

こちらがソースです。
本当に困っています。助けてください。
お願いします!!
#include <stdio.h>
#include <stdlib.h>
int dice(void);
int dice2(void);
int dice3(void);
int dice4(void);
int dice5(void);


main()
{

do{

int x=0,y=0,z=0,v=0,point=0,nyuryoku1,w=0,point2=0,point3=0,nyuryoku2=0;


printf("ゲームを開始します。\n");
printf("\n");
printf("カードを配ります。\n");

/*関数代入*/
srand(time(NULL));
x=dice();
y=dice2();
z=dice3();
w=dice4();
srand(time(NULL));
v=dice5();
point=y+z;

printf("デイーラー>カードは%d と??です。\n",x);

printf("プレーヤー>カードは%d と%d です。ポイントは%dです。\n",y,
z,point);

printf("\n");
printf("プレーヤーの番です。\n");



/*プレーヤー*/


while(point<=21){
srand(time(NULL));
printf("ヒットorスタンド??[ヒット=1;スタンド=0]\n");
scanf("%d",&nyuryoku1);


v=dice5();

point=point+v;
if(nyuryoku1==1){printf("カードは%d ポイントは%d\n",v,point);}
if(nyuryoku1==0){break;}
else{

while(nyuryoku1!=90){

printf("入力が正しくありません。もう一度入力してください。\n");
printf("ヒットorスタンド??[ヒット=1;スタンド=0]\n");
scanf("%d",&nyuryoku1);
v=dice5();
point=point+v;
if(nyuryoku1==1){printf("カードは%d ポイントは%d\n",v,point);
break;}
if(nyuryoku1==0)break;

}}


if(point>21){
printf("プレーヤーのポイントは%d\n",point);
printf("プレーヤーの負けです。\n");
printf("終了します。\n");

}


/*デイーラー*/


printf("デイーラーの番です。\n");

point2=x+w;
printf("デイーラー> カードは%d と%d です。ポイントは%dです。\n",x,
w,point2);


while(point2<17){


point2=point2+v;
printf("デイーラー>カードは%d ポイントは%d\n",v,point2);

}

printf("プレーヤーのポイントは%d、デイーラーのポイントは%d。\n",
point,point2);




/*結果判定*/

if(point>point2){
printf("プレーヤーの勝ちです。\n");
}

if(point<point2){
printf("デイーラーの勝ちです。\n");
}

if(point==point2){
printf("引き分けです。\n");
}


/*ゲームを続けるか?*/


printf("ゲームを続けますか?[続行=1:終了=0]\n");
scanf("%d",&nyuryoku2);


if(nyuryoku2==0){printf("ゲームを終了しました。\n");
break;}

}while(nyuryoku2==1);


return 0;
}


/*関数定義*/

int dice(void){

return 1+(rand() % 10);
}

int dice2(void){

return 1+(rand() % 10);
}

int dice3(void){

return 1+(rand() % 10);
}

int dice4(void){

return 1+(rand() % 10);
}

int dice5(void){

return 1+(rand() % 10);
}

A 回答 (6件)

しつこくてすまん。

修正したコードは考えてないが、

if(point>21){
printf("プレーヤーのポイントは%d\n",point);
printf("プレーヤーの負けです。\n");
printf("終了します。\n"); 
/*
普通に負けた場合には選択し出てくるのに勝手に終了メッセージ出さないでくれ 。続けるか聞いてくれ
終了するためのコードわからないから入れてないんで終了しないけど。

*/

}
    • good
    • 0

訂正


}while(nyuryoku2==1);の前に } が1個足りません
は間違い
}が足りないのは
if(point>21){
の前ですね
もう1つアドバイス
srand(time(NULL));
もdo ループの前にした方が良いです。
1秒以内でゲームが繰り返されると同じカードが配られます。
    • good
    • 0

return 1+(rand() % 10);


}

*/

/* 厳密にはエースは11にもなるけどね*/
    • good
    • 0

/* 残り。

なんであんな中途半端なところで回答が終わっているんだろう */



/*結果判定*/




if(point>point2){
printf("プレーヤーの勝ちです。\n");
}

if(point<point2){
printf("デイーラーの勝ちです。\n"); /*ディーラーが21を超えたときの判定は? */
}

if(point==point2){
printf("引き分けです。\n");
}


/*ゲームを続けるか?*/


printf("ゲームを続けますか?[続行=1:終了=0]\n");
scanf("%d",&nyuryoku2);


if(nyuryoku2==0){
printf("ゲームを終了しました。\n");
break;
}

}while(1); /* breakしているので別に条件は必要ない */


return 0;
}


/*関数定義*/

/* 一個で十分 */

int dice(void){

return 1+(rand() % 10);
}

/*

int dice2(void){

return 1+(rand() % 10);
}

int dice3(void){

return 1+(rand() % 10);
}

int dice4(void){

return 1+(rand() % 10);
}

int dice5(void){

return 1+(rand() % 10);
    • good
    • 0

#include <stdio.h>


#include <stdlib.h>
int dice(void);

int main()
{

do{

/*たくさんあった変数を整理*/
/*
x = ディーラーの1枚目
y = プレイヤーの1枚目
z = プレイヤーの2枚目
v = プレイヤーおよびディーラーのひいたカード
w = ディーラーの2枚目
point = プレイヤーの合計ポイント
point2 = ディーラーの合計ポイント

nyuryoku1 = ヒットかスタンドか
nyuryoku2 = ゲームを終了するか?
乱数の初期化についてはあんまりしらべてないです

*/
/* whileの条件で使う変数は外で宣言するものみたい */
int x,y,z,v,w,nyuryoku1,point,point2,nyuryoku2;



printf("ゲームを開始します。\n");
printf("\n");
printf("カードを配ります。\n");

/*関数代入*/
srand(time(NULL));
x=dice();
y=dice();
z=dice();
srand(time(NULL));
/*
使われてない 
v=dice();
*/
point=y+z;

printf("デイーラー>カードは%d と??です。\n",x);

printf("プレーヤー>カードは%d と%d です。ポイントは%dです。\n",y,z,point);

printf("\n");
printf("プレーヤーの番です。\n");



/*プレーヤー*/


while(point<=21){
srand(time(NULL));
printf("ヒットorスタンド??[ヒット=1;スタンド=0]\n");
scanf("%d",&nyuryoku1);

/* ここで足してはいけない */

if(nyuryoku1==1){
v=dice();
point=point+v;
printf("カードは%d ポイントは%d\n",v,point);
}
else if(nyuryoku1==0){break;}
else{

printf("入力が正しくありません。もう一度入力してください。\n");

/*
条件は必要ない

while(nyuryoku1!=90){

printf("ヒットorスタンド??[ヒット=1;スタンド=0]\n");
scanf("%d",&nyuryoku1);
v=dice();
point=point+v;

if(nyuryoku1==1){printf("カードは%d ポイントは%d\n",v,point);
break;}
if(nyuryoku1==0){break;}
}
*/

}
}


if(point>21){
printf("プレーヤーのポイントは%d\n",point);
printf("プレーヤーの負けです。\n");
printf("終了します。\n");

}


/*デイーラー*/


printf("デイーラーの番です。\n");
w = dice();

point2=x+w;
printf("デイーラー> カードは%d と%d です。ポイントは%dです。\n",x,w,point2);


while(point2<17){

v = dice();
point2=point2+v;
printf("デイーラー>カードは%d ポイントは%d\n",v,point2);

}

printf("プレーヤーのポイントは%d、デイーラーのポイントは%d。\n",point,point2);


/* こういうこと? */
    • good
    • 0

変数の宣言はdoループの前にしましょう。


}while(nyuryoku2==1);の前に } が1個足りません
これでエラーはなくなると思います。警告は出ますが。
あと
dice( )-dice5( )はすべて同じなのでdice( )のみで大丈夫です。
srand(time(NULL));は1個だけでよさそうですが
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!