• 締切済み

Java

現在JavaでCPとじゃんけんをするゲームのプログラムを作成中で対戦回数をあらかじめ決定しその回数分のCPUの手を数値で入力すると、 プレイヤーの手にあわせてCPUとじゃんけんを複数回対戦できるというものなんですがどういったプログラムになるでしょうか? CPUの手は任意の数字を3で割った余りから決定される 余りが0のときはgu, 1のときはchoki, 2のときはpaとする 理想の出力結果は [じゃんけんゲームを何回戦実施するか入力してください] 4 [CPUの手として任意の数字をゲーム数分だけ入力してください] 10 20 33 -3 [CPUの手を並び替えますか?yes/no] no CPUの手は並び替えませんでした CPUの手を決定します 負の数は正の数に変換します [あなたの手を入力してください|gu/choki/pa] gu あなたの勝ちです [あなたの手を入力してください|gu/choki/pa] gu あなたの負けです [あなたの手を入力してください|gu/choki/pa] pa あなたの勝ちです [あなたの手を入力してください|gu/choki/pa] gu 引き分けです じゃんけんを終了します 対戦成績は2勝1敗1引き分けでした これが理想です。

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.2

[CPUの手として任意の数字をゲーム数分だけ入力してください] 10 20 33 -3 これの意味と、 [CPUの手を並び替えますか?yes/no] no yesのときは何をするのでしょうか?

  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.1

学校か何かの課題っぽい内容の質問に真正面から答える回答者はここでは少ないです。 せめて、自分で書けたところまでのプログラムを見せてください。「他の部分は書けたけれど、CPUの手の並び替え方が分からない」のような体裁ならアドバイスできますが、丸投げでは印象が悪いです。

