[자바스크립트 연습문제] 10 풀이

이번 글은 연습문제 풀이입니다. 이전 글에서 연습문제를 풀어 보신 분들만 아래 내용을 확인하시길 바랍니다.






10-1 풀이

function dice(smallNumber, bigNumber){
  var possibilities = bigNumber-smallNumber+1;
  return Math.floor(Math.random()*possibilities)+smallNumber;
}

우선 작은 수부터 큰 수까지는 몇가지 경우의 수가 있을 까요? 예를 들어 4와 9이 입력되었다면, 결과로 나올 수 있는 값은 4, 5, 6, 7, 8, 9의 6가지입니다. 이렇게 주어진 두 숫자와, 그 사이의 숫자의 갯수를 구하려면 큰 수 - 작은 수 + 1을 하면 됩니다. 이 값을 possiibliities 변수에 넣어 줍시다.

return Math.floor(Math.random()*possibilities)를 하면 0 부터 possibilities-1까지의 수 중에 하나를 만들 수 있습니다.

여기에 가장 작은 수인 smallNumber를 더해주면 입력받은 작은 수부터 입력받은 큰 수까지 중 하나의 정수를 구하는 함수가 완성됩니다.

10-2 풀이

//컴퓨터 가위 바위 보 값 구하는 함수
function getComputerValue(){
  var randomNumber = Math.floor(Math.random()*3); // 0, 1, 2 중 하나의 값을 랜덤으로 생성
  if(randomNumber == 0){
    return "가위";
  }
  else if(randomNumber == 1){
    return "바위";
  }
  else {
    return "보";
  }
}

//가위 바위 보 값 출력하는 함수
function printValues(yourName, yourValue, computerName, computerValue){
  console.log(yourName + ": " + yourValue + ", " + computerName + ": " + computerValue);
}

// 승자를 출력하는 함수
function printWinner(name){
  console.log(name+"의 승리입니다.");
}

// 비겼음을 출력하는 함수
function printDraw(){
  console.log("비겼습니다.");
}

//메인 게임 함수
function rockScissorPaper(yourValue){
  if(yourValue != "가위" && yourValue != "바위" && yourValue != "보"){
    console.log("잘못 입력하셨습니다.");
    return;
  }

  var computerName = "컴퓨터";
  var yourName = "당신";

  var computerValue =  getComputerValue();

  printValues(yourName, yourValue, computerName, computerValue);

  if(computerValue=="가위" && yourValue=="보" || computerValue=="바위" && yourValue=="가위" || computerValue=="보" && yourValue=="바위"){
    printWinner(computerName);
  }
  else if(computerValue=="가위" && yourValue=="바위" || computerValue=="바위" && yourValue=="보" || computerValue=="보" && yourValue=="가위"){
    printWinner(yourName);
  }
  else {
    printDraw();
  }
}

유의해서 봐야할 부분은 1. 컴퓨터의 가위 바위 보 값을 생성하는 부분과 2. 승, 패, 비김을 판단하는 부분입니다.

1. 컴퓨터의 값은 바로 생성하지 못하고 숫자 0, 1, 2중에서 랜덤한 수를 생성한 후 그 수에 따라 가위, 바위 보 값을 return하는 함수를 만들었습니다.

2. 플레이어가 승리하는 경우의 값들을 모두 모아 if의 조건으로 만들었고, 컴퓨터가 승리하는 경우의 값들을 모두 모아 else if의 조건으로 만들었고, 그 외의 경우는 비기는 것으로 하였습니다.

위 코드는 정답의 한 예시이며 반드시 위와 같이 코딩해야하는 것은 아닙니다. 문제에서 주어진 조건만 모두 만족한다면 정답입니다.

댓글

-
-충한 2020.11.20
function rps(){     if( Math.floor(Math.random()*3) == 0){         return "가위";     }else if ( Math.floor(Math.random()*3) == 1){         return "바위";     }else {         return "보";     } }
function verse(a){          if(a == "가위" && rps() == "가위" || a == "바위" && rps() == "바위" || a == "보" && rps() == "보") {         console.log( "비겼습니다! \n 나 : "+a," 컴퓨터 : "+rps());     }     else if ( a == "가위" && rps() == "보" || a == "바위" && rps() == "가위" || a == "보" && rps() == "바위") {         console.log("내가 이겼다! \n 나 : "+a," 컴퓨터 : "+rps());     }     else if (a == "가위" && rps() == "바위" ||  a == "바위" && rps() == "보" || a == "보" && rps() == "가위" ) {         console.log("컴터가 이김.. \n 나 : "+a," 컴퓨터 : "+rps());     } else {         console.log("정확히 입력해주세요 \n 나 : "+a," 컴퓨터 : "+rps());     } }
요러케 해봤는데 결과값이 엉망이에요... 흙흙
I
Ian H 2020.11.20
@-충한,
함수 rpc는 ()가 붙을때마다 실행됩니다.
if(a == "가위" && rps() == "가위" || a == "바위" && rps() == "바위" || a == "보" && rps() == "보")
라고 작성하게되면 rpc 함수는 3번 실행되고 각각 실행될 때마다 다른값을 갖게 되죠.
어떻게 고쳐야 할지는 직접 한번 고민해보시고, 잘 안되면 제가 알려드릴게요^^
-
-충한 2020.11.20
@Ian H,
아! 이것 때문에 메인 함수 내의 변수에 넣는 것이군요! 레벨업했습니다 ㅎㅎ 감사합니다!
I
Ian H 2020.11.20
@-충한,
👍
댓글쓰기

이 글에 댓글을 다시려면 SNS 계정으로 로그인하세요. 자세히 알아보기

UP