ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (Java)자바로 가위바위보 게임 만들기(2)
    개발 완료 2020. 4. 2. 23:42
    반응형

    (Java) 자바로 가위바위보 게임 만들기(1)

     

    (Java)자바로 가위바위보 게임 만들기(1)

    목적 Java를 이용해 콘솔에 가위바위보 게임을 찍기 코드 package Java_Study; import java.util.Scanner; public class Main { public static void main(String[] args) { String[] ran = {"Rock", "Scissor", "P..

    yeon-kr.tistory.com

     

    의 두번째 시간입니다.


    목적

    • enum.values()를 이용하기
    • enum의 values값들끼리 비교하는 것이, String 배열 값들끼리 비교하는 것보다 빠르다
    • while문을 switch ~ case로 직관적으로 만들기

     코드

    package Java_Study;
     
    import java.util.Scanner;
     
    public class Main1 {
        private enum Computer{
             Rock, Scissor, Paper;
     
             public static Computer getRandom() {
                 return values()[(int)(Math.random()*values().length)];
             }
        }
     
        public static void main(String[] args) {
     
            System.out.println("Rock! Scissor! Paper!");
     
            Scanner scanner = new Scanner(System.in);
            String me = scanner.nextLine();
     
            final Computer random = Computer.getRandom();
     
            System.out.println(random);
     
            switch (random) {
                case Rock:
                    if (me.equals("Rock")) {
                        System.out.println("Draw!");
                        break;
                    }
                    if (me.equals("Scissor")) {
                        System.out.println("You lose!");
                        break;
                    }
                    if (me.equals("Paper")) {
                        System.out.println("You win!");
                        break;
                    }
     
                case Paper:
                    if (me.equals("Rock")) {
                        System.out.println("You lose!");
                        break;
                    }
                    if (me.equals("Scissor")) {
                        System.out.println("You win!");
                        break;
                    }
                    if (me.equals("Paper")) {
                        System.out.println("Draw!");
                        break;
                    }
     
                case Scissor:
                    if (me.equals("Rock")) {
                        System.out.println("You win!");
                        break;
                    }
                    if (me.equals("Scissor")) {
                        System.out.println("Draw!");
                        break;
                    }
                    if (me.equals("Paper")) {
                        System.out.println("You lose!");
                        break;
                    }
            }
        }
    }

     

     

     


    바뀐 코드 설명

        private enum Computer{
             Rock, Scissor, Paper;
    
             public static Computer getRandom() {
                 return values()[(int)(Math.random()*values().length)];
             }
        }

     

    Array 배열 대신에,

    enum 클래스를 이용하여 가위바위보의 값들을 가져옵니다.

     

    여기서 enum 클래스는 private으로 해야 합니다.

    다른 곳에서 접근을 해서 값을 바꾸는 것을 방지합니다.

     

    getRandom() 메서드로 enum 값들을 랜덤으로 가져옵니다.

     

    Math.random()은 0이상 1 미만의 값들을 가져옵니다.

    즉 length인 3을 곱해서, 0이상 3 미만의 값들을 가져옵니다.

    0 = Rock, 1 = Scissor, 2 = Paper.


     

            final Computer random = Computer.getRandom();
    
            System.out.println(random);

     

    랜덤으로 가져온 가위바위보를 random 변수에 담는다. 

     

    만약에 변수에 담지 않는다면, Computer.getRandom()을 가지고 올 때마다 값이 달라집니다.

    즉 print문으로 출력 값, switch문에서 가지고 오는 값이 달라지게 됩니다.

    왜냐하면 2번 호출하게 되기 때문입니다.

     

    값이 변하면 안되기 때문에 final을 붙여줍니다.

    사실 안붙여도 작동에는 이상이 없습니다.


            switch (random) {
                case Rock:
                    if (me.equals("Rock")) {
                        System.out.println("Draw!");
                        break;
                    }
                    if (me.equals("Scissor")) {
                        System.out.println("You lose!");
                        break;
                    }
                    if (me.equals("Paper")) {
                        System.out.println("You win!");
                        break;
                    }
    
                case Paper:
                    if (me.equals("Rock")) {
                        System.out.println("You lose!");
                        break;
                    }
                    if (me.equals("Scissor")) {
                        System.out.println("You win!");
                        break;
                    }
                    if (me.equals("Paper")) {
                        System.out.println("Draw!");
                        break;
                    }
    
                case Scissor:
                    if (me.equals("Rock")) {
                        System.out.println("You win!");
                        break;
                    }
                    if (me.equals("Scissor")) {
                        System.out.println("Draw!");
                        break;
                    }
                    if (me.equals("Paper")) {
                        System.out.println("You lose!");
                        break;
                    }

     

    while문 대신에 switch문을 작성하여 코드를 직관적으로 바꿉니다.


    문제점

    • 그래도 if문 같이 반복되는 코드가 너무너무 많습니다.
    • 솔직히 어떻게 바꿔야 할지 감이 잘 안옵니다.
    • 일단 클래스를 활용 할 계획입니다.
    • 3탄이 나올지는 모르겠습니다.
    반응형

    댓글

Designed by Tistory.