대메뉴 바로가기 본문 바로가기

데이터 기술 자료

데이터 기술 자료 상세보기
제목 스크래치 프로그래밍 맛보기 : 숫자 야구
등록일 조회수 7453
첨부파일  

스크래치 프로그래밍 맛보기

숫자 야구



스크래치는 MIT 대학교에서 2007년에 만든 교육용 프로그래밍 언어다. 다른 프로그래밍 언어와 달리 마치 레고 블록을 쌓듯 프로그램을 만들 수 있어 배우기 쉽다. 스크래치 홈페이지(scratch.mit.edu)에서 직접 프로그램을 만들 수 있고, 오프라인 버전을 다운로드 받아 사용할 수도 있다.



학교에서 친구들과 숫자 야구 게임을 종종 한다. 숫자 야구 게임은 한 사람이 세 개의 숫자를 생각하면 다른 사람이 그 숫자들을 추측해서 알아 맞히는 게임이다. 예를 들어 “365”가 문제였다고 하자. 이때 맞히는 사람이 “357”을 말했다면 ‘3’은 위치가 같으므로 스트라이크가 되고 ‘5’는 숫자는 맞았지만 위치가 틀렸으므로 볼이 된다. 따라서 “357”은 “1 스트라이크, 1 볼”이 된다. 이런 정보를 종합해서 3 스트라이크(숫자 세 개를 모두 정확히 맞힌 경우)가 되면 게임이 끝난다. 이 숫자 야구 게임을 스크래치로 만들어 보았다.

아래 <그림 1>은 숫자 야구의 실행화면이다. 4번째 시도로 “264”를 입력해서 볼 세 개를 받았다. “결과” 리스트에 지금까지 시도한 숫자와 결과가 모두 기록되므로, 이를 이용해 가능한 적은 횟수로 숫자들을 맞혀야 한다. <그림 1>에서 “결과” 리스트에 적힌 내용을 보면서 곰곰이 잘 생각해보면 “642”가 정답이 되는 것을 알 수 있으므로, 이를 입력하면 <그림 2>와 같이 스트라이크 3개를 받아 게임을 끝낼 수 있다.





<그림 1> 숫자 야구 실행화면



<그림 2> 정답을 맞혔을 때의 화면

문제 만들기

먼저 문제를 만들기 위해 “정답”이라는 리스트를 만들어 여기에 숫자 세 개를 넣는다. [1부터 9사이의 난수] 블록을 세 번 반복해 수를 만들면 되지만, 이렇게 만들면 같은 숫자가 여러 번 나올 수 있어서 문제로 알맞지 않다. 숫자 야구 게임에서는 세 개의 숫자가 모두 달라야 하기 때문이다. 만약 이 방법으로 만들었다면 뽑은 숫자들 중에서 서로 같은 것이 있는지 검사를 해 같은 숫자가 있다면 처음부터 다시 만들어야 한다.

나는 위 방법과는 다르게 만들었다. <그림 3>을 보면 먼저 “임시”라는 리스트를 만들어 여기에 1부터 9까지 숫자를 차례대로 넣었다. 그런 다음에 “임시” 리스트 중의 하나를 뽑아서 그 숫자를 “정답” 리스트에 추가하고, 뽑은 숫자는 리스트에서 제거하는 식으로 만들었다. 이렇게 하면 “정답”에 포함된 숫자는 다시 뽑을 수 없게 되어서 서로 다른 숫자로만 이루어진 문제를 만들 수 있다.





<그림 3> 문제 만들기

입력 값 받기

게임이 시작되면 사용자로부터 세 개의 숫자를 입력 받는다. 이것은 [~ 묻고 기다리기] 블록을 사용하면 된다. 사용자로부터 입력 받은 값이 100 미만이거나 1000 이상이면 숫자 세 개가 아니기 때문에 경고음을 낸 뒤, 다시 입력하도록 만들었다.





<그림 4> 입력 값 받기

스트라이크, 볼 개수 세기

사용자로부터 숫자 세 개를 입력 받은 다음에는 스트라이크가 몇 개이고, 볼이 몇 개인지 검사해서 결과를 알려줘야 한다. 스트라이크는 위치와 값이 모두 같아야 하기 때문에 “대답”의 첫 번째 숫자와 “정답”의 첫 번째 숫자가 같은지 비교한다. 만약 두 값이 같다면 스트라이크 변수, S를 1 증가시킨다. 두 번째와 세 번째 숫자도 같은 방법으로 검사한다.



<그림 5> 스트라이크 개수 세기

볼은 숫자는 맞는데 그 숫자의 위치가 다른 경우이다. 그렇기 때문에 “대답”의 첫 번째 숫자와 “정답”의 두 번째 또는 세 번째 숫자가 같으면 볼 변수인 B를 1 증가시킨다. “대답”의 두 번째와 세 번째 숫자도 같은 방법으로 검사한다.



<그림 6> 볼 개수 세기 (일부분)



공 보이기

“공 보이기” 기능은 스트라이크와 볼의 결과를 좀 더 재미있게 알려주기 위해 만들었다. 스트라이크의 개수를 그냥 글씨로만 알려주면 재미 없어서, 스트라이크 개수만큼 야구공이 0.5초의 시간 간격을 두고 나오게 만들었다. 이때 효과음도 함께 나오는데 몇 개나 맞았을까 기다리면서 살짝 긴장감도 생긴다. <그림 7>은 스트라이크 공을 보여주는 프로그램인데, 볼도 같은 방법으로 화면에 나오게 만들었다. <그림 7>의 프로그램을 보면 [~ 복제하기] 블록이 있는데, 복제 기능은 똑같은 모양을 복사해 추가하는 기능이다. 이 기능을 사용하면 스프라이트를 새로 만들 필요가 없어서 편리하다.





<그림 7> 스트라이크 공 보이기

결과 추가

“결과 추가” 기능은 “결과” 리스트에 사용자가 입력한 숫자 및 그 숫자에 대한 스트라이크와 볼의 개수를 넣어주는 기능이다. “결과” 리스트를 확인하면서 다음에 어떤 숫자를 입력할 지 생각해 볼 수 있다. 숫자 야구는 게임을 처음 시작할 때 1인용과 2인용을 선택할 수 있는데, 만약 2인용을 선택했다면 “결과” 리스트가 플레이어마다 하나씩 따로 나온다. 2인용 게임은 컴퓨터가 만든 숫자를 두 명이 교대로 가능한 빨리 맞히는 게임이다.



<그림 8> "결과" 리스트에 추가

숫자 야구 게임은 http://scratch.mit.edu/projects/12136463/에서 실행해 볼 수 있고 프로그램 소스코드도 볼 수 있다. 평균 10번 안에 맞힐 수 있다면 꽤 잘하는 편이다.



출처 : 마이크로소프트웨어 6월호

제공 : 데이터 전문가 지식포털 DBguide.net