[엔트리파이선]<8>업&다운 게임 만들기

엔트리파이선으로 간단한 게임을 만들어 봅시다. 엔트리로 만들 때와 다른 느낌을 받을 것입니다. 엔트리파이선으로 콘솔 창에서 실행하는 게임을 만들면서 텍스트코딩·프로그래밍 연산 등 1~7 챕터 동안 배운 개념을 익혀봅시다.

엔트리파이선 콘솔창
<엔트리파이선 콘솔창>

대부분 게임은 복잡한 코드를 바탕으로 재미있게 구성돼 있어요. 반대로 텍스트 입출력으로만 게임을 만든다고 생각해보세요. 과연 게임을 만들 수 있을까요. 구성하기에 따라 입출력만을 활용해 충분히 게임을 만들 수 있습니다. 단순히 숫자를 맞추는 게임이 어떨까요. 지금부터 저장된 숫자가 얼마인지 맞추는 게임을 만들어봅시다. 간단히 알고리즘을 설계합니다.

'게임 시작 > 특정 숫자 범위 안에서 임의 숫자 정하기 > 계속 반복 > 숫자 입력 받기 > 임의로 정한 숫자와 입력된 숫자 비교하기 > 같다면 정답 출력 > 프로그램 종료 or 다르다면 오답 출력' 게임을 만들기 위한 기본 구조입니다. 각자 좋은 아이디어를 추가할 수도 있습니다.

<표1> 프로그래밍 정보 예시

게임에 필요한 정보를 생각해봅시다. [표1]처럼 어떤 정보를 구성하면 좋을지 고민해 봅시다. 두 개의 정보를 활용하기 위해 변수 두 개를 만들고 프로그래밍 시작을 준비합니다.

숫자 게임을 시작하기 위해 우리가 맞춰야 할 숫자값을 정해야 해요. 숫자값은 정해져 있는 숫자, 게임할 때 우리가 미리 예상 할 수 있는 숫자는 안돼요. 게임은 재미있어야 하고 예측 불가능해야 하니까요.

우리가 여러 가지 게임을 할 때 예측되지 않는 상황을 랜덤이라고 합니다. 랜덤이란 캐릭터를 고르거나 아이템 상자를 열어볼 때 예측 불가능한 상황을 뜻하는 말이에요. 파이선에는 정해진 범위 안에서 예측 불가능한 숫자를 선택해주는 함수가 있습니다. 'random.randint()'라는 함수예요. 이 함수를 이용해서 임의의 예상 안되는 숫자를 뽑고 number 변수에 저장해 보아요.

숫자를 입력 받아 저장하는 과정이 필요해요. Entry.input을 이용해서 값을 입력 받고 input이라는 변수에 저장해요. 상황에 따라 다른 명령어가 실행되기 위해서는 어떤 프로그래밍 개념을 사용해야 할까요. 바로 선택입니다. 선택을 활용할 때는 판단 기준이 되는 논리연산이 중요했습니다. 이 게임에서는 어떤 논리연산을 구성해야 할까요. “입력된 값과 임의 값이 같은지 다른지”겠죠? 이 논리연산을 활용해서 게임을 완성해 보아요.

[그림1] 프로그래밍 예시
<[그림1] 프로그래밍 예시>

[그림1]처럼 프로그래밍 됐다면 프로그램을 실행해 값을 입력하고 정답이나 오답이 나오는지 확인해 봅시다. 정답일 경우 게임을 종료하고 오답은 다시 입력을 받을 수 있도록 11~17줄 명령어를 계속 반복해요.

프로그래밍 완성 예시
<프로그래밍 완성 예시>

간단한 게임은 완성됐지만 게임이 매우 심심하고 게임적 요소가 부족해 보입니다. 어떤 요소를 추가할 수 있을까요. input과 number를 비교해서 number보다 큰지 작은지 출력하고 예상할 수 있도록 한다면 어떨까요. 입력한 횟수를 세어서 몇 번 만에 정답을 입력했는지 출력하면 어떨까요. 추가하고 싶은 게임 기능을 생각하며 자신만의 알고리즘을 설계해보아요.

입력한 횟수라는 정보가 추가됐기 때문에 정보 구성도 다시 한 번 생각해야 합니다. count라는 변수를 만들고 프로그래밍을 시작해요. count라는 변수가 만들어졌다면 입력 값이 input에 저장될 때 마다 count 변수 값에 1씩 더합니다. 간단한 숫자게임을 만들 때 선택구조는 한 가지였어요. 입력한 값이 같은지 다른지만 판단했죠.

이번에는 number와 input을 비교해 그 결과도 출력해야 해요. input 값보다 number 값이 크다면 업(UP), 작다면 다운(Down)을 출력해서 게임하는 사람이 예측할 수 있도록 정보를 제공해봅시다.

필요한 논리연산은 무엇일까요. '어떤 값보다 큰지 작은지'가 되겠죠. [그림2]와 같이 프로그래밍을 해서 게임을 마무리해 봅시다. 입력 값이 정답일 때 '정답'과 '시도한 횟수'가 출력되도록 순서대로 말하기를 넣어요. 출력이 다 되면 게임을 종료하기 위해 Entry.stop_code(“all”) 명령어를 입력해요.

[그림2] 프로그래밍 예시
<[그림2] 프로그래밍 예시>

두 값이 같지 않은 경우도 둘로 나눠야 해요. else:에 다시 한 번 if ~ else:를 추가해 큰지 작은지도 출력합시다. 게임을 실행하고 콘솔창을 확인하며 올바르게 진행되는지 살펴보세요. 게임을 여러 번 실행해보고 오류가 없는지도 확인합시다.

업&다운 게임 프로그래밍 완성 예시
<업&다운 게임 프로그래밍 완성 예시>
[엔트리파이선]&lt;8&gt;업&다운 게임 만들기

박종진기자 truth@etnews.com

위방향 화살표