스노우보드 참 좋아하는데 맨날 키보드 앞에만 있네

[JavaScript] 야구게임 본문

개발/Algorithm

[JavaScript] 야구게임

워너-비 2017. 11. 1. 11:54

야구게임



게임 규칙


야구게임을 자바스크립트 언어를 사용하여 프로그래밍 해보도록 하자

게임의 규칙은 다음과 같다


* 범위 000~999의 각 자리가 중복되지 않는 3자리 정수가 생성된다.

* 사용자가 3자리 숫자를 입력하면, 숫자 비교를 한다.

* 숫자 비교

스트라이크 : 숫자와 그 숫자의 자리가 일치 

볼 : 숫자는 일치하지만, 자리수가 다른 경우

아웃 : 일치하는 숫자가 없다. 0스트라이크, 0볼

* 숫자 비교 결과를 출력한다.

* 숫자가 일치할 때까지 숫자입력과 비교를 반복

* 3스트라이크로 모든 숫자가 일치하면 게임을 종료한다.

* 사용자가 0을 입력하여 게임을 강제 종료할 수 있다.



프로그래밍 방법


난수생성

우선 각 자리수가 중복하지 않는 3자리 난수를 생성한 후 저장해야 한다.

난수를 저장하기 위한 배열 number 을 생성한다. 난수의 각 자리수를 number[0], number[1], number[2]에 저장할 것이다.

이제 0~9 범위의 난수를 3개 생성해야한다.

Math.random() 함수에 0~9 범위를 맞춰주기 위해 Math.random() * 10 처리를 해준다.

자바스크립트 숫자형 기본타입은 소수자리를 포함하므로 소수자리를 버리기 위해 Math.floor()함수를 이용한다.

첫 생성한 난수를 number[0]에 저장한다.

number[1], number[2]의 경우 앞서 생성한 난수와 중복되지 않아야한다. 중복을 피하는 조건식을 위해 do-while 반복문을 사용했다.


숫자입력

이제 난수 생성은 끝났다. 사용자에 숫자를 입력받아야한다.

입력받은 수와 난수가 일치할때 까지 입력받기 위해 무한반복 while(true) 을 이용한다. 무한반복은 반드시 break; 를 선언해야 한다는 점에 유의하자.

prompt() 함수를 이용하여 숫자를 입력받는다.


숫자비교

입력받은 숫자와 난수를 비교하여, 스트라이크, 볼 여부를 체크한다.

스트라이크, 볼을 카운트해줄 변수 strikecnt, ball을 선언해준다.

2중 for문으로 스트라이크의 경우 배열의 index와 해당 인덱스의 값이 일치해야 하며, 볼의 경우 배열의 index가 다르고, 값만 일치해야 한다.


판정

스트라이크 변수가 3인경우 '3스트라이크' 를 출력한 후 게임 종료

그 외 스트라이크, 볼 카운트를 출력



소스코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
alert('야구게임을 시작합니다.')

// 1. 난수생성
// 1.1 난수를 저장할 배열생성
// 1.2 첫째자리 난수를 생성하여 index 0에 저장
// 1.3 index 1, 2 에 난수는 앞서 생성한 난수와 중복되지 않으면 저장
var number = [];
number[0= Math.floor(Math.random() * 10);
do {
  number[1= Math.floor(Math.random() * 10);
while(number[1=== number[0])
do {
  number[2= Math.floor(Math.random() * 10);
while(number[2=== number[0|| number[2=== number[1])

// 2. 숫자입력
// 2.1 스트라이크, 볼을 체크할 변수와 입력받을 수를 저장할 변수생성
var strikecnt = 0;
var ballcnt = 0;
var input_num = 0;

// 2.2 입력받은 수가 일치할 때까지 무한반복
// 2.3 세자리 숫자를 입력
// 2.4 0을 입력하면 break
// 2.5 변수 초기화
while(true){
  input_num = prompt('숫자 세자리를 입력하세요. 게임 종료시 0 입력');
  if(input_num == 0){ break; }
  strikecnt = 0;
  ballcnt = 0;
  
  // 3. 숫자비교
// 3.1 자리수(index)와 값이 일치하면 스트라이크
// 3.2 자리수(index)가 다르고 값만 일치하면 볼
  for(var m = 0 ; m<3 ; m++){
    if(input_num[m] == number[m])
      strikecnt++;
    
    for(var n = 0 ; n<3; n++){
        if((m != n) && (input_num[m] == number[n])){
          ballcnt++;
        }
    }
  }

  // 4. 판정
// 4.1 스트라이크 변수가 3인경우 3스트라이크 출력 후 break
// 4.2 그렇지 않다면, 스트라이크와 볼 변수값 출력 후 반복문 재실행
  if(strikecnt == 3){
    alert('3 스트라이크 !!!');
    break;
  } 
  else{
    alert(strikecnt + '스트라이크, ' + ballcnt + '볼');
  }
}

// 5. 종료
alert('게임을 종료합니다.');



Comments