학창시절 쉬는시간 혹은 수업시간에 친구들과 즐기던 게임인 '숫자야구' ⚾️ 를 파이썬을 통해 구현해 보려고 한다.
이번이 첫 프로젝트라 많이 미숙하고 코드가 정신없을 수 있다. 코드를 보고 개선해야할 점이나 고쳤으면 하는 점들을 댓글에 달아주는것은 환영이다.🙌🏻 언제나 날카로운 태클을 기대하고 있다.
예를 들어 컴퓨터가 '5 9 4 1' 를 뽑았다고 하자. 그럼 사용자는 1 ~ 9까지의 숫자 중 3개를 뽑아 컴퓨터에게 물어본다. 사용자가 '4 8 3 2' 이라는 숫자를 제시할 때 컴퓨터는 '1 Ball' 이라고 한다. 왜냐하면 4는 있지만 위치가 맞지 않기 때문이다. 그리고 사용자가 '5 4 8 2' 이라고 한다면 컴퓨터는 1 Strike 1 Ball 이라고 할 것이다. 사용자가 추리하는 과정을 거쳐 4 Strike를 이끌어내면 성공이다.
한 단계 한 단계 완성을 해 보자.
우리는 게임을 하기 위해 1 ~ 9 까지의 범위 안에서 중복 없이 4개의 숫자를 뽑아야 한다. 그게 게임의 시작이다. 4개의 숫자를 correct_number
라고 이름을 짓겠다.
일단 파이썬에서 랜덤한 숫자를 뽑기 위해선 'import random'
이라는 모듈이 필요하다. 'import random'
은 파이썬에서 제공하는 모듈이다. C++ 에서 cstlib, ctime
같은 역할을 하고있다.
본인은 랜덤 생성한 숫자를 배열에 담아볼 생각이다. 그래서 correct_number = ["0", "0", "0", "0"]
이라고 하였다. 배열 안에 문자열로 초깃값을 넣은 이유는 파이썬 문법 중 사용자의 입력을 받아들이는 input()
함수의 특성때문이다. input()
함수는 사용자의 입력을 문자열로 받아들이기 때문이다. 그래서 배열의 값도 "0"
으로 정하였다.
import random #
correct_number = ["0", "0", "0", "0"]
corrcet_number 의 초깃값을 설정한 후 다음 단계로 첫 번째 배열에 1 ~ 9 까지의 범위 중 하나의 숫자 값을 주어야 한다. 파이썬에서는 randrange
라는 함수가 있다. randrange
의 사용예를 보여주자면 random.randrange(1, 9, 1)
은 '1 이상 그리고 9 미만의 숫자 중 랜덤으로 하나의 숫자를 뽑아라' 라는 뜻이다. 숫자야구 게임의 규칙은 1 이상 9 이하의 숫자를 뽑아야 하므로 random.randrange(1, 10, 1)
로 하면 되겠다.
correct_number[0] = str(random.randrange(1, 10, 1))
correct_number[1] = str(random.randrange(1, 10, 1))
correct_number[2] = str(random.randrange(1, 10, 1))
correct_number[3] = str(random.randrange(1, 10, 1))
이제 4개의 숫자를 랜덤으로 할당하였다. 하지만 4개의 숫자들은 서로 같으면 안된다. 그렇다면 서로의 숫자를 비교하여 같으면 다시 랜덤으로 숫자를 주어야 할 것이다. 본인은 4개의 숫자를 중복없이 배정하기 위해 while
문을 사용할 것이다.
while [조건문]:
[수행부분]
이런식으로 구성이 되어있다.
참(True)인 경우 내부의 수행 부분을 진행
하고, [조건문]이 거짓(False)인 경우 while문을 빠져
나간다. 조건문 끝에는 꼭 클론(;)을 붙여야
한다. [수행부분]은 들여쓰기를 통해 구분
을 해야한다.1부터 100까지 수 중에서 홀수만 더한다고 했을때 아래와 같이 while 문을 사용할 수 있다
i = 0
result_even = 0
while i < 100:
i = i + 1
if i % 2 == 0:
result_even = result_even + i
이런식으로 while 문을 사용하게 되면 i가 0부터 하나씩 더해지면서 99가 될때 까지는 while 의 조건문이 True 가 되어서 아래 수행 부분을 수행하게 된다.
그러다가 i가 5번째 줄에서 1이 더해져서 100이 되고, 6, 7번째 코드를 수행하고 다시 4번 라인으로 왔을 때 while의 조건문이 False 가 되면서 while 문을 나오게 된다.
간단히 while 문 사용법을 알아봤으니 이제 코드에 녹여보자.
while(correct_number[0] == correct_number[1]):
correct_number[1] = str(random.randrange(1, 10, 1))
while(correct_number[0] == correct_number[2] or correct_number[1] == correct_number[2]):
correct_number[2] = str(random.randrange(1, 10, 1)`
while(correct_number[0] == correct_number[3] or correct_number[1] == correct_number[3] or xorrect_number[2] == correct_number[3]):
correct_number[3] = str(random.randrange(1, 10, 1))
correct_number[0]
과 correct_number[1]
이 같다면 correct_number[1]
에 다시 랜덤 숫자를 배정한다. 만약 랜덤으로 배정받은 숫자가 또 같다면 그 과정을 계속 반복하고, 다르다면 while 문을 탈출한다.
이제 컴퓨터가 랜덤 숫자를 생성했으니 플레이어에게 숫자를 입력받아 비교를 해야한다. 그래서 자리와 숫자가 같다면 strike, 자리는 다르지만 숫자가 있다면 ball 을 추가해야 한다.
try_number = 0
strike_number = 0
ball_number = 0
print("숫자여구를 시작합니다.")
print("---------------------")
while(strike_number < 4):
number = str(input("숫자 4자리를 입력하세요: "))
strike_number = 0
ball_number = 0
for i in range(0, 4):
for j in range(0, 4):
if(number[i] == str(correct_number[j]) and i == j):
strike_number += 1
elif(number[i] == str(correct_number[j]) and i != j):
ball_number += 1
print("결과: [",strike_number,"]스트라이크 [",ball_number,"]볼")
try_number += 1
이제 모든걸 완성하였다. 게임이 끝난 후 처리 과정만 추가하면 된다.
print("------------------------"
print("축하합니다! 정답입니다!")
print("[",try_number,"]번 만에 맞췄습니다")
print("숫자야구 게임에 오신 여러분 환영합니다.")
import random #파이썬 랜덤 모듈
correct_number = ["0", "0", "0", "0"] #파이썬에서 input() 함수의 사용자 입력은 문자열이므로 "0" 문자열로 배열
correct_number[0] = str(random.randrange(1, 10, 1))
correct_number[1] = correct_number[0]
correct_number[2] = correct_number[0]
correct_number[3] = correct_number[0]
# 랜덤 숫자가 같다면 계속 반복
while(correct_number[0] == correct_number[1]):
correct_number[1] = str(random.randrange(1, 10, 1))
while(correct_number[0] == correct_number[2] or correct_number[1] == correct_number[2]):
correct_number[2] = str(random.randrange(1, 10, 1))
while(correct_number[0] == correct_number[3] or correct_number[1] == correct_number[3] or correct_number[2] == correct_number[3]):
correct_number[3] = str(random.randrange(1, 10, 1))
print(correct_number)
try_number = 0
strike_number = 0
ball_number = 0
print("숫자야구를 시작합니다.")
print("--------------------------")
while (strike_number < 4):
number = str(input("숫자 4자리를 입력하세요: "))
strike_number = 0
ball_number = 0
for i in range(0, 4): # i 값의 범위 0~3
for j in range(0, 4):
if(number[i] == str(correct_number[j]) and i == j):
strike_number += 1
elif(number[i] == str(correct_number[j]) and i != j):
ball_number += 1
print("결과: [",strike_number,"]스트라이크 [",ball_number,"]볼")
try_number += 1
print("--------------------------")
print("축하합니다! 정답입니다!")
print("[",try_number,"]번 만에 맞췄습니다")
프로그래밍을 배우고 처음으로 해본 게임 만들기이다. 비교적 할만했지만 중간에 헷갈린적도 많다.
이번엔 Python 이라는 언어를 사용하여 만들어 보았지만 좀 더 규모가 큰 프로젝트를 하게 된다면 Python 언어를 사용하지 않을것 같다. 직관적이라 편하고 틀도 다른 언어에 비해 자유롭지만 프로젝트를 하기에는 좀 많이 헷갈린다고 해야하나?
여튼 차라리 틀과 규칙이 자유롭지 않은 언어가 프로젝트를 진행하기에는 더 나은것 같다.