Skip to content

Instantly share code, notes, and snippets.

@return0927
Last active October 31, 2017 13:51
Show Gist options
  • Save return0927/51becff46c316c4149b50595e8a46710 to your computer and use it in GitHub Desktop.
Save return0927/51becff46c316c4149b50595e8a46710 to your computer and use it in GitHub Desktop.
from random import choice
class RSP():
def __init__(self):
self.msg = {
"case": {
"win": "당신이 이겼습니다!",
"lose": "당신이 졌습니다!",
"draw": "비겼습니다!"
},
"notice": {
"turn": "공격권을 위한 승부를 진행합니다.",
"start": "가위, 바위, 보 중 하나를 내세요.\r\n: "
},
"turn": {
"pre": {
"player": "선 공격권을 당신이 가져옵니다!",
"stranger": "선 공격권을 상대가 가져갑니다!"
},
"transfer": {
"player": "공격권이 당신에게 넘어옵니다!",
"stranger": "공격권이 상대에게 넘어갑니다!"
},
"keep": {
"player": "당신의 공격권이 유지됩니다.",
"stranger": "상대방의 공격권이 유지됩니다."
}
}
}
self.rsp = ['가위', '바위', '보']
self.winTable = {"win": 0, "lose": 0} # 승패 테이블은 플레이어의 입장에서 체크합니다.
self.win = True
self.lose = False
self.draw = None
self.prefer = 0
self.keep_running = True
def getChoice(self, compare=False, data="", prefer=None):
'''
:param compare: data의 값과 승패를 비교할지를 결정합니다.
:param data: compare의 값이 True일 때, 비교할 값입니다.
:param prefer: 공격권이 자신에게 있는지를 결정합니다.
:return: compare가 True라면 승패를 비교한 값을, False라면 랜덤으로 선택된 값을 반환합니다.
'''
self.lastChoice = choice(self.rsp)
if compare:
if not data in self.rsp:
raise Exception("일정한 포멧의 선택이 주어지지 않았습니다.")
if self.lastChoice == self.rsp[0]: # 랜덤: 가위
if data == self.rsp[0]: # 가위
return self.win if prefer else self.lose if not prefer is None else self.draw
if data == self.rsp[1]: # 바위
return self.win
if data == self.rsp[2]: # 보
return self.lose
elif self.lastChoice == self.rsp[1]: # 랜덤: 바위
if data == self.rsp[0]: # 가위
return self.lose
if data == self.rsp[1]: # 바위
return self.win if prefer else self.lose if not prefer is None else self.draw
if data == self.rsp[2]: # 보
return self.win
else: # 랜덤: 보
if data == self.rsp[0]: # 가위
return self.win
if data == self.rsp[1]: # 바위
return self.lose
if data == self.rsp[2]: # 보
return self.win if prefer else self.lose if not prefer is None else self.draw
raise Exception("이상한 상태가 발생했습니다.")
else:
return self.lastChoice
def getFirstPrefer(self):
userInput = input(self.msg['notice']['start'])
result = self.getChoice(True, userInput, None)
if result is self.win:
print(self.msg['case']['win'], self.msg['turn']['pre']['player'])
return 2
if result is self.lose:
print(self.msg['case']['lose'], self.msg['turn']['pre']['stranger'])
return 1
if result is self.draw:
print(self.msg['case']['draw'])
return 0
def main(self):
print(self.msg['notice']['turn'])
while not self.prefer:
self.prefer = self.getFirstPrefer()
self.prefer = True if self.prefer == 2 else False
while self.keep_running:
userInput = input(self.msg['notice']['start'])
if not userInput:
self.keep_running = False
raise Exception("사용자가 게임을 중단했습니다.")
result = self.getChoice(True, userInput, self.prefer)
if result is self.win:
print(self.msg['case']['win'], self.msg['turn']['keep' if self.prefer else 'transfer']['player'])
self.prefer = True
else:
print(self.msg['case']['lose'], self.msg['turn']['transfer' if self.prefer else 'keep']['stranger'])
mainLoop = RSP()
mainLoop.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment