JavaScript - 초간단 추측게임 만들기

Mongs_sw·2023년 1월 24일

javascript

목록 보기
10/21
post-thumbnail

컴퓨터가 생각한 숫자를 추측해서 맞히는 게임.

초초초초초 간단한 추측게임을 만들어보겠다.

반복문과 조건문을 활용하여 만든 초간단 게임을 구성해보았다.

게임이 실행되는 과정

1. 범위 설정을 위한 숫자를 입력받는다.
1 - (1) 입력받은 숫자가 올바른 형태가 아닐 경우 재입력을 받는다.
2. 컴퓨터가 난수를 생성하도록 한다.
3. 내가 생각하는 첫 번째로 예측한 수를 입력한다.(추측값이라고 정의)
4. 추측값이 난수와 동일하지 않으면 같아질 때까지 추측값을 입력한다.
4 - (1) 게임을 종료하고 싶다면 'q'를 입력하면 게임이 종료되게 하며, 종료할 때 ("종료하시는군요. 다음에 또 해요!")라는 문구를 출력시킨다.
5. 난수와 추측값이 동일하다면 축하한다는 문구와 몇번만에 이겼는지에 대한 문구를 출력시킨다.

대충 이런 과정으로 게임이 진행부터 종료까지 이루어진다.
그렇다면 코드를 확인해보자.

  1. maximum 이라는 변수는 최댓값을 의미하는데 게임을 설정하는 값이라고 생각하면 된다.
