ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA/자바] 가위 바위 보 게임 예제
    Language/Java 2018. 2. 26. 20:15
    반응형

    가위 바위 보 게임

    만들고 싶은 기능

    1. 게임의 판수를 조절할 수 있다.

    2. 몇번째 경기인지 확인이 가능해야 한다.

       ex) 10번의 판수를 입력 실시간으로 

         5판째인지 6판째인지 혼동되지 않게 확인이 가능해야 한다.

    3. 내용 입력시 숫자와 문자 모두 사용이 가능해야 한다.

    4. 컴퓨터는 가위바위보를 랜덤으로 사용한다.

    5. 컴퓨터가 사용한 것 ( 가위/바위/보 ) 이 확인 가능해야 한다.

    6. 마지막에 전적을 확인 할 수 있어야 한다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    import java.io.*;
    import java.util.*;
     
    class RPS{    // Rock-Paper-Sissors , 가위-바위-보
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Random random = new Random();
        int coin;
        int com , user;
        int win , lose , draw;
     
        RPS(){
            System.out.println("    < 가위 바위 보 > 게임");
            input();
            for (int i = 0 ; i < coin ; i++){
                System.out.println("◀"+(i+1+ "번째 게임▶");
                select();
                computer();
                result();
            }
            System.out.println("전적 : " + (win+lose+draw) +"전 ," + win +"승 ," + draw +"무 ," + lose + "패\n");
        }
     
        void input(){
            System.out.print("    플레이를 몇 번 하고 싶으신가요? < 기본 3 >\n입력 >> ");
            try{
                String msg = br.readLine();
                msg = msg.trim();
                coin = Integer.parseInt(msg);
                if(coin >= 3){
                    System.out.println(coin + " 판 하겠습니다.\n");
                }else{
                    System.out.println("기본 3판입니다. 자동으로 3판으로 적용합니다.\n");
                    coin = 3;
                }
            }catch(IOException ioe){
                System.out.println("다시 확인해주세요.\n");
                input();
            }catch(NumberFormatException nfe){
                System.out.println("숫자값을 입력해주세요.\n");
                input();
            }
        }
     
        void select(){
            System.out.print("    │1.가위│ │2.바위│ │3.보│\n입력 >> ");
            try{
                String msg = br.readLine();
                msg = msg.trim();
                if(msg.equals("가위"|| msg.equals("1")){
                    System.out.print("\n        나 : 가위 ");
                    user = 0;
                }else if(msg.equals("바위"|| msg.equals("주먹"|| msg.equals("2")){
                    System.out.print("\n        나 : 바위 ");
                    user = 1;
                }else if(msg.equals("보"|| msg.equals("보자기"|| msg.equals("3")){
                    System.out.print("\n        나 : 보 ");
                    user = 2;
                }else{
                    System.out.println("가위 , 바위 , 보 중에서 선택해주세요.");
                    select();
                }
            }catch(IOException ioe){
                System.out.println("다시 확인해 주세요.");
                select();
            }
        }
     
        void computer(){
            com = random.nextInt(3);
            switch (com){
                case 0 : System.out.println("VS 컴퓨터 : 가위"); break;
                case 1 : System.out.println("VS 컴퓨터 : 바위"); break;
                case 2 : System.out.println("VS 컴퓨터 : 보");
            }
        }
     
        void result(){
            if(user == com){
                System.out.println("        # 무승부 #\n");
                draw++;
            }else if((user == 0 && com == 2|| (user == 1 && com == 0|| (user == 2 && com == 1)){
                System.out.println("        # 승리 #\n");
                win++;
            }else{
                System.out.println("        # 패배 #\n");
                lose++;
            }
        }
     
        public static void main(String[] args){
            RPS rps = new RPS();
        }
    }
    cs




    만들다 보니 넣고싶어진 기능들이 많아서 정신 없어 보이긴 합니다만,

    여러분들도 하나 둘 씩 만들고 싶은 기능들을 넣어보면 코딩 하는 것이 재미있어 질 것이라고 장담합니다.

    String msg = br.readLine();

    은 자신이 cmd 에 입력하는 내용입니다.

    msg = msg.trim();

    은 공백을 제거하는 로직입니다.

    if 문 () 안에 있는 msg.equals("가위") 

    는 msg 값이 "가위" 일 경우 조건에 만족하는 것입니다.

    만약 숫자만으로 가위 바위 보를 하고 싶다면 앞의 내용을 지워 주시면 되겠습니다.


    코딩을 하는 방법은 수도 없이 많지만 저는 생성자 안에 메소드들을 집어 넣고,

    반복해야 하는 메소드들을 묶어서 반복 했습니다.


    플레이를 몇판 하고 싶은지 물어보는 것은 반복하지 않아도 되기 때문에 반복문에 포함되어 있지 않고,

    유저가 가위 바위 보 를 선택하는것과 컴퓨터가 가위 바위 보를 선택하고 

    결과를 출력하는 부분은 반복해야 하기 때문에 반복문 안에 들어가 있습니다.


    만약 궁금한점이 있다면 댓글 달아 주세요.

    한참 부족하지만 , 최선을 다해 답변 드리겠습니다.


    1. BufferefReader 에 대해서 알아보기

    2. Random 함수 알아보기

    3. try{}catch(){} 예외처리 알아보기

    4. for(;;) , 반복문 알아보기

    5. if(){} , switch(){} , 조건문 알아보기


    반응형
Designed by Tistory.