関連するQ&A

  • 確率の問題です!

    A君とB君はジャンケンを繰り返し行うものとする。1回あたりにグー、チョキ、パーをA君は1:2:3の割合で、B君は2:1:2の割合で、過去の勝敗とは独立に出す。このとき、次の問いに答えよ。 (1)1回のジャンケンでA君が勝つ確率を求めよ。 (2)6回ジャンケンを行ったとき、A君の勝ちが2回、B君の勝ちが2回、引き分けが2回である確率を求めよ。 (3)900回ジャンケンを行うとき、A君が勝つ回数の期待値を求めよ。 よろしくお願いします><

  • javaじゃんけんゲーの質問

    このjavaじゃんけんゲームで 0を押すまでじゃんけんが続いて0押したら終了して、終了と表示して、じゃんけんの勝敗が表示されるように作りたいんですけどどうしたらいいですか?教えてください import java.io.*; class kadai6 { public static void main(String args[]) throws IOException { System.out.println("これは、じゃんけんゲームです。"); System.out.println("あなたの手を入力して下さい。(1:グー、2:チョキ、3:パー、0:終了)さぁどれにしますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res =Integer.parseInt(str); switch(res){ case 1: System.out.println("あなたの手はグーです。"); break; case 2: System.out.println("あなたの手はチョキです。"); break; case 3: System.out.println("あなたの手はパーです。"); break; default: System.out.println("あなたの入力した値はエラーです。1~3の値を入力してください。"); System.exit(1); break; } int comp = (int)(Math.random()*3) + 1; switch (comp){ case 1: System.out.println("コンピュータの手はグーです。"); break; case 2: System.out.println("コンピュータの手はチョキです。"); break; case 3: System.out.println("コンピュータの手はパーです。"); break; default: System.out.println ("エラーです。"); break; } switch (res -comp) { case -2: System.out.println("コンピュータの勝ちです。"); break; case -1: System.out.println ("あなたの勝ちです。"); break; case 0: System.out.println ("あいこです。"); break; case 1: System.out.println ("コンピュータの勝ちです。"); break; case 2: System.out.println("あなたの勝ちです。"); break; default: System.out.println ("エラーです。"); break; } } }

  • malloc関数の使い方

    このじゃんけんプログラムに、ゲーム終了時ユーザーとコンピュータが出した全ての手を履歴として表示したいのですがmalloc()関数を使って表示させるとしたらどういったプログラムになりますか。 *aと*b、int stage=0を最初に宣言して void rireki(void) { a = (int *)malloc(sizeof(int) * (draw_no+lose_no+win_no)); a[stage++] = comp; b = (int *)malloc(sizeof(int) * (draw_no+lose_no+win_no)); b[stage++] = user; } 関数を作り、最後にprintf文で書いたのですがうまくいきませんでした。 hd[a[i]]という風に配列に配列を入れたのが駄目だったかもしれません。 for(i=0; i<draw_no+lose_no+win_no; i++){ printf("%d回目 ユーザ:%c コンピュータ:%c\n", i+1, hd[b[i]], hd[a[i]]); } また本の課題なのですが、malloc関数は後に出てくるのでmalloc関数を使わずに履歴表示できるかもしれないのですが その場合配列をあらかじめ宣言して格納する手段になるのでしょうか。 よろしくお願いします。 /* 課題3-6 */ #include <time.h> #include <stdio.h> #include <stdlib.h> int user; /* プレーヤの手 */ int comp; /* コンピュータの手 */ int win_no; /* 勝った回数 */ int lose_no; /* 負けた回数 */ int draw_no; /* 引き分けた回数 */ char *hd[] = {"グー", "チョキ", "パー"}; /* 手 */ /* initialize関数の宣言 */ void initialize(void); /* jyanken関数の宣言 */ void jyanken(void); /* count_no関数の宣言 */ void count_no(int result); /* disp_result関数の宣言 */ void disp_result(int result); /* confirm_retry関数の宣言 */ int confirm_retry(void); /* メイン関数 */ int main(void) { int judge; /* 勝敗 */ int retry; /* もう一度 */ initialize(); /* 初期処理 */ do{ jyanken(); /* じゃんけん実行 */ /* コンピュータとプレーヤの手を表示 */ printf("私は%sで、あなたは%sです。\n", hd[comp], hd[user]); judge = (user - comp + 3) % 3; /* 勝敗を判定 */ count_no(judge); /* 勝/負/引分け回数を更新 */ disp_result(judge); /* 判定結果を表示 */ retry = confirm_retry(); }while(retry == 1); printf("%d勝%d敗%d分けでした。\n", win_no, lose_no, draw_no); return (0); } /*--- 初期処理 ---*/ /* initialize関数の定義 */ void initialize(void) { win_no = 0; /* 勝った回数 */ lose_no = 0; /* 負けた回数 */ draw_no = 0; /* 引き分けた回数 */ srand(time(NULL)); /* 乱数の種を初期化 */ printf("じゃんけんゲーム開始!!\n"); } /*--- じゃんけん実行(手の読み込み/生成) ---*/ /* jyanken関数の定義 */ void jyanken(void) { int i; comp = rand() % 3; /* コンピュータの手 (0~2) を乱数で生成 */ printf("\n\aじゃんけんポン …"); for(i=0; i<3; i++) printf(" (%d)%s", i, hd[i]); printf(":"); scanf("%d", &user); /* プレーヤの手を読み込む */ } /*--- 勝/負/引き分回数を更新 ---*/ /* count_no関数の定義 */ void count_no(int result) { switch(result){ case 0: draw_no++; break; case 1: lose_no++; break; case 2: win_no++; break; } } /*--- 判定結果を表示 ---*/ /* disp_result関数の定義 */ void disp_result(int result) { switch(result){ case 0: puts("引き分けです。"); break; /* 引き分け */ case 1: puts("あなたの負けです。"); break; /* 負け */ case 2: puts("あなたの勝ちです。"); break; /* 勝ち */ } } /*--- 再挑戦するか確認 ---*/ /* confirm_result関数の定義 */ int confirm_retry(void) { int x; printf("もう一度しますか … (0)いいえ (1)はい:"); scanf("%d", &x); return (x); }

  • C言語について

    C言語のじゃんけんゲームを作成したいのですが、 仕様は 1.利用者とコンピュータによる対戦形式とします。 2.利用者がキーボードから入力した手(グー・チョキ・パー)と、擬似乱数を用いて生成したコンピュータの手を比較し、利用者の勝ち・あいこ・負けの結果を表示しなさい。 3.利用者の入力が不正の場合には再度入力を促すなど、適切な処理をしなさい。 4.これまでの累積勝利数・引き分け数・敗北数をそれぞれ、user_win・user_draw・user_loseの3つの変数(int型)に格納しなさい。 5.連勝中の場合は「5連勝中!」などと表示させるようにしなさい。 6.あいこである限りは自動的にじゃんけんを反復しなさい。 7.勝敗がついた場合、利用者にまだ継続するか質問した上で、じゃんけんを反復させなさい。 8.じゃんけんを終了した場合、これまでの通算成績として、累積勝利数・引き分け数・敗北数のほか、勝利=累積勝利数÷(累積勝利数+累積敗北数)×100、および、最大勝利数を計算して表示しなさい。 という仕様のじゃんけんゲームを作成したいのですが、下記に書いているまでしかできません。誰か教えていただけないでしょうか。分からなくて困っています。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int a,c; srand(time(NULL)); c = rand()%3+1; printf("手を入力してください [1:グー 2:チョキ 3:パー] "); scanf("%d",&a); if(a==1 && c==1) printf("あなたはグーで、私もグーでした。アイコです。\n"); else if(a==1 && c==2) printf("あなたはグーで、私はチョキでした。あなたの勝ちです。\n"); else if(a==1 && c==3) printf("あなたはグーで、私はパーでした。あなたの負けです。\n"); else if(a==2 && c==1) printf("あなたはチョキで、私はグーでした。あなたの負けです。\n"); else if(a==2 && c==2) printf("あなたはチョキで、私もチョキでした。アイコです。\n"); else if(a==2 && c==3) printf("あなたはチョキで、私はパーでした。あなたの勝ちです。\n"); else if(a==3 && c==1) printf("あなたはパーで、私はグーでした。あなたの勝ちです。\n"); else if(a==3 && c==2) printf("あなたはパーで、私はチョキでした。あなたの負けです。\n"); else if(a==3 && c==3) printf("あなたはパーで、私もパーでした。アイコです。\n"); else printf("正しい手を入れてください。\n"); return 0; }

  • 平均の求め方

    表で平均を出そうとした時に平均の求め方がよくわからなくなってしまいました。 例えば、 4人がそれぞれ任意の回数ジャンケンして、以下のような結果になった。      A B C 1 勝った回数(x) 対戦回数(y) 勝率(x/y) 2      2      5     40.0% 3      1      3     33.3 4      2      2     100.0% 5      0      3     0.0% 6(平均)  1.25    3.25     Z このとき勝率の平均Zは、 (C2+C3+C4+C5)÷4 = C6 それとも A6÷B6 = C6 なのでしょうか? それぞれ対戦回数が違うので、考え方自体が違うのでしょうか? 誰か教えてください、お願いします。

  • 初歩でめんどくさい質問

    すみません。rubyを学習したての者です。 以下のコードで構文エラーがでます。3つです。 どこが悪いのかまったくわかりません。 ------------------------------------------------------ puts 'じゃんけんゲーム開始' sleep 1 #プレイヤーのじゃんけん入力 puts '何を出しますか?' puts '1グー' puts '2チョキ' puts '3パー' input_value = gets #じゃんけんロボの処理 robo = rand(3) + 1 case robo when 1 puts 'ロボはグーを出した!' when 2 puts 'ロボはチョキを出した!' when 3 puts 'ロボはパーを出した!' end #じゃんけん結果判定 player = input_value.to_i case player when 1 puts 'あなたはグーを出した' case robo when 1 #ロボがグーなら puts '引き分けです' when 2 #ロボがチョキなら puts 'あなたの勝ちです' when 3 #ロボがパーなら puts 'あなたの負けです' end when 2 puts 'あなたはチョキを出した' case robo when 1 puts '引き分けです' when 2 puts 'あなたの勝ちです' when 3 puts 'あなたの負けです' end when 3 puts 'あなたはパーを出した' case robo when 1 puts 'あなたの勝ちです' when 2 puts 'あなたの負けです' when 3 puts '引き分けです' end   else #どの条件も成立しなかったとき puts 'あなたは何も出さなかった' puts 'あなたの負けです' end --------------------------------------------------- めんどくさいと思いますが、さらっと見て分かる方教えてください。

    • ベストアンサー
    • Ruby
  • じゃんけんプログラミング Java

    以下のプログラムでは、2人でのじゃんけんプログラムになっています。 このプログラムの /** * 「ジャンケン、ポン!」と声をかけ、 * プレイヤーの手を見て、どちらが勝ちかを判定する。 * * @param player1 判定対象プレイヤー1 * @param player2 判定対象プレイヤー2 * @return 勝ったプレイヤー。引き分けの場合は null を返す。 */ private Player judgeJanken(Player player1, Player player2) { Player winner = null; // プレイヤー1の手を出す int player1hand = player1.showHand(); // プレイヤー2の手を出す int player2hand = player2.showHand(); // それぞれの手を表示する printHand(player1hand); System.out.print(" vs. "); printHand(player2hand); System.out.print("\n"); // プレイヤー1が勝つ場合 if ((player1hand == Player.STONE && player2hand == Player.SCISSORS) || (player1hand == Player.SCISSORS && player2hand == Player.PAPER) || (player1hand == Player.PAPER && player2hand == Player.STONE)) { winner = player1; } // プレイヤー2が勝つ場合 else if ( (player1hand == Player.STONE && player2hand == Player.PAPER) || (player1hand == Player.SCISSORS && player2hand == Player.STONE) || (player1hand == Player.PAPER && player2hand == Player.SCISSORS)) { winner = player2; } // どちらでもない場合は引き分け(nullを返す) return winner; } と /** * オブジェクト指向によるジャンケンプログラム */ public class ObjectJanken { public static void main(String[] args) { // 審判(斎藤さん)のインスタンス生成 Judge saito = new Judge(); // プレイヤー1(村田さん)の生成 Player murata = new Player("村田さん"); // プレイヤー2(山田さん)の生成 Player yamada = new Player("山田さん"); // 村田さんと山田さんをプレイヤーとしてジャンケンを開始する saito.startJanken(murata, yamada); } } を変更してn人のじゃんけんプログラムにしたいと思っています。どのように変更すればよいでしょうか?

  • 多人数のじゃんけんプログラム

    多人数でのじゃんけんプログラムを作成しています。 設定としては、 自分とコンピュータのじゃんけん大会 コンピュータの参加人数は最大で10人、 コンピュータの参加人数は自分で任意選択(1~10人)、誰か参加するかはランダム 出す手は、(自分の手→任意に選択)(コンピュータの手→参加者ごとにランダムで設定) 自分・コンピュータ(1~10)に固有の名前を与えてそれぞれの勝ち数をカウントする じゃんけん終了後、買った回数順に順位をつけて、1位から順に表示する。 ↑のようなプログラムを作成したいと思っております。 私が悩んでいる点は、じゃんけんの結果判定の方法と勝ち数ごとの順位付け・並び替えの方法です。(全部ですね・・・) 結果の判定方法は、 場に出ている手が2種類なら(勝ちか負け)、1種類・3種類なら(あいこ)とし、 2種類の場合には、出ている手と比較し勝敗判定を行う、 という形がいいのかなと思ってます(javaでどう書けばいいのかはわかりません--;) 並べ替えは、配列をうまく使えばいけるでしょうか? ネットやテキストなどで学習中ですが全体的にわからない点が多く、 考え方(結果判定・順位付け&並び替え)やソースサンプルなどお教えいただけると嬉しいです。 どうぞ宜しくお願いいたします。

    • ベストアンサー
    • Java
  • トレーディングカードゲームの仕組みを教えてください

    カードゲームのルールが、全くわかりません。 「遊戯王」、「ポケモン(のカードゲームもあるんでしょうか?)」、「イナズマイレブン」「ヴァンガード」「戦国イクサ」「カイブツクロニクル」などなど。なんとなく、カードの種類がたくさんあって、その一つ一つに属性や相性があり友達(ユーザー同士)と競いあうのはわかりますが、やはり難しいです。なにが勝ちで、どうやって負けになるのか。複数人数での対戦は、どうなって成り立っているのか。ジャンケンのように単純でないようにも思えます。仕事の関係で、色々なゲームの仕組みを知っておく必要性がありますので、詳しい方がいたら教えてほしいです。よろしくお願いします。

  • C言語 

    C言語でAとBがじゃんけんをして勝ち負けを出力するプログラムをつくりたいのですが、間違いを教えてください。(AがgでBがcならAの勝ち。AがgでBがpならBの勝ち。AがgでBがgなら引き分け。) #include<stdio.h> #include<conio.h> void main() { int A,B; printf("文字を入力せよ"); scanf("%d",&A); scanf("%d",&B); if(A=='g'||B=='c') { printf("Aの勝ち"); } if(A=='g'||B=='p') { printf("Bの勝ち"); } if(A=='g'||B=='g') { printf("引き分け"); } getch(); }

専門家に質問してみよう