let maximum = parseInt(prompt("범위를 설정하기 위한 숫자를 입력해주세요!));

  1. 초기 설정값이 올바른 정수 형태가 아닌 경우, 올바른 숫자를 입력받을 때까지 반복하기 위해 while문을 작성하였다.
let maximum = parseInt(prompt("범위를 설정하기 위한 숫자를 입력해주세요!));

while(!maximum){
	maximum = parseInt(prompt("유효한 숫자가 아닙니다! 범위를 설정하기 위한 숫자를 다시 입력해주세요!));
}

  1. 컴퓨터의 숫자를 맞추기 위해 컴퓨터에 난수를 생성.
let maximum = parseInt(prompt("범위를 설정하기 위한 숫자를 입력해주세요!));

while(!maximum){
	maximum = parseInt(prompt("유효한 숫자가 아닙니다! 범위를 설정하기 위한 숫자를 다시 입력해주세요!));
}

const targeNum = Math.floor(Math.random() * maximum + 1); 

  1. 플레이어가 추측하기 위한 값을 입력하기 위해 guess라는 변수와 prompt를 통해 입력받음.
let maximum = parseInt(prompt("범위를 설정하기 위한 숫자를 입력해주세요!));

while(!maximum){
	maximum = parseInt(prompt("유효한 숫자가 아닙니다! 범위를 설정하기 위한 숫자를 다시 입력해주세요!));
}
const targeNum = Math.floor(Math.random() * maximum + 1); 

let guess = prompt("첫 번째 예측값을 입력해주세요! 입력하는 수에 따라 힌트가 주어집니다.);

  1. 추측값이 난수와 같지 않을 경우에 계속해서 반복하여 난수와 추측값이 동일할 때까지 반복.
let maximum = parseInt(prompt("범위를 설정하기 위한 숫자를 입력해주세요!));

while(!maximum){
	maximum = parseInt(prompt("유효한 숫자가 아닙니다! 범위를 설정하기 위한 숫자를 다시 입력해주세요!));
}
const targeNum = Math.floor(Math.random() * maximum + 1); 
let guess = prompt("첫 번째 예측값을 입력해주세요! 입력하는 수에 따라 힌트가 주어집니다.);

while(guess !== targetNum){
	if(guess > targetNum){
    	guess = parseInt(prompt("추측 값이 너무 높습니다! 다시 입력해주세요.));
    } else{
    	guess = parseInt(prompt("추측 값이 너무 낮습니다! 다시 입력해주세요.));
    }
}

6.추측값이 난수와 같을 경우 승리하였다는 메세지를 출력하며 게임종료.

let maximum = parseInt(prompt("범위를 설정하기 위한 숫자를 입력해주세요!));

while(!maximum){
	maximum = parseInt(prompt("유효한 숫자가 아닙니다! 범위를 설정하기 위한 숫자를 다시 입력해주세요!));
}
const targeNum = Math.floor(Math.random() * maximum + 1); 
let guess = prompt("첫 번째 예측값을 입력해주세요! 입력하는 수에 따라 힌트가 주어집니다.);

while(guess !== targetNum){
	if(guess > targetNum){
    	guess = parseInt(prompt("추측 값이 너무 높습니다! 다시 입력해주세요.));
    } else{
    	guess = parseInt(prompt("추측 값이 너무 낮습니다! 다시 입력해주세요.));
    }
}
console.log("축하합니다. 당신이 승리하였습니다!");

전체적인 게임의 흐름은 이렇게 구성하게 되었다. 하지만 앞서 말한 "시도", break에 대한 코드를 추가해보겠다.

1. 몇번을 시도하여 이겼는지 파악하기.

1. attempts 를 변수로 설정해준다.
2. 첫 번째 추측값이 입력되는 순간 1번 시도한 것으로 간주.
3. 반복문이 계속될 수록 게임이 끝나기 전까지 1씩 횟수 증가.
4. "승리하였습니다" 메세지 출력시 몇번 시도하였는지 같이 출력.

let maximum = parseInt(prompt("범위를 설정하기 위한 숫자를 입력해주세요!));

while(!maximum){
	maximum = parseInt(prompt("유효한 숫자가 아닙니다! 범위를 설정하기 위한 숫자를 다시 입력해주세요!));
}

const targeNum = Math.floor(Math.random() * maximum + 1); 
let guess = prompt("첫 번째 예측값을 입력해주세요! 입력하는 수에 따라 힌트가 주어집니다.);
let attempts = 1;

while(guess !== targetNum){
	attempts++;
	if(guess > targetNum){
    	guess = parseInt(prompt("추측 값이 너무 높습니다! 다시 입력해주세요.));
    } else{
    	guess = parseInt(prompt("추측 값이 너무 낮습니다! 다시 입력해주세요.));
    }
}
console.log("축하합니다. 당신이 승리하였습니다!");
console.log(`당신은 ${attempts}` 시도하여 승리하였습니다.`);

2. 'q'를 입력받으면 게임 종료시키기.

  
let maximum = parseInt(prompt("범위를 설정하기 위한 숫자를 입력해주세요!));

while(!maximum){
	maximum = parseInt(prompt("유효한 숫자가 아닙니다! 범위를 설정하기 위한 숫자를 다시 입력해주세요!));
}

const targeNum = Math.floor(Math.random() * maximum + 1); 
let guess = prompt("첫 번째 예측값을 입력해주세요! 입력하는 수에 따라 힌트가 주어집니다.);
let attempts = 1;

while(guess !== targetNum){
    if(guess === 'q') break;
	attempts++;
	if(guess > targetNum){
    	guess = parseInt(prompt("추측 값이 너무 높습니다! 다시 입력해주세요.));
    } else{
    	guess = parseInt(prompt("추측 값이 너무 낮습니다! 다시 입력해주세요.));
    }
}
console.log("축하합니다. 당신이 승리하였습니다!");
console.log(`당신은 ${attempts}` 시도하여 승리하였습니다.`);

여기서 주의해야 할 점은 guess 변수가 값으로 'q'를 절대 받을 수 없는 이유가 있다.

if(guess > targetNum){
  	guess = parseInt(prompt("추측 값이 너무 높습니다! 다시 입력해주세요.));
  } else{
  	guess = parseInt(prompt("추측 값이 너무 낮습니다! 다시 입력해주세요.));
  }

parseInt 가 문제가 되는 상황인데 guess에 아무리 'q'를 입력하더라도 'q'라는 문자를 숫자로 변환시켜주려는 parseInt 특성 때문에 NaN이 변환된 값으로 입력되게 된다.


이럴 경우엔 'q'를 바로 변환시켜주지 않고 입력값 'q'를 문자열로 우선 저장시킨 다음, 추측 값을 정답과 비교하는 시점에 parseInt로 처리해주는 방법이다.

 if(parseInt(guess) > targetNum){
  	guess = prompt("추측 값이 너무 높습니다! 다시 입력해주세요.);
  } else{
  	guess = prompt("추측 값이 너무 낮습니다! 다시 입력해주세요.);
  }

이렇게 바꿔주면 'q'는 변수안에서도 계속 'q'로 유지된다는 사실이다.

최종적인 코드의 구성은 아래와 같다.

let maximum = parseInt(prompt("범위를 설정하기 위한 숫자를 입력해주세요!));

while(!maximum){
	maximum = parseInt(prompt("유효한 숫자가 아닙니다! 범위를 설정하기 위한 숫자를 다시 입력해주세요!));
}

const targeNum = Math.floor(Math.random() * maximum + 1); 
let guess = prompt("첫 번째 예측값을 입력해주세요! 입력하는 수에 따라 힌트가 주어집니다.);
let attempts = 1;

while(parseInt(guess) !== targetNum){
	attempts++;
	if(guess > targetNum){
    	guess = prompt("추측 값이 너무 높습니다! 다시 입력해주세요.);
    } else{
    	guess = prompt("추측 값이 너무 낮습니다! 다시 입력해주세요.);
    }
}
console.log("축하합니다. 당신이 승리하였습니다!");
console.log(`당신은 ${attempts}` 시도하여 승리하였습니다.`);

if(guess === 'q'){
	console.log("게임을 종료하시는군요. 다음에 또 해요!");
} else{
	console.log("축하합니다. 당신이 이겼습니다!");
    console.log(`당신은 ${attempts}` 시도하여 승리하였습니다.`);
}

초초초! 간단한 컴퓨터가 생각한 숫자 맞추기
게임을 만들어 보았는데 보완해야할 부분은 참 많다는 생각이 든다.

더 나은 코드 구성을 기약하며.. 그럼 20000 !!!!!!!!!!

profile
몽이아빠의 개발 일기

0개의 댓글