본문 바로가기

Web Project

[자바 스크립트] 가위바위보

- 소스 코드

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <title>가위바위보</title>

    <script>
        var playerStateChar = "";
        var playerState = 0;
        var comStateChar = "";
        var comState = 0;

        var result = 0;

        var win = 0;
        var defeat = 0;
        var draw = 0;

        function play(num) {
            if (num == 1) {
                playerStateChar = "가위";
                playerState = 1;
            }
            else if (num == 2) {
                playerStateChar = "바위";
                playerState = 2;
            }
            else {
                playerStateChar = "보";
                playerState = 3;
            }

            // 컴퓨터의 가위, 바위, 보 설정
            setComState();

            // 플레이어의 승패 여부를 판별
            setDistinct();

            // 결과 출력
            showResult();
        }

        // 컴퓨터의 상태 설정 함수
        // 1, 2, 3 중 하나를 랜덤하게 설정
        // 1 : 가위 / 2 : 바위 / 3 : 보
        function setComState() {
            // Math.random()은 0에서 1사이의 값 무작위 반환
            // 이 값에 3을 곱하면 0.000...3 ~ 2.999...9 사이의 값 무작위 반환
            // 이 범위의 수를 소수점을 날리면 0 이상 2 이하의 값
            // 이 값에 + 1을 해주면 1 이상 3 이하의 값
            var state = Math.floor(Math.random() * 3) + 1;
            comState = state;

            if (state == 1) {
                comStateChar = "가위";
            }
            else if (state == 2) {
                comStateChar = "바위";
            }
            else {
                comStateChar = "보";
            }
        }

        // 결과에 따른 result 값 설정
        // 0 : 무승부 / 1 : 승리 / -1 : 패배
        function setDistinct() {
            if (playerState == comState) {
                result = 0;
            }
            else { 
                // 플레이어 : 가위
                if (playerState == 1) {
                    if (comState == 2) {
                        result = -1;
                    }
                    else if (comState == 3) {
                        result = 1;
                    }
                }
                // 플레이어 : 바위
                else if (playerState == 2) {
                    if (comState == 1) {
                        result = 1;
                    }
                    else if (comState == 3) {
                        result = -1;
                    }
                }
                // 플레이어 : 보
                else {
                    if (comState == 1) {
                        result = -1;
                    }
                    else if (comState == 2) {
                        result = 1;
                    }
                }
            }
        }

        // 결과 출력 함수
        function showResult() {
            if (result == 0) {
                draw++;
                alert("당신 : " + playerStateChar + "\n컴퓨터 : " + comStateChar + "\n\n비겼습니다.");
                alert("현재 전적\n승 : " + win + "\n패 : " + defeat + "\n무 : " + draw + "\n\n승률 : " + getWinRate() + "%");
            }
            else if (result == 1) {
                win++;
                alert("당신 : " + playerStateChar + "\n컴퓨터 : " + comStateChar + "\n\n이겼습니다!");
                alert("현재 전적\n승 : " + win + "\n패 : " + defeat + "\n무 : " + draw + "\n\n승률 : " + getWinRate() + "%");
            }
            else {
                defeat++;
                alert("당신 : " + playerStateChar + "\n컴퓨터 : " + comStateChar + "\n\n졌습니다...");
                alert("현재 전적\n승 : " + win + "\n패 : " + defeat + "\n무 : " + draw + "\n\n승률 : " + getWinRate() + "%");
            }
        }

        // 승률 계산
        function getWinRate() {
            var winRate = 0;

            if (win != 0) {
                // 승률 : (이긴 횟수 / 전체 경기 수) * 100
                winRate = (win / (win + defeat)) * 100;
            }
            else {
                winRate = 0;
            }

            return winRate;
        }
    </script>
</head>

<body>
    <button type="button" onclick="play(1)"><img src="images/math_img_1.jpg" alt=""></button>
    <button type="button" onclick="play(2)"><img src="images/math_img_2.jpg" alt=""></button>
    <button type="button" onclick="play(3)"><img src="images/math_img_3.jpg" alt=""></button>
</body>

</html>

 

- 실행 결과