じゃんけんゲームプログラムの作成方法

このQ&Aのポイント
  • ジャンケンを十回行って、勝ち数、負け数、引き分け数を表示するプログラムを作成する方法について
  • 計算機とじゃんけんを行って、計算機より2回多く勝つまで続けるプログラムを作成する方法について
  • 問1のプログラムを参考にして、コンピュータにランダムで手を出させ、勝敗の回数をカウントさせる方法について
回答を見る
  • ベストアンサー

じゃんけんゲーム

問1:ジャンケンを十回行って、何勝何敗、何引き 分けかを表示するプログラムを作れ。 問2:計算機とじゃんけんを行って、貴方が計算 機より2回多く勝つまで続けるプログラムを作れ。 上記の問題が、どうしてもわかりません。"問1を少し変えれば問2はできる"と思うのですが・・・。 コンピュータにランダムで手を出させ、かつ勝敗の回数をカウントさせたいのですがうまくいきません。 どこをどう変えればよいのか、どなたか回答願います。 できればソースを添えてお願いします。 使っている言語はC言語です。また、私はC言語初心者なので、if文やfor文、do~while文あたりまでしか使えません。 下記に示すのは私が作った、問1のソースです。参考までに。 ---------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <time.h> main(){ int i, a, b;time_t seed; seed=time(&seed); srand(seed*(seed%12345)); a=3.0*(float)rand()/(RAND_MAX+1.0)+1; for(i=0;i<10;i++){ printf("1、2、3 ?\n"); scanf("%d",&b); printf("PCは%d\n",a); if(a==b){ printf("アイコッ!\n"); }else{ if((a==1 && b==2) || (a==2 && b==3) || (a==3 && b==1 )){ printf("PCが勝ちッ!\n"); }else{printf("PCが負けッ!\n");} }/*if の括弧閉じ*/ }/* for の括弧閉じ*/ printf( "結果発表ッ!\n" ); printf( "私は%d 回勝ちッ!\n",b ); printf( "PCは%d 回勝ちッ!\n", a); printf( "引き分けは %d 回ッ!\n", (10 - a - b) ); return 0; }/*main() の括弧閉じ*/ -------------------------------------------------------------- --------------------------------------------------------------

  • 11_15
  • お礼率33% (3/9)

質問者が選んだベストアンサー

  • ベストアンサー
noname#62605
noname#62605
回答No.2

続きです。質問というか注意すべき点があります。 (1)乱数の計算結果はfloatなのにintに丸めちゃっていいのですか? きっとコンパイラが警告を出してくれると思いますが、しっかりaに代入するときにキャストしてあげたほうがいいです。 それと乱数の発生(PCの結果は)1回だけでいいんでしょうか? (2)入力時の考慮 1,2,3以外の値が入力された場合も何らかの処理をしてしまいます。 それは無条件にPCが負けと判断していいですか?? (3)勝ち負け引き分けの計算 先ほども回答したようにfor文を抜けた後のaは、初めに算出したaと一緒です。 すなわちrand()の結果を出しているだけです。 bに関しては、最後に入力した値です。 ※大方の処理は合っているのでここではあえてソースは提示しません。  ヒントを参考に手を加えてみてください。  きっとあ~こうだったんだ。という実感が出来ると思います。

11_15
質問者

お礼

おかげさまで、できました~(^▽^) ありがとうございましたッ!!! とても参考になりましたッ!

その他の回答 (1)

noname#62605
noname#62605
回答No.1

for以降のprint文での勝ちの回数が考慮されてません。 これでは最後に残っているa,bの値が表示されていませんか? もし勝ちの回数を表示するのであれば、自分が勝った回数(PCでもいいです)を格納しておく変数が必要になります。 問2に関しても、自分が何回勝ったか格納しておく変数が必要です。 そして2回勝ったらfor文から抜ける処理(break;)を追加してあげればオッケーです。

11_15
質問者

補足

なんとッ!たまたまなのかうまくいったような気がしたので、合ってるのかなぁなどと思っていました(^^;)> しかし、自分が勝った回数を格納しておく方法がわかりません。

