zoaseo
To Infinity And Beyond
zoaseo
전체 방문자
오늘
어제
  • 분류 전체보기 (763)
    • 개발이 좋아서 (381)
      • SAP가 좋아서 (3)
      • Java가 좋아서 (42)
      • Spring이 좋아서 (50)
      • JPA가 좋아서 (0)
      • QueryDSL이 좋아서 (26)
      • Docker가 좋아서 (7)
      • Redis가 좋아서 (7)
      • AWS가 좋아서 (5)
      • CI/CD가 좋아서 (6)
      • Troubleshooting이 좋아서 (4)
      • Kotlin이 좋아서 (7)
      • SQL이 좋아서 (6)
      • HTTP가 좋아서 (21)
      • JavaScript가 좋아서 (30)
      • TypeScript가 좋아서 (6)
      • Vue가 좋아서 (21)
      • Flutter가 좋아서 (61)
      • React가 좋아서 (20)
      • Redux(React)가 좋아서 (2)
      • Angular가 좋아서 (22)
      • HTML이 좋아서 (9)
      • CSS가 좋아서 (15)
      • PHP가 좋아서 (9)
      • Illustrator가 좋아서 (2)
    • 노력이 좋아서 (169)
    • 결과물이 좋아서 (14)
    • 코딩연습이 좋아서 (168)
      • 이론이 좋아서 (62)
      • SQL이 좋아서 (90)
    • 유용한 사이트가 좋아서 (28)
    • Github (2)

인기 글

티스토리

hELLO · Designed By 정상우.
zoaseo
노력이 좋아서

<step35>'농구게임복습'

노력이 좋아서

<step35>'농구게임복습'

2022. 5. 9. 17:50

농구게임복습

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {margin: 0; padding: 0; box-sizing: border-box;}
        #wrap {
            width: 70%;
            margin: 50px auto;
            background: coral;
            padding: 2px;
        }
        .div-scoreboard.inner {
            background: coral;
            text-align: center;
            color: #fff;
            border: 2px solid #fff;
        }
        .div-short-left {
            padding-top: 20px;
            line-height: 40px;
        }
        #shorts-left {
            background: #000;
            width: 80px;
            display: inline-block;
        }
        .div-score {
            display: flex;
            justify-content: center;
        }
        .div-score-list {
            border: 1px solid #fff;
            width: 30%;
            margin: 20px;
            padding: 40px;
        }
        .div-score-number {
            background: #000;
            line-height: 50px;
            margin-top: 10px;
        }
        #text {
            padding: 30px;
        }
        .div-control-panel {
            background: tomato;
            display: flex;
            justify-content: center;
        }
        .div-panel {
            padding: 30px;
            margin: 30px;
            width: 30%;
            text-align: center;
            color: #fff;
        }
        .div-panel div {
            padding-bottom: 10px;
        }
        button {
            padding: 10px 20px;
            font-size: 14px;
        }
    </style>
