콘텐츠로 건너뛰기

Python - 간편하게 사용하는 가위바위보 게임(pytho

[

Rock Paper Scissors Python 게임 만들기

  • Python 배우기

더 많은 내용

/


— 무료 이메일 시리즈 —

🐍 파이썬 팁 💌

파이썬 팁 받기 »

🔒 스팸 없이. 언제든지 구독 취소할 수 있습니다.


무엇인가요? Rock Paper Scissors는?

Rock Paper Scissors를 한 번쯤은 해보았을 것입니다. 아마 누가 저녁 식사를 대접할지 또는 팀의 선수 선택권을 먼저 받을지 정하는 데 사용한 적이 있을 것입니다.

익숙하지 않다면, Rock Paper Scissors는 두 명 이상의 플레이어들을 위한 손게임입니다. 참가자들은 “rock, paper, scissors”라고 말하고, 동시에 손을 모양을 바위(주먹), 종이(손바닥 아래로 향함), 또는 가위(손가락 2개를 편 상태로)로 만듭니다. 규칙은 간단합니다:

  • 바위는 가위를 이깁니다.
  • 종이는 바위를 덮습니다.
  • 가위는 종이를 베어냅니다.

이제 규칙을 알고, 이를 파이썬 코드로 어떻게 표현할 수 있는지 고민해볼 수 있습니다.

파이썬으로 한 번의 Rock Paper Scissors 게임하기

import random

좋아요! 이제 random 모듈 내부의 다양한 도구들을 사용하여 게임에서 컴퓨터의 동작을 무작위로 설정할 수 있게 되었습니다. 그럼 이제 어떻게 시작할까요? 사용자가 동작을 선택할 수 있어야 하므로, 먼저 사용자 입력을 받을 수 있는 방법이 필요합니다.

사용자 입력 받기

user_action = input("Enter a choice (rock, paper, scissors): ")

이렇게 하면 사용자가 선택한 동작을 입력하도록 요구하고, 추후 사용을 위해 그 선택을 변수에 저장할 수 있게 됩니다. 사용자가 동작을 선택하면 컴퓨터는 어떤 동작을 선택할지 결정해야 합니다.

컴퓨터의 선택 결정하기

Rock Paper Scissors의 경쟁적인 게임은 전략이 매우 중요합니다. 그러나 그 모델을 개발하는 대신, 컴퓨터가 무작위로 결정하는 것으로 충분합니다. random 모듈을 사용하여 컴퓨터 동작을 무작위로 선택할 수 있습니다:

possible_actions = ["rock", "paper", "scissors"]
computer_action = random.choice(possible_actions)

위의 코드는 possible_actions 리스트에서 무작위로 선택된 동작을 computer_action 변수에 할당합니다. 이제 사용자의 선택과 컴퓨터의 선택을 가지고 어떤 동작이 이기는지 결정해야 합니다.

승자 결정하기

Rock Paper Scissors 게임에서 어떤 동작이 이기는지 결정하는 것은 간단합니다. 가능한 경우를 목록으로 만들고, 이겨야 할 동작을 이길 수 있는지 판단하여 결과를 출력합니다.

if user_action == computer_action:
print(f"Both players chose {user_action}. It's a tie!")
elif (
user_action == "rock" and computer_action == "scissors"
or user_action == "paper" and computer_action == "rock"
or user_action == "scissors" and computer_action == "paper"
):
print(f"You chose {user_action}, computer chose {computer_action}. You win!")
else:
print(f"You chose {user_action}, computer chose {computer_action}. You lose!")

이제 한 번의 게임이 완료되었습니다! 사용자는 동작을 선택하고, 컴퓨터는 동작을 무작위로 선택합니다. 이 두 동작을 비교하여 승자를 결정하고 결과를 출력합니다.

여러 번의 게임 플레이하기

한 번의 게임으로는 재미가 덜한 경우가 많습니다. 여러 번의 게임을 연속으로 플레이할 수 있도록 하려면 while 루프를 사용하면 됩니다.

while True:
user_action = input("Enter a choice (rock, paper, scissors): ")
computer_action = random.choice(possible_actions)
# 결과 판정과 출력 코드...
play_again = input("Do you want to play again? (yes/no): ")
if play_again.lower() != "yes":
break

위의 코드는 while 루프를 사용하여 게임이 끝나기 전까지 계속해서 게임을 플레이하도록 합니다. 사용자가 게임을 다시 플레이할지 묻고, 사용자의 응답이 “yes”가 아니라면 루프를 종료합니다.

enum.IntEnum을 사용하여 동작 설명하기

Rock Paper Scissors 게임에서는 동작을 설명하기 위해 문자열을 사용합니다. 이는 문제가 발생하기 쉽습니다. 예를 들어, 오타로 인해 먼저 입력된 “rock” 대신 “rck”를 입력하는 경우를 방지하기 위해 enum.IntEnum을 사용하는 것이 좋습니다.

from enum import IntEnum
class Action(IntEnum):
ROCK = 0
PAPER = 1
SCISSORS = 2

Action 열거형 클래스는 숫자 값에 각 동작을 연결합니다. 이렇게 하면 문자열 대신 숫자를 사용하여 동작을 표현할 수 있으며, 오타로 인한 문제를 방지할 수 있습니다.

프로그램의 플로우(차트) 이해하기

동작 설명을 추가했으니 이제 프로그램의 전체 플로우를 이해할 차례입니다. 게임을 실행하는 데 필요한 모든 코드를 하나로 모아 봅시다.

def determine_winner(user_action, computer_action):
if user_action == computer_action:
return "It's a tie!"
elif (
user_action == Action.ROCK and computer_action == Action.SCISSORS
or user_action == Action.PAPER and computer_action == Action.ROCK
or user_action == Action.SCISSORS and computer_action == Action.PAPER
):
return "You win!"
else:
return "You lose!"
while True:
user_choice = input("Enter a choice (rock, paper, scissors): ")
try:
user_action = Action[user_choice.upper()].value
except KeyError:
print("Invalid choice! Please try again.")
continue
computer_action = random.choice(list(Action)).value
print(f"You chose {Action(user_action).name.lower()}, computer chose {Action(computer_action).name.lower()}.")
result = determine_winner(user_action, computer_action)
print(result)
play_again = input("Do you want to play again? (yes/no): ")
if play_again.lower() != "yes":
break

이제 게임이 여러 번 플레이되고, 승자가 올바르게 결정되며, 결과도 정확하게 출력됩니다. 프로그램은 사용자가 더 이상 플레이하지 않을 때까지 게임을 반복 실행합니다.

Rock Paper Scissors… Lizard Spock

Rock Paper Scissors 게임을 확장하여 Chuck Lorre와 Bill Prady가 “The Big Bang Theory”라는 TV 프로그램에 소개한 “Rock Paper Scissors… Lizard Spock” 룰을 사용할 수도 있습니다. 이 룰은 더 많은 동작을 도입하여 게임을 더욱 흥미롭게 만듭니다.

이 확장된 게임을 구현하는 방법은 위에서 설명한 것과 동일합니다. 추가 동작에 대한 규칙을 작성하고, 사용자와 컴퓨터의 동작을 비교하여 승자를 결정하고, 결과를 출력하면 됩니다. 예제의 프로그램에서 enum.IntEnum 클래스의 값들을 추가한다면 “Rock Paper Scissors Lizard Spock” 게임을 쉽게 추가할 수 있습니다.

결론

Rock Paper Scissors를 파이썬으로 구현하는 방법을 배웠습니다. 사용자 입력을 받고, 컴퓨터의 선택을 무작위로 만들고, 승자를 결정하는 함수를 작성하여 게임을 플레이할 수 있습니다. 이제 파이썬을 사용하여 자신만의 게임을 만들어보세요!

이제부터는 더 많은 내용을 삽입하며, 상세하고 단계별, 실행 가능한 코드 예제와 함께 설명하도록 하겠습니다.