Last active
October 31, 2017 13:51
-
-
Save return0927/51becff46c316c4149b50595e8a46710 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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