이번 장에서는 제가 어렸을 적에 자주 하던 숫자 야구게임을 만들어 보겠습니다. 게임 규칙은 다음과 같습니다. 시작되면 컴퓨터는 임의의 세자리 숫자를 설정합니다. 플레이어는 연속하여 세개의 숫자를 입력합니다. 플레이어가 입력한 숫자중에 컴퓨터에 설정한 숫자와 일치하는 수가 있으면 그 갯수만큼 strike로 판정됩니다. 숫자에 따른 각각의 결과를 보고 컴퓨터가 설장한 세개의 숫자를 유추해 내어 모두 알아 맞추면 3 Stike가 되어 게임이 종료됩니다.

사용자 삽입 이미지

예를 들면 컴퓨터가 '379'를 설정하였다면, 사용자 입력에 따라 결과는 아래와 같습니다.

  • 126 - 3 ball (일치하는 숫자 없슴)
  • 589 - 1 strike 2 ball ('9' 1개 일치)
  • 389 - 2 strike 1 ball ('3', '9' 2개 일치)
  • 379 - 3 strike (3개 모두 일치, game over)

1. 변수 생성

이번 장에서는 생성하는 변수가 많습니다. 아래의 변수들을 위의 변수들을 Variables에서 [Make a variable]을 클릭하여 생성합니다. 각 변수의 사용 용도는 다음과 같습니다.
 
* inputCount : 사용자가 숫자를 입력할 때 마다 1씩 증가합니다. 3개의 숫자를 입력 받기 때문에 3까지 증가 한 후 다시 0으로 설정 됩니다.

* inputNumber: 사용자가 현재 입력한 숫자 입니다.

* number1: 컴퓨터가 설정한 첫번째 숫자 입니다.
* number2: 컴퓨터가 설정한 두번째 숫자 입니다.
* number3: 컴퓨터가 설정한 세번째 숫자 입니다.

* user1: 사용자가 입력한 첫번째 숫자 입니다.
* user2: 사용자가 입력한 두번째 숫자 입니다.
* user3: 사용자가 입력한 세번째 숫자 입니다.

* strike: 컴퓨터와 사용자 숫자의 일치하는 갯수입니다.
* try: 현재 사용자가 시도하는 횟수 입니다.

사용자 삽입 이미지
try, user1, user2, user3만 사용자에게 보여 줍니다. 위 변수들의 출력에 체크를 합니다. 캔버스에서 변수들을 더블 클릭하여 좌측과 같이 모양을 변경합니다. try 밑의 변수들은 좌측 부터 각각 [user1][user2][user3] 입니다. 


2. 스크립트 작성


1) 사용자 입력 처리
사용자 삽입 이미지

위와 같이 사용자 숫자 입력에 대응하는 모든 스프라이트들을 생성합니다. 각각의 숫자가 클릭되면 [set inputNumber to (num)]으로 현재 입력된 숫자를 inputNumber 변수에 저장합니다. 그런 후에 다른 스크립트에서 처리하기 위해 input 메시지를 보냅니다.

2) 시작 시 처리
게임이 시작될 때 각 변수들을 초기화하는 스크립트 입니다.
사용자 삽입 이미지

a. 숫자 설정
[pick random(start) to (end)] 는 start부터 end 사이에서 임의의 한 수를 생성합니다. 사용자가 맞추어야 하는 number1, number2, number3에 임의의 세개의 수를 생성하여 할당합니다.

b. 변수 초기화
사용하는 변수들을 0으로 초기화 합니다. 시도 횟수인 try만 1로 선택합니다. 초기화가 완료되면 사용자가 수를 입력 하도록 캐릭터가 "input number"를 출력합니다.

3) input 메시지 처리
위에 사용자가 숫자를 입력하였을 때 실행되는 [when [num] key pressed]에서 보내는 메시지를 처리하는 스크립트입니다.

사용자 삽입 이미지

a. 초기화
[if <(inputCount) > (2)>] 사용자가 3개의 숫자의 입력을 완료하고 다음 입력을 하는 지를 검사하고, 다음 시도이면 필요한 변수들을 0으로 초기화 합니다. 사용자의 시도 횟수를 알려주는 try만 1 증가시켜 줍니다.

b. strike 판별
[change inputCount by (1)] 먼저 현재 입력 카운트(inputCount)를 1 증가시킵니다. 위의 스크립트중 잘려진 if블럭의 전체 모습은 아래와 같습니다.

사용자 삽입 이미지

현재 입력된 inputNumber가 컴퓨터가 저장하고 있는 number1, number2, number3중 하나와 일치할 경우에는 [change strike by (1)] 로 strike를 1 증가시킵니다.

c. 입력횟수에 따른 처리
inputCount에 따라 사용자에게 보여 줄 user1, user2, user3를 설정합니다. 3번째 입력이 되어 완료되었을 경우에는 검사를 위해 [broadcast [check] and wait] 명령으로 check 메시지를 발송합니다.

4) check 메시지 처리
사용자가 세개의 숫자를 입력하였을 때 결과의 처리를 위해 실행되는 스크립트 입니다.

사용자 삽입 이미지
a) strike가 0일 경우
사용자가 입력한 세개의 숫자중에 일치하는 숫자가 하나도 없을 경우입니다. 캐릭터가 "Oops! 3ball"이란 메시지를 출력합니다.

b) strike가 1일 경우
"1 strike 2 ball"이란 메시지를 출력합니다.

c) strike가 2일 경우
"2 strike 1 ball"이란 메시지를 출력합니다.

d) strike가 3일 경우
사용자가 입력한 숫자가 모두 일치한 경우 입니다. 캐릭터가 "3 strike"를 1초간 출력 한 후에 "You Win!!!" 이란 메시지를 출력하고 게임을 종료 합니다.

[stop all ( )]는 사용자가 Stop 버튼을 클릭한 것과 동일하게 스크립트 실행을 중단합니다.



이제 완료되었습니다. 시작버튼을 클릭하여 테스트 해 봅니다. 세개의 숫자를 입력하면 결과가 나옵니다. 결과를 확인하고 컴퓨터가 설정한 세개의 숫자를 유추하여 다시 숫자를 입력하는 것을 반복합니다. 세 숫자를 모두 맞추면 게임이 종료 됩니다. 

'프로그래밍 강좌 > 스크래치' 카테고리의 다른 글

4.7 [중급] 묵찌빠 게임  (0) 2008.06.16
4.6 [중급] 카드 맞추기  (0) 2008.06.11
4.5 [중급] 숫자야구 게임  (0) 2008.05.20
4.4 [중급] 영단어 퀴즈 게임  (0) 2008.05.19
4.3 [중급] 피아노 만들기  (6) 2008.05.18
4.2 [중급] 핑퐁 게임  (2) 2008.05.14