ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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를 처음 배웠던 때의 생각이 스멀스멀  ^^

     

     

     

    반응형
Designed by Tistory.