goodthings4me.tistory.com
rock-paper-scissors 우리말로 가위바위보 게임 (또는 묵찌빠 게임)을 파이썬으로 짜보았다. 터미널 기반에서 실행이 되는 버전을 먼저 코딩하고, 이어서 tkinter 기반으로로 만들어 볼 생각이다.
파이썬으로 만든 가위 바위 보 게임
- 사용자가 가위, 바위, 보 중 하나를 입력하고, 컴퓨터는 '가위 바위 보' 리스트에서 random.randint() 함수로 하나를 임의로 선택한다.
- '승 패 비김' 또한 리스트로 만들어서 if 조건문으로 비교하여 게임 결과를 표시한다.
- 게임은 3세 판으로 진행하고 더 진행 여부를 물은 후 계속하던지 종료하던지 한다.
- 입력 오류 등의 처리, 게임 카운트, 승/패/비김 카운트 등을 해서 출력한다.
※ 파이썬 Tkinter 모듈로 만든 가위바위보 게임 [프로그램다운로드]
[소스 코드]
import random
def rock_paper_scissors():
game = ['가위', '바위', '보']
game_result = ['승', '패', '비김']
game_cnt = 1
user_win = 0
computer_win = 0
while True:
if game_cnt < 4:
print(f'\n{"="*5} 가위.바위.보 3세판 게임 중 {game_cnt}번째 {"="*5}')
user = input('\n가위/바위/보 중 1개 입력>> ')
if not user in game:
print('입력 오류! 다시 입력하세요.')
continue
computer = game[random.randint(0, 2)]
# print(f'\nUser {user}, Computer {computer}')
print()
if user == game[0]:
if computer == game[0]:
print(f'User:{user} : Computer:{computer}\n"{game_result[2]}"')
elif computer == game[1]:
print(f'User:{user} : Computer:{computer}\n"Computer {game_result[0]}"')
computer_win += 1
elif computer == game[2]:
print(f'User:{user} : Computer:{computer}\n"User {game_result[0]}"')
user_win += 1
elif user == game[1]:
if computer == game[0]:
print(f'User:{user} : Computer:{computer}\n"User {game_result[0]}"')
user_win += 1
elif computer == game[1]:
print(f'User:{user} : Computer:{computer}\n"{game_result[2]}"')
elif computer == game[2]:
print(f'User:{user} : Computer:{computer}\n"Computer {game_result[0]}"')
computer_win += 1
elif user == game[2]:
if computer == game[0]:
print(f'User:{user} : Computer:{computer}\n"Computer {game_result[0]}"')
computer_win += 1
elif computer == game[1]:
print(f'User:{user} : Computer:{computer}\n"User {game_result[0]}"')
user_win += 1
elif computer == game[2]:
print(f'User:{user} : Computer:{computer}\n"{game_result[2]}"')
print(f'\nUser vs Computer - {user_win} 대 {computer_win}\n')
game_cnt += 1
continue
if game_cnt > 3:
while True:
game_continue = input('게임을 더 하시겠습니까?..("y/n")>>')
if game_continue in ('n', 'N'):
print('\n게임을 종료합니다.')
return False
elif game_continue in ('y', 'Y'):
game_cnt = 1
user_win = 0
computer_win = 0
break
else:
print('입력 오류! 다시 입력하세요.')
continue
rock_paper_scissors()
[실행 결과]
===== 가위.바위.보 3세판 게임 중 1번째 =====
가위/바위/보 중 1개 입력>> 보
User:보 : Computer:보
"비김"
User vs Computer - 0 대 0
===== 가위.바위.보 3세판 게임 중 2번째 =====
가위/바위/보 중 1개 입력>> 가위
User:가위 : Computer:보
"User 승"
User vs Computer - 1 대 0
===== 가위.바위.보 3세판 게임 중 3번째 =====
가위/바위/보 중 1개 입력>> 보
User:보 : Computer:바위
"User 승"
User vs Computer - 2 대 0
게임을 더 하시겠습니까?..("y/n")>>ㅛ
입력 오류! 다시 입력하세요.
게임을 더 하시겠습니까?..("y/n")>>y
===== 가위.바위.보 3세판 게임 중 1번째 =====
가위/바위/보 중 1개 입력>> rk
입력 오류! 다시 입력하세요.
===== 가위.바위.보 3세판 게임 중 1번째 =====
가위/바위/보 중 1개 입력>> 가위
User:가위 : Computer:바위
"Computer 승"
User vs Computer - 0 대 1
===== 가위.바위.보 3세판 게임 중 2번째 =====
가위/바위/보 중 1개 입력>> 가위
User:가위 : Computer:가위
"비김"
User vs Computer - 0 대 1
===== 가위.바위.보 3세판 게임 중 3번째 =====
가위/바위/보 중 1개 입력>> 바위
User:바위 : Computer:보
"Computer 승"
User vs Computer - 0 대 2
게임을 더 하시겠습니까?..("y/n")>>n
게임을 종료합니다.
[난이도 있는 간단한 소스 코드]
import random
def rock_paper_scissors():
rps = ['가위', '바위', '보']
user_win_dict = {'가위':'보','바위':'가위','보':'바위'} # User 기준 '승'인 경우
game_result = ['승', '패', '비김']
user_win = 0
computer_win = 0
game_cnt = '0'
while game_cnt == '0' or not game_cnt.isdigit():
game_cnt = input('\n몇 게임 할까요? : ')
for i in range(int(game_cnt)):
user = ''
while user not in rps:
user = input(f'\n[{i+1}번째 게임]\n가위/바위/보 중 1개 입력하세요 : ')
computer = random.choice(rps)
print(f'\nUser: {user} vs Computer: {computer}')
if user == computer:
print(f'"{game_result[2]}"')
elif user_win_dict[user] == computer:
print(f'User "{game_result[0]}"')
user_win += 1
else:
print(f'User "{game_result[1]}"')
computer_win += 1
print(f'\n게임 결과: User vs Computer - {user_win} 대 {computer_win}\n')
user_win = 0
computer_win = 0
rock_paper_scissors()
- isdigit() : 0 포함 양의 정수와 지수만 True 반환
- random.choice(rps) : parameter는 시퀀스 타입 --> 1개 추출
- rps[random.randint(0, 2)] : parameter는 0 <= x <=2 범위
- random.sample(rps, 1)[0] : parameter는 시쿼스 또는 세트 타입과 N개 --> list 반환
[실행 결과]
몇 게임 할까요? : 5
[1번째 게임]
가위/바위/보 중 1개 입력하세요 : 가위
User: 가위 vs Computer: 바위
User "패"
[2번째 게임]
가위/바위/보 중 1개 입력하세요 : 가이
[2번째 게임]
가위/바위/보 중 1개 입력하세요 : 가위
User: 가위 vs Computer: 가위
"비김"
[3번째 게임]
가위/바위/보 중 1개 입력하세요 : 가위
User: 가위 vs Computer: 보
User "승"
[4번째 게임]
가위/바위/보 중 1개 입력하세요 : 가위
User: 가위 vs Computer: 바위
User "패"
[5번째 게임]
가위/바위/보 중 1개 입력하세요 : 가위
User: 가위 vs Computer: 가위
"비김"
게임 결과: User vs Computer - 1 대 2
[파이썬 Tkinter 모듈로 만든 가위바위보 게임]
'코딩 연습 > 파이썬 기초(예제)' 카테고리의 다른 글
구구단 게임 [파이썬기초예제] (0) | 2022.04.28 |
---|---|
진수 변환 - 2진수 변환, 8진수 변환, 16진수 변환 [파이썬기초예제] (0) | 2022.04.23 |
bmi 계산하기 - 한국인의 체질량 지수 계산 [파이썬기초예제] (0) | 2022.04.20 |
북마크 관리 프로그램 코딩, 엑셀 생성 관리 [파이썬기초(예제)] (0) | 2022.04.17 |
파이썬 반복문 - 김밥 주문 계산하기 [파이썬기초(예제)] (0) | 2022.04.15 |
댓글