</head>
<body>
    <div id="wrap">
        <!-- 점수판 -->
        <div class="div-scoreboard inner">
            <div class="div-short-left">
                <span>남은 슛 횟수</span>
                <span id="shorts-left">15</span>
            </div>
            <div class="div-score">
                <div class="div-score-list">
                    <div class="div-score-name">컴퓨터</div>
                    <div class="div-score-number" id="computer-score">0</div>
                </div>
                <div class="div-score-list">
                    <div class="div-score-name">사람</div>
                    <div class="div-score-number" id="user-score">0</div>
                </div>
            </div>
            <div id="text">컴퓨터부터 시작합니다.</div>
        </div>
        <!-- 조작부 -->
        <div class="div-control-panel">
            <div id="div-computer" class="div-panel">
                <div>컴퓨터</div>
                <button class="btn-computer">슛하기</button>
            </div>
            <div id="div-user" class="div-panel">
                <div>사용자</div>
                <button class="btn-user" id="btn-user2">2점슛</button>
                <button class="btn-user" id="btn-user3">3점슛</button>
            </div>
        </div> 
    </div>
    <script>
        // //게임로직
        // //1.컴퓨터 차례로 시작
        // //2.사용자가 컴퓨터의 슛 버튼을 클릭한다.
        // // 3.컴퓨터는 2점슛을 던질지 3점슛을 던질지 랜덤하게 결정
        // // 4.슛이 성공하면 컴퓨터의 점수가 올라감
        // // 5.사용자의 차례로 변경됨
        // // 6.2점슛인지 3점슛인지 버튼을 클릭한다.
        // // 7.슛이 성공하면 사용자의 점수를 올려준다.
        // // 8.컴퓨터의 차례로 변경되며 슛횟수를 1씩 감소시킴
        // // 9.남은 슛횟수가 0이 될때까지 1~8을 반복한다.
        // // 10.양쪽의 점수를 비교해 승자를 결정한다.
        // // * 2점슛의 성공률은 50% 3점슛의 성공률은 30%
      
        let shortsLeftElem = document.querySelector('#shorts-left');
        let comScoreElem = document.querySelector('#computer-score');
        let userScoreElem = document.querySelector('#user-score');
        let textElem = document.querySelector('#text');
        document.querySelector('.btn-computer').addEventListener('click',onComputerShoot);
        document.querySelector('#btn-user2').addEventListener('click',function(){
            onUsershoot(2);
        })
        document.querySelector('#btn-user3').addEventListener('click',function(){
            onUsershoot(3);
        })

        //컴퓨터 오브젝트
        let computer = {
            score: 0,
            percent2: 0.5,
            percent3: 0.3,
        }
        //사용자 오브젝트
        let user = {
            score: 0,
            percent2: 0.5,
            percent3: 0.3,
        }
        //게임 오브젝트
        let game = {
            isComputerTurn: true,
            shortsleft: 15,
        }
        //글자 변경되는 함수
        function showText(msg){
            textElem.innerHTML = msg;
        }
        //점수판에 점수변경하는 함수
        function updateScore(score, mal){
            if(mal == 0){
                computer.score += score;
                comScoreElem.innerHTML = computer.score;
            }else {
                user.score += score;
                userScoreElem.innerHTML = user.score;
            }
        }
        //컴퓨터 버튼 안보이게 하는 함수
        function disableComputer(flag){
            let computerButton = document.querySelector('.btn-computer');
            computerButton.disabled = flag;
        }
        //유저 버튼 안보이게 하는 함수
        function disableUser(flag){
            let userButton = document.querySelectorAll('.btn-user');
            for(let i=0; i<userButton.length; i++){
                userButton[i].disabled = flag;
            }
        }
        //컴퓨터 슛실행
        function onComputerShoot(){
            if(!game.isComputerTurn) return;
            //슛타입을 결정
            let shootType = Math.random() < 0.5? 2 : 3;
            //슛을 확률대로 성공시키기
            if(Math.random() < computer['percent'+shootType]){
                showText(`컴퓨터가 ${shootType}점슛을 성공시켰습니다.`);
                updateScore(shootType, 0);
            }else {
                showText(`컴퓨터가 ${shootType}점슛을 실패했습니다.`);
            }
            game.isComputerTurn = false;
            disableComputer(true);
            disableUser(false);
        }
        //유저 슛실행
        function onUsershoot(jum){
            if(game.isComputerTurn) return;
            if(Math.random() < computer['percent'+jum]){
                showText(`당신이 ${jum}점슛을 성공시켰습니다.`);
                updateScore(jum, 1);
            }else {
                showText(`당신이 ${jum}점슛을 실패했습니다.`);
            }
            game.isComputerTurn = true;
            disableComputer(false);
            disableUser(true);
            gameTurn();
        }
        function gameTurn(){
            game.shortsleft--;
            shortsLeftElem.innerHTML = game.shortsleft;
            if(game.shortsleft == 0){
                if(user.score > computer.score) showText('사용자가 승리했습니다.');
                else if(user.score < computer.score) showText('컴퓨터가 승리했습니다.');
                else showText('비겼습니다.');
                disableComputer(true);
            }
        }
    </script>
</body>
</html>

'노력이 좋아서' 카테고리의 다른 글

<step36>'야구게임_팀과제'  (0) 2022.05.10
<step36>'js_메소드, 동기 비동기'  (0) 2022.05.10
<step34>'js_복습'  (0) 2022.05.06
<step33>'울산관광 웹시안 및 구현'  (1) 2022.05.04
<step33>'js_객체 응용'  (0) 2022.05.04

    티스토리툴바

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.