Javaでじゃんけんゲームを作った（CLI）

#仕様
・グー：1、チョキ：2、パー：3とする。
・対戦人数は1対1とする。
・対戦回数は1回とする。

#動作画面
![janken.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190809/a6ab73d4-7a5f-6fc8-60c8-3c455fa1cb51.gif)

#ソースコード
##Main.java
メインクラス

```
package janken;

public class Main {
	public static void main(String[] args) {
		GameController gc = new GameController();
		gc.start();	// ゲーム開始
		gc.end();	// ゲーム終了
	}
}
```

##GameController.java
じゃんけんゲームのコントローラクラス

```
package janken;

/**
 * GameController Class
 * ゲームをコントロールする
 * @author user
 *
 */
public class GameController {
	private Hand myHand;;
	private Hand opponentHand;
	private Rule rule;

	/**
	 * コンストラクタ
	 */
	public GameController() {
		this.rule = new Rule();
		this.myHand = new Hand();
		this.opponentHand = new Hand();
	}

	/**
	 * start method
	 * ゲームを開始する
	 */
	public void start() {
		System.out.println("じゃんけんを始めます。");

		do {
			myHand.setHand();
			opponentHand.setRandomHand();
			rule.showHands(myHand, opponentHand);
		}while(rule.isDraw(myHand, opponentHand));

		rule.showResult(myHand, opponentHand);
	}

	/**
	 * end method
	 * ゲームを終了する
	 */
	public void end() {
		System.out.println("じゃんけんを終了します。");

	}
}
```

##Hand.java
じゃんけんの手のオブジェクトクラス

```
package janken;
import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;

/**
 * Hand Class
 * じゃんけんの手のオブジェクトクラス
 * @author user
 *
 */
public class Hand {
	private int hand;

	/**
	 * setHand method
	 * 手を標準入力で設定する
	 */
	public void setHand() {
		System.out.println("手を入力してください。");
		System.out.println("グー：1、チョキ：2、パー：3");

		while(true) {
			try {
				Scanner scan = new Scanner(System.in);
				this.hand = scan.nextInt();
				break;
			}catch(InputMismatchException e){
				System.out.println("数値で入力してください。");
			}
		}
	}

	/**
	 * setRandomHand method
	 * 手をランダムに設定する
	 */
	public void setRandomHand() {
		Random random = new Random();
		this.hand = random.nextInt(3)+1;
	}

	/**
	 * handName method
	 * 手の名称を返す
	 * @return
	 */
	public String handName() {
		String handName = null;

		if(this.hand == 1) handName = "グー";
		if(this.hand == 2) handName = "チョキ";
		if(this.hand == 3) handName = "パー";

		return handName;
	}

	/**
	 * hand method
	 * 手の値を返す
	 * @return
	 */
	public int hand() {
		return this.hand;
	}
}
```

##Rule.java
じゃんけんのルールを定義するクラス

```
package janken;

/**
 * Rule Class
 * ルールを定義するクラス
 * @author user
 *
 */
public class Rule {
	/**
	 * showHands method
	 * 自分の手と相手の手を表示する。
	 * @param myHand
	 * @param opponetHand
	 */
	public void showHands(Hand myHand, Hand opponetHand) {
		System.out.print("私の手は、"+ myHand.handName() +"。");
		System.out.print("相手の手は、"+ opponetHand.handName() +"。");
		System.out.println("");
	}

	/**
	 * isDraw method
	 * あいこを判定する
	 * @param myHand
	 * @param opponetHand
	 * @return
	 */
	public boolean isDraw(Hand myHand, Hand opponetHand) {
		if(myHand.hand() == opponetHand.hand()) {
			System.out.println("あいこでしょ！");
			return true;
		}

		return false;
	}

	/**
	 * showResult method
	 * 勝敗結果を表示する
	 * @param myHand
	 * @param opponetHand
	 */
	public void showResult(Hand myHand, Hand opponetHand) {
		String result;
		// 1:グー、2：チョキ、3:パー
		if((myHand.hand() == 1 && opponetHand.hand() == 2) ||
		    (myHand.hand() == 2 && opponetHand.hand() == 3) ||
			(myHand.hand() == 3 && opponetHand.hand() == 1)) {
			result = "勝ち";
		}else {
			result = "負け";
		}
		System.out.println("あなたの" + result + "です。");
	}

}
```

#Github
https://github.com/TakumiKondo/janken