당우 일기장

2.개인과제 )파이썬 베스킨라빈스31 게임 만들기 본문

내일배움캠프

2.개인과제 )파이썬 베스킨라빈스31 게임 만들기

당우 2021. 12. 21. 20:46

단체로 많이하는 게임인 베스킨라빈스 31 게임을 파이썬을 이용하여 만들어보도록합시다.

 

[게임규칙]

1부터 31까지의 숫자를 플레이어와 컴퓨터가 번갈아 가면서 순서대로 말합니다. 숫자를 말할 때는 1개부터 3개까지의 연속된 숫자를 말할 수 있습니다. 즉, 처음 시작하는 사람이 무조건 1 혹은 1, 2 혹은 1, 2, 3을 말하면서 시작하고, 그 뒷 사람은 앞 사람이 말한 숫자에 이어서 또 1개~3개의 연속된 숫자를 차례대로 말하는 방식입니다. (앞 사람이 3까지 불렀다면, 뒷 사람은 4 혹은 4, 5 혹은 4, 5, 6을 말해야 합니다.) 그렇게 해서 31을 부르는 사람이 지는 게임입니다.

 

[상세설명]

  1. 컴퓨터가 먼저 숫자를 말할지, 플레이어가 먼저 숫자를 말할지는 랜덤으로 정한다.
  2. 컴퓨터 혹은 플레이어는 1 혹은 1, 2 혹은 1, 2, 3을 말하면서 게임을 시작한다. (단, 컴퓨터가 숫자를 1개 부를지, 2개 부를지, 3개 부를지는 random 패키지를 이용해서 랜덤으로 정한다. 플레이어는 input 함수를 통해서 연속해서 부르고 싶은 숫자 개수를 입력한다.)
  3. 컴퓨터 혹은 플레이어는 앞 사람이 부른 숫자에 이어서, 1개~3개까지의 연속된 숫자를 말한다.
  4. 2~3번을 31을 말하는 사람이 나올 때까지 반복한다. (즉, 2~3번을 for문 혹은 while문으로 작성할 것. 단, 컴퓨터와 플레이어 모두 31을 초과해서 숫자를 부를 수는 없다.)
  5. 31을 말하는 사람이 컴퓨터라면 '플레이어 승'을, 31을 말하는 사람이 플레이어라면 '컴퓨터 승'을 출력한다.

 

1번 풀이

import random

print('베스킨라빈스 31 게임')
print('1부터 31까지의 숫자를 번갈아 불러 31을 부르는 사람이 지는 게임 입니다.')

number = 0

turn = 0



while True:
    if turn == 0:
        a = int(input('숫자개수(1 ~ 3): '))
        for _ in range(a):
            number += 1
            print('사람:', number)

        turn += 1
        turn %= 2

    elif turn == 1:
        c = random.randint(1, 3)
        for _ in range(c):
            number += 1
            print('컴퓨터', number)

        turn += 1
        turn %= 2

    if number >= 31:
        break

if turn == 0:
    print('사람 승리')
else:
    print('컴퓨터 승리')

while 문을 사용하여  베스킨라빈스게임을 할수있게했지만 컴퓨터와 내가 먼저해아하는지는 구현하지못했다

 

2번 풀이  #2번풀이는 해설을 참고하였다

from random import randrange

the_last_number = 0

# 3. 컴퓨터 혹은 플레이어는 앞 사람이 부른 숫자에 이어서, 1개~3개까지의 연속된 숫자를 말한다.
def computer_pick(the_last_number):
    c = randrange(1, 4)
    # 31 초과는 부를 수 없고, 31 초과를 부르려고 한다면 그냥 컴퓨터가 31까지 부르려 한다고 생각
    if the_last_number + c > 31:
        c = 31 - the_last_number
    for i in range(1, 1+c):
        print('컴퓨터: ', the_last_number + i)
    return the_last_number + c

def player_pick(the_last_number):
    p = int(input())
    # 31 초과는 부를 수 없음
    # 해당 예외처리는 플레이어가 숫자를 입력한다는 전제하에 작성된 것이고, 정확한 예외처리는 try, except 를 사용하는 것이 맞습니다!
    while (p not in [1, 2, 3]) or (the_last_number + p > 31):
        print('다시 입력하세요!')
        p = int(input())
    for i in range(1, 1+p):
        print('플레이어: ', the_last_number + i)
    return the_last_number + p

# 1. 컴퓨터가 먼저 숫자를 말할지, 플레이어가 먼저 숫자를 말할지는 랜덤으로 정한다.
whos_first = randrange(0, 2)

# 2. 컴퓨터 혹은 플레이어는 1 혹은 1, 2 혹은 1, 2, 3을 말하면서 게임을 시작한다. (단, 컴퓨터가 숫자를 1개 부를지, 2개 부를지, 3개 부를지는 random 패키지를 이용해서 랜덤으로 정한다. 플레이어는 input 함수를 통해서 부르고 싶은 숫자까지 이어서 말한다.)
# 컴퓨터가 먼저 할 경우
if whos_first == 1:
    the_last_number = computer_pick(the_last_number)

# 4. 2~3번을 31을 말하는 사람이 나올 때까지 반복한다. (즉, 2~3번을 while문으로 작성할 것. 단, 컴퓨터와 플레이어 모두 31을 초과해서 숫자를 부를 수는 없다.)
# 5. 31을 말하는 사람이 컴퓨터라면 '플레이어 승'을, 31을 말하는 사람이 플레이어라면 '컴퓨터 승'을 출력한다.
while True:
    the_last_number = player_pick(the_last_number)
    if the_last_number == 31:
        print('컴퓨터 승!')
        break
    the_last_number = computer_pick(the_last_number)
    if the_last_number == 31:
        print('플레이어 승!')
        break