[JavaScript] 야구게임 만들기

2022. 5. 26. 22:59·개발/html, css, js
728x90
반응형

1. 배열 사용 버전

let computerPick = [];
let userPick = [];
let round = 1;
//스트라이크 볼 아웃




//컴퓨터 숫자 뽑기
while (computerPick.length<3){
    randomNum = (Math.floor(Math.random()*10))
    if (computerPick.indexOf(randomNum)==-1){
        computerPick.push(randomNum);
    }
}


while(round<11){
    //라운드 표시
    round++;

    //라운드별 스트라이크, 볼, 아웃 개수
    let strike = 0;
    let ball = 0;
    let out = 0;
    //중복된값 입력시 warning
    let warning;
    for (let i=1; i<=3; i++){
        //숫자 뽑기
        let getNum = (Number(prompt(round-1+"라운드 : " + i + "번째 숫자를 입력해주세요. (0~9까지 중복금지)")))
        //범위안의 숫자 입력하면 게임진행
        if (getNum>=0 || getNum<10){
            //중복이 아니면 userPick 에 배열추가
            if (userPick.indexOf(getNum) == -1){
                userPick.push(getNum);
            }
            //중복이면 라운드 종료
            else {
                alert("중복된 값을 입력하셨습니다. 이번 라운드는 실격입니다.");
                warning = 0;
                break;
            }  
        }
        //범위 안의 숫자가 아닌경우 라운드 종료 ex)문자인경우, 10이상숫자인 경우
        else {
            alert("잘못된 값을 입력하셨습니다. 이번 라운드는 실격입니다.");
            warning = 0;
            break;
        }
    }

    //숫자 비교
    for(let i=0; i<=2;i++){
        let compareNum = computerPick.indexOf(userPick[i])
        if (compareNum == i) {
            strike = strike + 1
        }
        else if (compareNum == -1){
            out = out + 1
        }
        else{
            ball = ball +1
        }
    }

    //result 값 설정
    if (out == 3){
        result = "아웃"
    }
    else if (strike == 3){
        result = "3 스트라이크"
    }
    else{
        result = strike + " 스트라이크 " + ball + " 볼"
    }
    
    //게임 종료 경우
    //중복된값이나 숫자가 아닌것을 입력시 오류문구
    if (warning == 0){
        continue;
    }
    //3스트라이크인경우 게임 종료 경우
    else if (result == "3 스트라이크"){
        alert(round-1 + "번만에 맞추셨습니다! 축하드립니다!!!");
        console.log("내가 선택한값 : " + userPick + "결과 : " + result);
        console.log(round-1 + "번만에 맞추셨습니다! 축하드립니다!!!");
        break;
    }
    //맞추지 못했을때 계속 게임진행
    else {
    alert(result);
    console.log("내가 선택한값 : " + userPick + " 결과 : " + result);
    }
    //정답지
    // console.log(computerPick);

    //비교한 후 배열, 결과 초기화
    result = "";
    userPick.splice(0,3);
    //10라운드 종료시 종료
    if (round==11){
        alert("10라운드가 모두 종료되었습니다. 다시 도전하세요.")
        break;
    }
}

2. 배열 미사용 버전

let computerPick;  //컴퓨터가 뽑은 값
let userPick;   //유저가 뽑은 값
let computerPick1;  //컴퓨터가 뽑은 수의 100의자리
let computerPick2;  //컴퓨터가 뽑은 수의 10의자리
let computerPick3;  //컴퓨터가 뽑은 수의 1의자리
let userPick1;  //유저가 입력한 수의 100의자리
let userPick2;  //유저가 입력한 수의 10의자리
let userPick3;  //유저가 입력한 수의 1의자리
let round = 0; //라운드 초기값




//3개 숫자 중복없이 랜덤으로 뽑기
while(true) {

    computerPick = Math.floor(Math.random()*1000);
    
    //컴퓨터 100의자리 숫자 알아내기
    for (let i=1;i<=10;i++){
        if(computerPick/100>=i-1 && computerPick/100<i){
            computerPick1 = i- 1;
            break;
        }
    }

    //컴퓨터 10의자리 숫자 알아내기
    for (let i=1;i<=10;i++){
        if((computerPick-computerPick1*100)/10>=i-1 && (computerPick-computerPick1*100)/10<i){
            computerPick2 = i-1;
            break;
        }
    }
    //컴퓨터 1의자리 숫자 알아내기
    for (let i=1;i<=10;i++){
        if((computerPick-computerPick1*100-computerPick2*10)>=i-1 && (computerPick-computerPick1*100-computerPick2*10)<i){
            computerPick3 = i-1;
            break;
        }
    }

    //중복값 제거
    if(computerPick1 == computerPick2 || computerPick1 == computerPick3 || computerPick2 == computerPick3 ){
        continue;
    }
    else{
        break;
    }
}



