• ベストアンサー

Cプログラミング

作成したジャンケンをするゲームに対して、人間かコンピュータのどちらかが先に5勝するまで繰り返すように改造せよ。(それぞれの対戦者に対する変数を用意し、勝つごとにその変数に1を加えていく。どちらかが5になれば終了するような反復構造にすればよい。) #include <stdio.h> #include <stdlib.h> main(){ int jibunn,aite; printf("Select rock(0) scissors(1) paper(2)\n"); printf("jibunn="); scanf("%d",&jibunn); srand(time(NULL)); aite=rand()%3; printf("aite=%d\n",aite); while(jibunn==aite){ printf("Drow\n"); printf("Select rock(0) scissors(1) paper(2)\n"); printf("jibunn="); scanf("%d",&jibunn); srand(time(NULL)); aite=rand()%3; printf("aite=%d\n",aite); } if(jibunn==aite){ printf("Drow\n"); } else if((jibunn==2)&&(aite==0)){ printf("You win!\n"); } else if((jibunn==0)&&(aite==1)){ printf("You win!\n"); } else if((jibunn==1)&&(aite==2)){ printf("You win!\n"); } else { printf("You lose…\n"); } } ここまでは出来たのですが、これにどのように付け足せばよいのでしょうか? 回答よろしくお願いします。

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

  • ベストアンサー
  • nao-y
  • ベストアンサー率58% (111/190)
回答No.4

#1です。 >それぞれの対戦者に対する変数を用意するのがよく分 >からないんです。 >どのように変数を用意すればいいのでしょうか? 回数を数えるので、数値を代入できて、それぞれの対戦者が勝ったときに1ずつ足していく変数を用意することになります。 具体的には、 int jibunn_cnt=0, aite_cnt=0; という変数宣言をして、適切な場所に以下の文を入れてください。  jibunn_cnt++; aite_cnt++; >あと、51行目が実行されることがない理由はwhile文 >で書いてあるからでしょうか? はい、そうです。 49行目にきたときには、その前のwhile文を抜けた後= (jibunn==aite)という条件を満たさなくなったとき、ですので、49行目の(jibunn==aite)という条件を満たすことはありません。

その他の回答 (3)

回答No.3

   そのものずばりじゃあないけど、 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int player, cpu, judge_v, i; int count[3] = {0}; char *symbol[3] = {" Rock ", "Scissors", " Paper ",}; char *judge_s[3] = {"Draw", "You Win", "You Lose",}; srand((unsigned)time(NULL)); while(count[1] < 5 && count[2] < 5){ printf("Rock(0), Scissors(1), Paper(2) : "); scanf("%d", &player); cpu = rand() % 3; printf("Player %s, Cpu %s", symbol[player], symbol[cpu]); judge_v = (cpu - player + 3 ) % 3; printf(" %s\n\n", judge_s[judge_v]); count[judge_v] ++; } printf("Player %d, Cpu %d, Draw %d", count[1], count[2], count[0]); return 0; }  

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.2

#1です。 #1の回答文を一部修正します。 誤: >反復の条件はそれぞれの対戦者用の変数のどちらかが >5未満のとき、という条件になりますね。 正: >反復の条件はそれぞれの対戦者用の変数のどちらも >5未満のとき、という条件になりますね。 (もしくは、ループを抜ける条件は、それぞれの対戦者用の変数のどちらかが5未満のとき、という条件になります。)

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.1

#これを書いているあいだにそのものずばりの #回答が出ている可能性がありますが、 #ご自分で考えられたほうが力になると思いますので。。。 カッコ内の >それぞれの対戦者に対する変数を用意し、勝つごとに >その変数に1を加えていく。どちらかが5になれば終了 >するような反復構造にすればよい。 の部分をどう書いたらいいかわからないということでしょうか? まず、 >それぞれの対戦者に対する変数を用意し、勝つごとに >その変数に1を加えていく。 を書いてみてください。 あとは、 11行目(空白行もカウントしてます)のprintf("Select rock(0) scissors(1) paper(2)\n");  から 最後から5~7行目の printf("You lose…\n"); } をループ構造の中に入れるだけですね。 反復の条件はそれぞれの対戦者用の変数のどちらかが 5未満のとき、という条件になりますね。 ちなみに51行目の printf("Drow\n"); が実行されることはありませんが、それはなぜかわかりますか?

