본문 바로가기

개발자노트/웹

HTML 업다운게임 예제 ( HTML형변환 예제 )

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>업다운 -2</title>
</head>
<body>
<script type="text/javascript">
	var ans=Math.floor(Math.random()*100)+1; // 00~99 -> 1~100 , 소숫점때문에 floor 사용
		//floor() 함수는 주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환
	var cnt=0; // 정답을 맞추기 까지의 횟수
	var L=1; // 최소값
	var H=100; // 최대값
	
	while(true){
		var input=prompt(L+'~'+H+' 사이의 숫자를 입력하세요.');
		cnt++;
		if(input==ans){
			var msg='총'+cnt+'번 만에 정답을 맞추셨습니다!';
			document.write(msg);
			break;
		}
		else if(input>ans){
			alert('다운!');
			H=Number(input)-1; // 자동 형변환
		}
		else{
			alert('업!');
			L=Number(input)+1 ; // 사용자가 prompt()를 통해 입력한 값은 [문자열!]
		}
	}

</script>

</body>
</html>

전에 올린 up-down과 유사하지만, 여기서 주의할 점은 사용자가 prompt()를 통해 입력한 값은 [문자열]로 취급되기 때문에

Numner(input)으로 형변환하여 계산하게 하였다.

 

 

다른 풀이 ( 약간의 유효성 검사 )

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>업다운</title>
</head>
<body>

<script type="text/javascript">
	var min = 1; // 최소값
	var max = 100; // 최대값
	var ans = Math.floor(Math.random() * (max-min)+min);  // 최소값, 최대값을 수정할 경우를 위해
	var cnt = 0; // 정답을 맞추기까지의 입력횟수
	while(true){
		var input = prompt(min+ "과" +max+ "사이에 정답 존재")
		input = Number(input);
		if(ans>input){
			alert('업!');
			if(min>input){
				cnt++;
				continue;
			}
			min = input;
		}
		else if(ans<input){
			alert('다운!');
			if(max<input){
				cnt++;
				continue;
			}
			max = input;
		}
		else if (ans==input){
			alert(cnt+"번 만에 맞추셨습니다.")
			break;
		}
		if (min>max){ // 예전에 배웠던 tmp를 사용
			var tmp =0;
			tmp = min;
			min = max;
			max = tmp;
		}
		cnt++;
	}
	
</script>

</body>
</html>

예전에 학습했던 tmp를 사용하여 최대값과 최소값이 cross 되지 않도록 설정하여

입력값에 따라 min max 가 변하지 않도록 유효성 검사를 추가

 

 

수행결과