【Java】初心者がコンソール上で動く、ジャンケンゲームを作ってみた

#はじめに
2018年はいろんな言語を中途半端に触って、それぞれのやりたいことは理解できるが動くものを自分一人で作ることはできないことに虚しさを感じてjava/kotlinの2つに絞って勉強してます。

オブジェクト指向を理解しようと頑張って書いたのですが、微妙です。。

ちなみに、スパゲッティコードです。

#作ってみたもの
普通のじゃんけんと同じで、5回勝負で勝ち点の多い方が勝利です。

デメリットとしては、PCがなにを出したのかわからないので不便です。。


**こんな感じになります。**

```console.
自分のPlayerに名前をつけてあげましょう
初心者
初心者さんとして戦います
【じゃんけん開始】

【1回戦目】
===============
stone    ：   0
scissors ：   1
paper    ：   2
===============
ここに入力してください
1
----------------
チョキ（初心者さん） vs グー
----------------
初心者さんは負けました
:
:
:
:
【5回戦目】
===============
stone    ：   0
scissors ：   1
paper    ：   2
===============
ここに入力してください
2
----------------
パー(初心者さん)  vs パー
----------------
引き分けです

【じゃんけん終了】
==================================
結果：【引き分けです】
==================================
```


##意識したこと（僕なりのオブジェクト指向）

１、先に```Main.java```ファイルにずべての処理を書きます。
２、部品化できるところは一つにまとめてメソッドにします。（極力Main内は、少なくした方がいい）
３、クラスを分けれるところはクラスに分けていく

```Main.java

import java.io.IOException;
import java.util.Random;
import java.util.Scanner;

import org.ietf.jgss.Oid;
import org.omg.CORBA.PUBLIC_MEMBER;

public class Main implements jankeninterface{

	
	public static void main(String[] args) throws IOException {
		
		//プレイヤーの設定
		Player p = new Player();
	    
		//じゃんけんの処理
		Player.jankenbuttle();
	
		//結果表示
		result();


	}
	
	

	public static void result() {
		System.out.println("");
		System.out.println("【じゃんけん終了】");
		System.out.println("==================================");
		if(Player.pcWinCount > Player.playerWinCount) {
			System.out.println("結果：【PCが勝利しました】");
		}else if(Player.pcWinCount < Player.playerWinCount) {
			System.out.println("結果：【"+Player.playername+"さんが勝利しました】");
		}else {
			System.out.println("結果：【引き分けです】");
		}
		System.out.println("==================================");
	}
}

```
```Player.java

import java.io.IOException;
import java.util.Random;
import java.util.Scanner;

public class Player {
	public static int playerWinCount = 0;
	public static String playername;
	public static int pcWinCount = 0;
	
	public Player() {
		// TODO Auto-generated constructor stub
		createName();
	}
	
	public static void createName() {
		System.out.println("自分のPlayerに名前をつけてあげましょう");
		Scanner name = new Scanner(System.in);
	    playername = name.nextLine();
	    
	    System.out.println(playername+"さんとして戦います");
	}
	
	public static void jankenbuttle() throws IOException {
		System.out.println("【じゃんけん開始】");

//		じゃんけん開始
		for(int i = 1;i <= 5; i++) {
		System.out.println("");	
		System.out.println("【"+i+"回戦目】");
		
		System.out.println("===============");
		System.out.println("stone    ：   0");
		System.out.println("scissors ：   1");
		System.out.println("paper    ：   2");
		System.out.println("===============");
		
//		PCのじゃんけんの手
		Random r = new Random();
		int pcNum = r.nextInt(3);
		
		System.out.println("ここに入力してください");
		
//		playerのじゃんけんの手
		Scanner s = new Scanner(System.in);
		int playerNum = s.nextInt();
		
//		playerが勝利する場合
		if(pcNum == 0 && playerNum == 2 || 
		   pcNum == 1 && playerNum == 0 || 
		   pcNum == 2 && playerNum == 1 ) {
			playerWinCount++;
			if(pcNum == 0) {
				System.out.println("");
				System.out.println("パー("+playername+"さん)  vs グー");
			}else if(pcNum == 1) {
				System.out.println("");
				System.out.println("グー("+playername+"さん)  vs チョキ");
			}else {
				System.out.println("");
				System.out.println("チョキ("+playername+"さん)  vs パー");
			}
			System.out.println(playername+"さんが勝ちました");
				
			
//			playerが負ける場合
		}else if(pcNum == 0 && playerNum == 1||
				 pcNum == 1 && playerNum == 2||
				 pcNum == 2 && playerNum == 0) {
			if(pcNum == 0) {
				System.out.println("----------------");
				System.out.println("チョキ（"+playername+"さん） vs グー");
				System.out.println("----------------");
			}else if(pcNum == 1) {
				System.out.println("----------------");
				System.out.println("パー("+playername+"さん) vs チョキ");
				System.out.println("----------------");
			}else {
				System.out.println("----------------");
				System.out.println("グー("+playername+"さん)  vs パー");
				System.out.println("----------------");
			}
			pcWinCount++;
			System.out.println(playername+"さんは負けました");
		}else {
			if(pcNum == 0) {
				System.out.println("----------------");
				System.out.println("グー("+playername+"さん)  vs グー");
				System.out.println("----------------");
			}else if(pcNum == 1) {
				System.out.println("----------------");
				System.out.println("チョキ("+playername+"さん)  vs チョキ");
				System.out.println("----------------");
			}else {
				System.out.println("----------------");
				System.out.println("パー("+playername+"さん)  vs パー");
				System.out.println("----------------");
			}
			System.out.println("引き分けです");
			
		}
		
		
		}
	}
	
}

```

```javainterface.java
public interface jankeninterface {
	public static final int stone = 0;
	public static final int scissors = 1;
	public static final int paper = 2;
}
```


##工夫したこと
じゃんけんが始まるたびにプレイヤーネームを設定できる点

この部分です。

```console.
自分のPlayerに名前をつけてあげましょう
->初心者
初心者さんとして戦います
```

コンストラクトの引数に名前を書こうとしたのですが、名前はつけれるもののソースコードに書き込まないと変更されないので、頑張ってみました。



もっと頑張らねば。


#参考
https://www.youtube.com/watch?v=FsRHdL_r0pE
[なぜあなたはオブジェクト指向開発ができないのか](
https://www.amazon.co.jp/%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFJava%E3%81%A7%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E9%96%8B%E7%99%BA%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B%E2%80%95Java%E3%81%AE%E5%A3%81%E3%82%92%E5%85%8B%E6%9C%8D%E3%81%99%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E5%B0%8F%E6%A3%AE%E8%A3%95%E4%BB%8B/dp/477412222X/ref=sr_1_3?adgrpid=66613605598&hvadid=338538542065&hvdev=c&hvlocphy=1009308&hvnetw=g&hvpos=1t1&hvqmt=b&hvrand=12317346212691983355&hvtargid=kwd-641648696106&hydadcr=27264_11561112&jp-ad-ap=0&keywords=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91+%E3%81%AA%E3%81%9C&qid=1557994929&s=gateway&sr=8-3)