doratao
質問者

補足

回答ありがとうございます。 それぞれの対戦者に対する変数を用意するのがよく分からないんです。 どのように変数を用意すればいいのでしょうか? あと、51行目が実行されることがない理由はwhile文で書いてあるからでしょうか?

関連するQ&A

  • プログラミング

    ランダムの数値を入力してその数値より大きければ正解より大きいと表示して小さければ小さいと表示し正解なら正解ともだすプログラムをつくっています 正解まで何回かかったかとも表示したいと思います 上手く実行できないのでご教授ください #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ int i,x,y; srand((unsigned int)time(NULL)); printf("%\n",i); i=rand()%100; //0以上100以下の整数を生成 y=0; printf("1以上100以下の整数を入力してください。\n"); scanf( "%d", &x ); /* 数値を入力させる */ printf("1以上100以下の整数を入力してください。\n"); y=y+1; if( x == i ) { printf("%d回目で当たりました。\n",y); printf("%d回目で当たりました。\n",y); break; /* 無限ループ */ } else{ if ( x < i ) //printf("正解より大きいです。\n"); printf("正解より大きいです。\n"); else //printf("正解より小さいです。\n"); printf("正解より小さいです。\n"); } } //return0;

  • 20マスのスゴロクをプログラミングしたいのですが、

    20マスのスゴロクをプログラミングしたいのですが、 20マス丁度でないと上がれないようにしたいです。 #include<stdio.h> #include <stdlib.h> #include <time.h> main() { srand((unsigned) time(NULL)); int sai, rest=19, masu=1; while(masu != 20){ sai= rand() % 6 + 1; printf("サイコロ %d、",sai); masu +=sai; rest -=sai; if(masu<20){ printf("今のマス %2d、 ",masu); printf("残り %2d\n",rest);} else if(masu==20) { printf("上がり\n",sai);} else { printf("上がれない\n",sai);} } return(0); } ここまでは出来たのですが、うまく実行できず上がれないが無限ループしてしまいます。 どのようにしたらうまくいくでしょうか? 教えてください!

  • C++言語について。構文エラー

    ジャンケンゲームを作ってたんですが サイトを参考にしながらやってたんですが、どこかでミスったみたいで。 コピーしてやるのはイヤなので、自分で打ちたいんです。   どうか間違いを指摘してもらえないでしょうか?            #include <stdio.h> #include <stdlib.h> int main() { int n; int p;//player int c;//computer srand(0);//乱数の初期化 do { //プレイヤーの手 printf("あなたの手を入力してください\n(グー:1、チョキ:2、パー:3\n"); scanf("%d", &p); //コンピュータの手 c = rand() % 3 + 1; //勝ち負け判定 if(p == c){ printf("draw\n"); }else if(p == 1 && c == 2){ printf("WIN!!\n"); }else if(p == 2 && c == 3){ printf("WIN!!\n"); }else if(p == 3 && c == 2){ printf("WIN!!\n"); }else{ printf("lose...\n"); } //続けるかどうかの判定 printf("try agin?\nNO(0を入力)---"); scanf("%d", &n); //nが0以外だったら続ける }while(n != 0); return 0; }        で、エラーが構文エラー : ';' が 'return' の前にありません。 というものでした。   よろしくおねがいします。

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

    問題: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); } } のように作成したのですが、コンパイルは成功しますが思い通りの解答になりません。 どこが間違っているのか指摘してください。

  • プログラミングに関して

    多数省略しておりますが今このような双六をプログラミングしているのですが位置、所持金情報が上手く更新されず、上手くいかなくて困ってます。 どうすればいいでしょうか?教えてください。お願いします。 //メイン関数 int main(void){ printf("map説明 s:start,c:chance,$:money,!:振り出しに戻る,G:goal\n"); int position=0,money=500; do{ do_turn(position,money); }while(money<<0 || position==15); if(money<<0){ printf("gameover"); } } //イベント作成 void do_event(int position,int money) { int number; number=position; switch(number) { case 1:printf("チャンスタイム\n"); game1(money); break; case 2:printf("game2"); game2(money); break; case 3: printf("100Gを手に入れた"); money += 100; break; //マップ作成 void print_map(int position) { int i; for( i = 0; i <= position + 5; i++ ) { printf("%3d|",i); if(position==i){ printf("●|"); } else if(!(position==i)){ printf("○|"); } printf(" %c\n",event_name[i]); } return ; } void do_turn(int position,int money){ int me,go,energy; double z, R15=RAND_MAX+1; srand ((unsigned int) time(NULL)*314159265); z = rand() / R15; me = (int)(z*3) + 1; print_map(position); printf("現在の所持金:%dG\n",money); wait_enter(); printf("\nエネルギーを選んでください\n"); printf("1.ウコンの力 100G 2.ユンケル 200G\n"); scanf("%d",&energy); if(energy==1){ money-=100; if(me==1 || me==3) go=1; else if(position==14) go=1; else if(me==2) go=2; position+=go; printf("%d進みます\n",go); } else if(energy==2){ money-=200; if(me==1 || me==3) go=2; else if(position==14) go=1; else if(me==2) go=1; position+=go; printf("%d進みます\n",go); } print_map(position); do_event(position,money); printf("%d,%d",position,money); wait_enter(); system("pause"); } //ゲームを行う関数(じゃんけんゲーム) void game1(int money){ int comp,you; double r15=RAND_MAX+1; char* s[3]; s[0]="グー";s[1]="チョキ";s[2]="パー"; srand((unsigned int) time(NULL)*314159265); printf("じゃんけんをします勝てばお金が1.5倍に、負ければ半額を頂きます\n"); while(1){ comp=(int)(rand()/r15*3)+1; printf("1:グー、2:チョキ、3:パー ?..."); scanf("%d",&you); printf("あなたは%s,わたしは%s\n",s[you-1],s[comp-1]); if(you==comp)printf("あいこ"); else if((you+3-comp)%3==2){ printf("おめでとう、あなたの勝ち。お金が1.5倍になります\n"); money=money+money/2; break; } else{ printf("残念。あなたの負けです。お金は頂きます\n"); money=money/2; break; } } printf("所持金%dG\n",money); }

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

    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; }

  • 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
  • 高(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

  • C言語 スロットみたいにするやり方が分かりません

    今自由課題でスロットのように数字を乱数で表示させて、Enterを押すと押したときの値を表示させたいです しかし、今書いているやつだとなぜかスロットみたいに数字の表示ができません。 おそらくif文で一旦止まってしまっていると思うのですが、どこが悪いのか教えてください。 #include <stdio.h> #include <stdlib.h> int main(){ int a,b,c; srand(time(NULL)); c = getchar(); b = rand()%6+1; for(;;){ a = rand()%6+1; printf("\033[H\033[J"); printf("%d",a); if(getchar() == '\n'){ printf("あなたのサイコロの値は%dです!!\n",a); break; }else{ continue; } } return 0; }

  • C言語で数当てゲーム

    私は最近5月からCのプログラミングを学び始めた中3なんですが じゃんけんゲームと丁半ゲームを今までに作りました で今回数当てゲームを作ってみたのですが何回作り直しても エラーが出ます(コンパイラのエラーではなくWindows?のエラーのようなもの) じゃんけんゲームなどと同じように作ったつもりなのですが・・・・ どうなっているのでしょうか? ソースは↓です #include <stdio.h> #include <time.h> #include <stdlib.h> #include <conio.h> int main() { int kazu,i,x; printf("数当てゲーム!!\n"); srand(time(NULL)); x=0; i=0; do { kazu=rand()%9+1; printf("数を入力してください(1~9)\n"); scanf("%d",i); if(i<10){ if(i==kazu) { printf("当たり!!\n続けるなら0やめるなら0以外を入力"); scanf("%d",x); } else {printf("残念・・・はずれ\n続けるなら0やめるなら0以外を入力"); scanf("%d",x);} } else {printf("入力ミスです\n続けるなら0やめるなら0以外を入力"); getch();} }while(x==0); return 0; } 一応コンパイラのエラーは出ていないのですが・・・ 初心者なのでわかりません。 どこが原因なのか詳しくおしえてください

専門家に質問してみよう