失礼いたします。
今社内の研修でJavaを使用して「じゃんけんゲーム」を制作しております。
処理内容はこちらです。
・playerとCPUの2人でじゃんけんをする。
・playerは「1:グー、2:チョキ、3:パー」で整数を選択し、CPUは出目をランダム表示。
・先に3勝した方の勝ちとする
・2連勝したら-1ptされる ※
※2連勝したら-1ptされる
「2連続で勝利した場合、同時にその方に-1pt」
例えば、
1回戦目 playerが勝ち:CPUが負け スコア【1pt:0pt】
2回戦目playerが勝ち:CPUが負け スコア【2pt:0pt】
しかしここでplayerが2連勝なので、-1pt スコア【1pt:0pt】
3回戦目
・
・
・
というような流れの処理となる。
2連勝して-1ptの処理が発生した後は、連勝のカウントをリセットし、続きを始めます。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
本題なのですが、上の処理内容で「2連勝したら-1ptされる 」を加えたところでコンパイルすると
エラーは起きないのですがスコアが表示されません。
結果が「あいこ」になった時のみスコアは表示されるみたいです。
下記のソースコードの「//勝ち負け判定」の場所にある
System.out.println("player" + playerPt + "対cpu" + cpuPt);
if(playerPt >= 3) {
System.out.println("playerの・・・"); break; } else if(cpuPt >= 3) { System.out.println("playerの・・・"); break; }
この部分がスコアにあたるコードです。
このスコアの処理の上に「2連勝したら-1ptされる」の処理を打ち込んでいて
おそらくはそこからの干渉・不備が原因ではないかと考え、 break;を入れる事も試したのですが、違うみたいでした。
じゃんけんの動作は正常に動いているので、スコアが表示され、なおかつ「2連勝したら-1ptされる」の処理も反映されるようにするには
どこ部分を修正すればよいのでしょうか?
プログラミング初心者ということもあり、理解に時間が掛かったりもありますが、出来るだけ分かり易くお願いできればと存じます、、
宜しくお願い致します。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
package janken; import janken.Enums.ErrorInfo; import janken.Enums.S手; import janken.Enums.S結果; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * じゃんけん実行クラス */ public class ExeJanken { /** * じゃんけん実行 * * @param args */ public static void main(String[] args) { S結果 result = null; int playerPt = 0; int cpuPt = 0; int lastWinner = 0; //勝敗が決まるまで実施 while(true) { // Playerの手を取得 S手 playerHand = readPlayerHand(); if(playerHand == null) { // 未入力で終了 return; } // 手をセット Janken janken = new Janken(playerHand); // 手を表示 System.out.println(" → " + janken.getInputHand()); // 勝ち負け判定 result = janken.judge(); if(result == S結果.あいこ) { System.out.println("あいこでしょ!"); } else if (result == S結果.勝ち) { System.out.println("playerの勝ち"); playerPt ++; } else if (result == S結果.負け) { System.out.println("cpuの勝ち"); cpuPt ++; } else { break; } if(result == S結果.勝ち) { lastWinner = 1; } if(lastWinner == 1 && result == S結果.勝ち) { playerPt--; lastWinner = 0; } if(result == S結果.負け) { lastWinner = 2; } if(lastWinner == 2 && result == S結果.負け) { cpuPt--; lastWinner = 0; } System.out.println("player" + playerPt + "対cpu" + cpuPt); if(playerPt >= 3) { System.out.println("playerの・・・"); break; } else if(cpuPt >= 3) { System.out.println("playerの・・・"); break; } } // 結果を表示 outputResult(result); } /** * Playerの手を入力 * * @return 入力した手 */ private static S手 readPlayerHand() { // 標準入力を1行バッファ BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); // 正しい値が読み込まれるまでループ String line = null; while(true) { System.out.print("じゃんけん[1:グー、2:チョキ、3:パー ※未入力Enterで終了] : "); try { // 入力文字列を取得(1行) line = input.readLine(); if(line.trim().isEmpty()) return null; // 入力チェック ErrorInfo errInfo = validate(line); if(null != errInfo){ System.out.println(errInfo.getMsg()); continue; } } catch (IOException e) { e.printStackTrace(); } break; } // Playerの手を返却 return S手.getEnum(Integer.parseInt(line)); } /** * 入力チェック * * @param inValue チェックする文字列 * @return エラー情報 正常の場合:null、異常の場合:エラー情報 */ private static ErrorInfo validate(String inValue) { //桁数チェック if(inValue.length() != 1) return ErrorInfo.LENGTH_ERROR; //入力文字チェック if(!inValue.matches("[123]")) return ErrorInfo.INVALID_VALUE; return null; } /** * 結果出力 */ private static void outputResult(S結果 result) { System.out.println(result.name() + "!!!"); } }
