朝からブラックジャックに似たゲームでプログラムを作っています。
朝もこのページの方々にお世話になりました。
ありがとうございます。
そして終盤のにちかづき、〔プレーヤー〕が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);
}
No.6ベストアンサー
- 回答日時:
しつこくてすまん。
修正したコードは考えてないが、if(point>21){
printf("プレーヤーのポイントは%d\n",point);
printf("プレーヤーの負けです。\n");
printf("終了します。\n");
/*
普通に負けた場合には選択し出てくるのに勝手に終了メッセージ出さないでくれ 。続けるか聞いてくれ
終了するためのコードわからないから入れてないんで終了しないけど。
*/
}
No.5
- 回答日時:
訂正
}while(nyuryoku2==1);の前に } が1個足りません
は間違い
}が足りないのは
if(point>21){
の前ですね
もう1つアドバイス
srand(time(NULL));
もdo ループの前にした方が良いです。
1秒以内でゲームが繰り返されると同じカードが配られます。
No.3
- 回答日時:
/* 残り。
なんであんな中途半端なところで回答が終わっているんだろう *//*結果判定*/
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);
No.2
- 回答日時:
#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);
/* こういうこと? */
No.1
- 回答日時:
変数の宣言はdoループの前にしましょう。
}while(nyuryoku2==1);の前に } が1個足りません
これでエラーはなくなると思います。警告は出ますが。
あと
dice( )-dice5( )はすべて同じなのでdice( )のみで大丈夫です。
srand(time(NULL));は1個だけでよさそうですが
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C言語教えてください】sin波...
-
C言語についてです。 アスタリ...
-
C言語で四則演算を使って10を作...
-
分数を表示するプログラム(長...
-
C言語です このプログラミング...
-
strcmp
-
空白表示
-
改行について 1行に何個かづ...
-
2から120以下の素数を求める
-
カレンダー作成
-
縦の棒グラフ
-
C言語【おみくじプログラム】
-
hit&bolwのプログラミングがで...
-
ソースコードの確認をお願いし...
-
C言語で四則演算を使って結果が...
-
多項式のユークリッドの互除法...
-
位数を求めるプログラム
-
構造体配列をきれいに表示するには
-
台形の面積を求めるプログラム
-
C言語 素数判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
コンパイルエラーについて
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報