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] 배열 (0) | 2022.05.25 |
[JavaScript] 최솟값, 제곱반환 함수 만들기 (0) | 2022.05.25 |