関連するQ&A

  • じゃんけんゲームの応用

    • 問1:ジャンケンを十回行って、何勝何敗、何引き 分けかを表示するプログラムを作れ。 • 問2:計算機とじゃんけんを行って、貴方が計算 機より2回多く勝つまで続けるプログラムを作れ。 上記の問題で、どうしても問2がわかりません。"問1を少し変えれば問2はできる"と思うのですが・・・。 どこをどう変えればよいのか、どなたか回答願います。 使っている言語はC言語です。また、私はC言語初心者なので、if文やfor文、do~while文あたりまでしか使えません。 下記に示すのは私が作った、問1のソースです。参考までに。 ---------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <time.h> main(){ int i, a, b;time_t seed; seed=time(&seed); srand(seed*(seed%12345)); a=3.0*(float)rand()/(RAND_MAX+1.0)+1; for(i=0;i<10;i++){ printf("1、2、3 ?\n"); scanf("%d",&b); printf("PCは%d\n",a); if(a==b){ printf("アイコッ!\n"); }else{ if((a==1 && b==2) || (a==2 && b==3) || (a==3 && b==1 )){ printf("PCが勝ちッ!\n"); }else{printf("PCが負けッ!\n");} }/*if の括弧閉じ*/ }/* for の括弧閉じ*/ printf( "結果発表ッ!\n" ); printf( "私は%d 回勝ちッ!\n",b ); printf( "PCは%d 回勝ちッ!\n", a); printf( "引き分けは %d 回ッ!\n", (10 - a - b) ); return 0; }/*main() の括弧閉じ*/ -------------------------------------------------------------- --------------------------------------------------------------

  • じゃんけんゲームをつくったのですが・・・。

    自分でじゃんけんゲームを作ってみたのですが、他の人のソースで どういう風に組んでいるのか研究したいのでソースお願いします。 後、もっとこういう風にした方がいいとおもう所があればおねがいします。 <ソース> #include<stdio.h> #include<time.h> #include<stdlib.h> int main() { int i; int n; srand(time(NULL)); n=rand()%3; printf("じゃんけんをします,0がグーで1がチョキで2がパーです\n"); printf("じゃんけんぽい!"); scanf("%d",&i); if(i==0&&n==0){ printf("あいこです\n"); } else if(i==0&&n==1){ printf("勝ちました\n"); } else if(i==0&&n==2) { printf("負けました\n"); } if(i==1&&n==0){ printf("負けました\n"); } else if(i==1&&n==1){ printf("あいこです\n"); } else if(i==1&&n==2) { printf("勝ちました\n"); } if(i==2&&n==0){ printf("勝ちました\n"); } else if(i==2&&n==1){ printf("負けました\n"); } else if(i==2&&n==2){ printf("あいこです\n"); } if(i>2) { printf("やりなおしてください\n"); } return 0; }

  • プログラミング(じゃんけんゲーム)

    C言語をしています。 そこでわからない所がありのですが、解説お願いします。 作りたいのは、乱数を使ったジャンケン5回戦で、 一番最後に、何勝何敗何引き分けかを表示させ、 2人のうちどちらが勝ったかです。 最後の何勝何敗何引き分けかを どう書いたらいいかがわかりません。 関数のひきわたしみたいな感じでするというのはわかります。 できたところまでのプログラムが、以下のようなコードです。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a,c,i; printf("じゃんけんをしましょう。 (グー=1 チョキ=2 パー=3)\n"); for(i=i; i<=5; i++) { srand(time(NULL)); c = rand()%3+1; scanf("%d",&a); if(a==1 && c==1) printf("私もグー=1なので、あいこです。\n"); else if(a==1 && c==2) printf("私はチョキ=2なので、あなたの勝ちです。\n"); else if(a==1 && c==3) printf("私はパー=3なので、あなたの負けです。\n"); else if(a==2 && c==1) printf("私はグー=1なので、あなたの負けです。\n"); else if(a==2 && c==2) printf("私もチョキ=2なので、あいこです。\n"); else if(a==2 && c==3) printf("私はパー=3なので、あなたの勝ちです。\n"); else if(a==3 && c==1) printf("私はグー=1なので、あなたの勝ちです。\n"); else if(a==3 && c==2) printf("私はチョキ=2なので、あなたの負けです。\n"); else if(a==3 && c==3) printf("私もパー=3なので、あいこです。\n"); else printf("正しい手を入れてください。\n"); } return 0; }

  • ジャンケンのプログラムについて

    ジャンケンのプログラムについて #include <stdio.h> #include <stdlib.h> int main(void) { int a; int b; int i; srand((unsigned)time(NULL)); ////////////human printf("gu=1,cho=2,pa=3"); scanf("%d",&b); ///////////computer a=rand() % 3 + 1; if(a==1) {printf("gu");} if(a==2) {printf("cho");} if(a==3) {printf("pa");} /////////// if(a==b){printf("aiko");} /////////// if(b==1 && a==3) {printf("win! pc");} if(b==2 && a==1) {printf("win! pc");} if(b==3 && a==2) {printf("win! pc");} /////////// if(a==1 && b==3) {printf("win! human");} if(a==2 && b==1) {printf("win! human");} if(a==3 && b==2) {printf("win! human");} } このプログラムを実行したんですが、できませんでした。 どこか間違ってますか? また、なんで、printfの中身は("gu=%d,",a)というふうにしないんでしょうか? また、srand((unsigned)time(NULL))は何をしてるんですか? また、scanf("%d",&b)はなんですか? あと、a=rand() % 3 + 1はなんですか? すべて意味が分りません。 なんでこういう順でプログラムしないといけないんでしょうか? printf("gu=1,cho=2,pa=3")は出力されるときどのようになるんでしょうか? なんでprintf("gu=1,cho=2,pa=3")が必要なんですか? 実効がどのように行われているのか全過程をお願いします。

    • ベストアンサー
    • Mac
  • C言語でのじゃんけん

    こんちには。 C言語の乱数を用いてじゃんけんプログラムを作ろうと思っているのですが、 エラーメッセージが出てしまいうまくいきません。 どこがおかしいのでしょうか? #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i,j,k; printf("じゃんけんをしましょう(ぐー:1、ちょき:2、ぱー:3)¥n"); for(k=k; k<=10; k++) { srand(time(NULL)); j=rand()%3+1; scanf("%d",&i); if(i==1&&j==1) printf("私はグーなので、あいこです¥n"); else if(i==1&&j==2) printf("私はチョキなので、あなたの勝ちです¥n"); else if(i==1&&j==3) printf("私はパーなので、あなたの負けです¥n"); else if(i==2&&j==1) printf("私はグーなので、あなたの負けです¥n"); else if(i=2&&j==2) printf("私はチョキなので、あいこです¥n"); else if(i==2&&j==3) printf("私はパーなので、あなたの勝ちです¥n"); else if(i==3&&j==1) printf("私はグーなので、あなたの勝ちです¥n"); else if(i==3&&j==2) printf("私はチョキなので、あなたの負けです¥n"); else if(i==3&&j==3) printf("私はパーなので、あいこです¥n"); else printf("1か2か3を入力してください¥n"); } } OS mountain lionで利用中ですが、 「じゃんけんをしましょう(ぐー:1、ちょき:2、ぱー:3)」 と表示されたまま、うまく動作しません。 教えてください。

    • ベストアンサー
    • Mac
  • 文字と数字の判定について

    c言語を学び始めたばかりの者です。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <ctype.h> main(){ printf("数当てゲームを開始します。\n"); int a,count,n,b; srand((unsigned)time(NULL)); printf("1~10の中から1つ数字を選びます。\n"); a = (rand()%10)+1; printf("選びました\n"); for(count=0;;count++){ printf("その数字はズバリ:"); scanf("%d",&n); //もし数字でなければという文にしたい!! if (?){ printf("数字を入力してください。\n"); continue; } else{ if(n<a){ printf("もっと大きな値です。\n"); printf("%d回間違えました。\n",count+1); continue; } if(n==a){ printf("正解です!!\n"); b=0; exit(0); } if(n>a){ printf("もっと小さな値です。\n"); printf("%d回間違えました。\n",count+1); continue; } } } } というプログラムなのですが数字の判定の仕方が分からなくて最初のifの条件に何をいれればいいのか分からないので分かるかたいましたら教えてもらえないでしょうか?

  • 配列のプログラミングを作ったのですが「

    問題:10問の計算問題を解いて、以下のような成績表を表示するプログラムを作成せよ 例) 第一問 ○ 第二問 × 第三問 × ・・・ 自分が作った解答)#include<stdio.h> #include<stdlib.h> void main() { int a,b,ans,i; int seikai=0; int huseikai=0; int kaitou[10]; srand((unsigned)time(NULL)); printf("暗算\n"); for(i=0;i<10;i++); { printf("%問\n",i+1); a=rand()%10; b=rand()%10; printf("%d+%dは?\n",a,b); scanf_s("%d",&ans); if(ans==a+b) kaitou[i+1]=seikai; else kaitou[i+1]=huseikai; } for(i=0;i<10;i++) { printf("第%d問",i+1); if(kaitou[i+1]==seikai) printf("○\n",seikai); else printf("×\n",huseikai); } } のように作成したのですが、コンパイルは成功しますが思い通りの解答になりません。 どこが間違っているのか指摘してください。

  • じゃんけんゲームについてお願いします。

    #include <stdio.h> #include <stdlib.h> int main() { int n; int player; // プレイヤーの手の保存 int computer; // コンピュータの手を保存 srand(0); // 乱数列を初期化 do { printf("あなたの手を入力してください(グー:1 チョキ:2 パー:3) > "); scanf("%d", &player); computer = rand() % 3 + 1; if(computer == player){ printf("あいこです\n"); }else if(player == 1 && computer == 2){ printf("プレイヤーの勝ちです\n"); }else if(player == 2 && computer == 3){ printf("プレイヤーの勝ちです\n"); }else if(player == 3 && computer == 1){ printf("プレイヤーの勝ちです\n"); }else{ printf("コンピュータの勝ちです\n"); } printf("このまま続けますか?続けない場合は 0 を入力してください > "); scanf("%d", &n); // n が 0 以外だったら続ける }while(n != 0); return 0; } このじゃんけんプログラムで一番最初に何回勝負するか指定出来るようにしたいのですが。 指定しただけ勝負して、最後に勝ち、負け、引き分けの結果を。 お願いいたします。

  • 高(1)男子 初めてC言語でコードを書きました!!

    C言語を独学し始めた高校一年男子です。 「猫でもわかる C言語プログラミング」という本で勉強しています。 その本のポインタなどの難しいところを除いて 一通り読んで1~100までの数を当てる数当てゲームを作ってみました! これまでは、本に書かれていることを写してやっていたので、自分で組むのは初めてです。 これからは、もっと高度なプログラムやゲームを作っていきたいと思っています。 それを踏まえて、今後どのようなことを気をつけて書いていけばいいかなどの アドバイスをコードを見てしてもらいたいのですが、 だれか、お願いできないでしょうか? これが、そのコードです↓ //<if,goto,rand関数を使った数当てゲーム>// #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { printf("いまから数当てゲームをします\n"); R: printf("0~100のうちどれが答えなのか当ててください\n"); int Q,A,Y,i; srand((unsigned)time(NULL)); Q=rand()%100+1; for(i=1; i<6; i++) {printf("あと%d回で当ててください!\n",6-i); scanf("%d",&A); if(Q<A){printf("もっと小さい数です\n"); } else if(Q>A){printf("もっと大きい数です\n"); } else{printf("正解です!!(^O^)/\nもう一回やりますか??\nはい→1\nいいえ→それ以外の数字\n選択してください\n"); scanf("%d",&Y); if(1==Y){goto R;} if(1!=Y){}break;}} printf("\n「「「終了します」」」\n"); return 0; } 長くなりましたが、アドバイスお願いします m(._.)m

  • srand(time(NULL))の使い方

    C言語の勉強中で「ランダムな整数値を作成し、その数値が偶数か奇数かを判定するプログラムをif~else 構文を使って作成」したいのですが下記のプログラムでやってみたのですがまだまだ知識不足で完成しません。知識をお借りできればと思っていますのでどなたか教えてください。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { { int = i; i = rand(); srand((unsigned)time(NULL)); printf("%d\n",rand()); } if(i % 2 == 0) { printf("偶数である:\n",i); } else { printf("奇数である:\n",i); } return 0; }

専門家に質問してみよう