Java
Eclipse
初心者
じゃんけん

初心者がJavaでじゃんけんゲーム

勉強始めて1ヶ月くらいなので復習ついでにじゃんけんゲーム書いてみました。
メインメソッドだけのプログラムは割とすぐ書けたんですが、
オブジェクト指向らしきものを作ろうとしたら結構難航しました。
独学なので色々とツッコミどころあるんじゃないかと思います。

コード

本体

Main.java
package janken;

public class Main {
    @SuppressWarnings("resource")
    public static void main(String[] args) {
        final String errorException = "正しい数値を入力してください。";
        final String errorMessage = "0~2、もしくは99の数値を入力してください。";
        final String exitMessage = "終了します";
        final String menuMessage = "0:グー 1:チョキ 2:パー 99:終了";
        Player you = new Player();
        Player enemy = new Player();

        for(;;) {
            System.out.println(menuMessage);
            try {
                you.jankenNum = new java.util.Scanner(System.in).nextInt(); 
                enemy.jankenNum = new java.util.Random().nextInt(3);
                if(you.jankenNum == 99) {
                    //終了
                    System.out.println("");
                    System.out.println(exitMessage);
                    System.out.println("");
                    break;
                } else if(you.jankenNum < 0 | you.jankenNum > 2) {
                    //正しくない数値が入力されたら…
                    System.out.println("");
                    System.out.println(errorMessage);
                    System.out.println("");
                } else {
                    //バトルメソッド呼び出し。
                    Battle result = new Battle();
                    result.battle(you, enemy);
                }

            } catch(java.util.InputMismatchException error) {
                //数値以外が入力されたら…
                System.out.println("");
                System.out.println(errorException);
                System.out.println("");
            }
        }
    }
}

プレイヤー

Player.java
package janken;

public class Player {
    //プレイヤーの勝敗数を保持。じゃんけんの手、勝敗などを定義。
    int jankenNum;
    final String goo = "グー";
    final String choki = "チョキ";
    final String par = "パー";
    int win; int lose; int draw;

    String Hand() {
        //プレイヤーの数字をじゃんけんの手に変換。
        switch(this.jankenNum) {
        case 0:
            return this.goo;
        case 1:
            return this.choki;
        case 2:
            return this.par;
        default:
            return null;
        }
    }

    void board(int win, int lose, int draw) {
        //勝敗数を表示する。
        System.out.println("Win:" + this.win + " Lose:" + this.lose + " Draw:" + this.draw);
    }
}

バトル

Battle.java
package janken;

public class Battle {
    //勝敗を決める。
    final String aiko = "あいこ";
    final String kachi = "勝ち";
    final String make = "負け";

    void battle(Player pc1, Player pc2) {
        //プレイヤー同士での勝敗を決定する。
        int result = (pc1.jankenNum - pc2.jankenNum +3) % 3;
        switch(result) {
        //お互いの手から勝敗を決定し、スコアとして保管。結果を表示。
        case 0:
            System.out.println("");
            System.out.println(pc1.Hand() + " VS " + pc2.Hand());
            System.out.println(aiko);
            pc1.draw += 1; pc2.draw += 1;
            pc1.board(pc1.win, pc1.lose, pc1.draw);
            System.out.println("");
            break;
        case 1:
            System.out.println("");
            System.out.println(pc1.Hand() + " VS " + pc2.Hand());
            System.out.println(make);
            pc1.lose += 1; pc2.win += 1;
            pc1.board(pc1.win, pc1.lose, pc1.draw);
            System.out.println("");
            break;
        case 2:
            System.out.println("");
            System.out.println(pc1.Hand() + " VS " + pc2.Hand());
            System.out.println(kachi);
            pc1.win += 1; pc2.lose += 1;
            pc1.board(pc1.win, pc1.lose, pc1.draw);
            System.out.println("");
            break;
        }
    }
}

とりあえずそれっぽく動いたので満足。
どう分割していくかとか考えるとなかなか難しいですね。