while(round<10){
    //라운드 마다 1씩 증가 10라운드시 종료
    round++;

    let warning = 0; //오류날경우의 값 = 1

    //유저 숫자 뽑기 : 중복되거나 잘못입력하면 그 라운드는 아무것도 못함
    while (true){
        //유저 숫자 뽑기
        userPick = prompt(round + "라운드 : " + " 중복되지 않는 숫자 3개를 입력하세요.")
        if (userPick>=0 && userPick <1000){

            //유저 100의자리 숫자 알아내기
            for (let i=1;i<=10;i++){
                if(userPick/100>=i-1 && userPick/100<i){
                userPick1 = i- 1;
                break;
                }
            }
            //유저 10의 자리 숫자 알아내기
            for (let i=1;i<=10;i++){
                if((userPick-userPick1*100)/10>=i-1 && (userPick-userPick1*100)/10<i){
                    userPick2 = i-1;
                    break;
                }
            }
            //유저 1의 자리 숫자 알아내기
            for (let i=1;i<=10;i++){
                if((userPick-userPick1*100-userPick2*10)>=i-1 && (userPick-userPick1*100-userPick2*10)<i){
                    userPick3 = i-1;
                    break;
                }
            }
        
            //중복값 입력시 오류
            if(userPick1 == userPick2 || userPick1 == userPick3 || userPick2 == userPick3 ){
                alert("중복된 값을 입력하였습니다. 이번 라운드는 실격입니다.");
                warning = 1;
                break;    
            }
            else {
                break;
            }
        }
        // 범위안의 숫자가 아니거나 다른걸 입력했을때
        else {
            alert("올바르지 않은 값을 입력하였습니다. 이번 라운드는 실격입니다.");
            warning = 1;
            break;
        }
    
        
    }

    let strike = 0; //스트라이크 결과 추출
    let ball = 0; //볼 결과 추출
    let out = 0; // 아웃 결과 추출

    //스트라이크 볼 아웃 추출
    if (userPick1 == computerPick1){
        strike += 1
    }
    else if (userPick1 == computerPick2 || userPick1 == computerPick3){
        ball += 1
    }
    if (userPick2 == computerPick2){
        strike += 1
    }
    else if (userPick2 == computerPick1 || userPick2 == computerPick3){
        ball += 1
    }
    if (userPick3 == computerPick3){
        strike += 1
    }
    else if (userPick3 == computerPick1 || userPick3 == computerPick2){
        ball += 1
    }
    out = 3 - strike - ball

    //게임 진행 조건

    //3스트라이크 일때 정답
    if (strike == 3){
        alert(round + "라운드만에 맞추셨습니다. 축하드립니다!!");
        break;
    }
    // 오류 발생시 다음 라운드 진행
    else if (warning == 1){
        continue;
    }
    // 3아웃시 아웃멘트
    else if (out == 3){
        alert("아웃!");
        console.log("뽑은 숫자 : " + userPick)
        console.log("아웃!");
        continue;
    }
    //10라운드시 종료멘트
    else if(round == 10){
        alert("10라운드 동안 맞추지 못했습니다. 다시 도전하세요");
        break;
    }
    // 다음 라운드 진행 멘트
    else {
        alert(strike + "스트라이크 " + ball + "볼");
        console.log("뽑은 숫자 : " + userPick)
        console.log(strike + "스트라이크 " + ball + "볼");
        continue;
    }
}
728x90
반응형

'개발 > html, css, js' 카테고리의 다른 글

[JavaScript] 고차함수  (0) 2022.05.29
[JavaScript] 월남뽕 게임(카드게임)  (0) 2022.05.27
[JavaScript] 로또 번호 뽑기  (0) 2022.05.25
[JavaScript] 배열  (1) 2022.05.25
[JavaScript] 최솟값, 제곱반환 함수 만들기  (0) 2022.05.25
'개발/html, css, js' 카테고리의 다른 글
  • [JavaScript] 고차함수
  • [JavaScript] 월남뽕 게임(카드게임)
  • [JavaScript] 로또 번호 뽑기
  • [JavaScript] 배열
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    블록체인
    nodejs
    go
    컨테이너
    하이퍼레저
    프로그래머스
    node
    30일챌린지
    30일 챌린지
    도커
    React
    html
    ERC721
    node.js
    mysql
    go언어
    명령어
    erc20
    CSS
    js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[JavaScript] 야구게임 만들기
상단으로

티스토리툴바