프로그래밍/코드 조각

[python] 야구 게임

제페 2015. 11. 15. 10:41
반응형

 

#-*- coding: utf-8 -*-
 
import random
 
class text_baseball_game:
    
    maxround = int()
    nummax = int()
    numnumbers = int()
    nums = list()
 
    # maxround: 최대 게임의 라운드입니다.
    # nummax: 맞춰야 할 수의 최대값 입니다.
    # numnumbers 맞춰야 할 수의 개수입니다.
    def __init__(self, maxround: int = 10, nummax: int = 9, numnumbers: int = 3):
        
        if(nummax < numnumbers):
            raise ValueError("numnumbers too big")
 
        self.maxround = maxround
        self.nummax = nummax
        self.numnumbers = numnumbers
 
    def __game_init(self): # private func __...__
        
        # n개의 카드를 섞습니다.
        temp = list()
 
        for num in range(0, self.nummax + 1):
            temp.append(num)
 
        random.shuffle(temp)
        
        # 섞인 카드에서 가장 앞의 numnumbers장을 가져옵니다.
        for idx in range(0, self.numnumbers):
            self.nums.append(temp[idx])
 
    def _print_round_info(self, round: int):
        print("*ROUND: {0}".format(round))
 
    def _print_round_result(self, numball: int, numstrike: int):
        print("{0}BALL {1}STRIKE!".format(numball, numstrike))
 
    def _print_input_message(self):
        print("ENTER THE {0} NUMS({1}~{2}): ".format(self.numnumbers, 0, self.nummax), end = "")
    
    def _get_user_input(self):
        return str(input())
 
    def _print_user_input_nums(self, inputnums: list):
        print("INPUT NUMS: {0}".format(inputnums))
    
    def _print_game_result(self, iswin: bool):
        if iswin:
            print("YOU WIN!")
        else:
            print("YOU LOSE...")
 
    def run(self):
 
        self.__game_init()
        
        roundres = False
 
        for nowround in range(self.maxround):
 
            # 라운드를 출력합니다.
            self._print_round_info(nowround)
            
            # 입력 메세지를 출력합니다.
            self._print_input_message()
 
            # 유저 입력을 받습니다.
            userinputs = self._get_user_input()
 
            userinput_nums = list()
 
            # 입력된 문자열에서 문자 하나씩 검사하며, 숫자를 골라냅니다.
            for input_elem in userinputs:
                if str(input_elem).isdigit():
                    userinput_nums.append(int(input_elem))
                    if len(userinput_nums) == self.numnumbers:
                        break
            
            # 골라진 숫자를 출력합니다.
            self._print_user_input_nums(userinput_nums)
 
            numstrikes = 0
            
            # 스트라이크 수를 검사합니다.
 
            for num in self.nums:
                if 0 < userinput_nums.count(num):
                    numstrikes += 1
            
            self._print_round_result(self.numnumbers - numstrikes, numstrikes)
 
            # 모두 스트라이크 했다면 이겼다는 메세지를 출력하고 게임을 종료합니다.
            if numstrikes == self.numnumbers:
                roundres = True
                break
        
        self._print_game_result(roundres)
 
game = text_baseball_game(12)
 
game.run()

 

 

c를 처음 배웠던 때의 생각이 스멀스멀  ^^

 

 

 

반응형