파이썬에서 마스터마인드 보드 게임 구현

소개



Python은 프로토타이핑 속도를 높이는 간단한 프로그래밍 언어입니다. 마스터마인드를 코딩해 봅시다. 이것은 색상을 사용하는 간단한 보드 게임이지만 대신 숫자를 사용하겠습니다. 막대 뒤에는 한 플레이어가 4가지 색상을 표시합니다. 다른 플레이어는 첫 번째 플레이어의 색상을 볼 수 없습니다. 첫 번째 플레이어의 색상을 코드 메이커라고 하고 다른 플레이어의 색상을 코드 브레이커라고 합니다. 코드 브레이커는 코드 제작자를 추측하기 위해 2에서 12 사이의 시도를 합니다. 시도 횟수는 짝수여야 합니다.

구현


  • 임의 모듈 가져오기

  •   import random
    
    


  • 플레이 횟수는 2~12라운드 사이여야 합니다.

  •   while True:
          try:
              rounds = int(input("Enter number of rounds (Even): "))
    
              if rounds >= 2 and rounds <= 12 and rounds % 2 == 0:
                  break
    
          except ValueError:
              print("Round must be an even number from 2 to 12 includes")
    
    


  • 설정: 중복 및 공백이 있어야 합니까? 사용자가 참이면 1, 거짓이면 0을 입력하도록 허용해 보겠습니다. 우리는 마스터마인드 게임을 위한 숫자이기 때문에 공백이 필요하다고 생각하지 않습니다. 사용자가 지정되지 않은 숫자를 입력하면 중복을 0으로 설정하도록 만들 것입니다.

  •   try:
          duplicates_allowed = int(input("Duplicates allowed? (1/0) "))
      except ValueError:
          duplicates_allowed = 0
    
    


  • 우리가 다룰 코드의 수는 4개입니다. 따라서 코드 차단기에는 4개의 코드가 있습니다.

  •   NUMBER_CODE = 4
    
    


  • 코드 생성기는 코드 차단기와 함께 사용자가 추측해야 하는 것입니다. duplicates_allowed 옵션을 고려하여 코드 메이커를 생성합니다.

  •   code_maker = []
      counter = 0
    
      while counter < NUMBER_CODE:
          code = random.randint(0, 9)
    
          if duplicates_allowed:
              code_maker.append(code)
              counter += 1
    
          else:
              if not code in code_maker:
                  code_maker.append(code)
                  counter += 1
    


  • 이것은 게임이므로 사용자에게 몇 가지 힌트를 제공해야 하므로 도전적이어야 하지만 너무 어렵지 않아야 합니다. 사용자가 코드에 근접한 경우 사용자에게 힌트를 줍니다. Let [0, 0, 0, 0]는 각 코드를 나타내며 코드 차단기가 코드 제작자보다 크면 힌트 1, 같으면 힌트 0, 그렇지 않으면 -1입니다.

  •   hints = ['h', 'i', 'n', 't']
    
    


  • 이제 사용자가 추측한 코드 브레이커를 입력할 수 있습니다. 사용자는 코드 제작자를 추측하는 마스터마인드를 플레이하게 됩니다. 라운드 수가 소진되거나 코드 브레이커가 코드 메이커와 일치하면 게임이 종료되며, 이 경우 모든 힌트는 [0, 0, 0, 0] 됩니다.

  •   # code breaker guesses the code by the code maker
      while rounds > 0:
    
          # enter guess with spaces
          code_breaker = list(map(int, input("Enter codes space separated: ").split()))
    
          # compare the code_breaker to the code maker
          for i in range(NUMBER_CODE):
              if code_breaker[i] > code_maker[i]:
                  hints[i] = 1
              elif code_breaker[i] == code_maker[i]:
                  hints[i] = 0
              else:
                  hints[i] = -1
    
          # because of the values that we used to hint the user
          # we have to find some dicey way to break the program
          # when the user guesses the code (all hints go to 0)
          if hints.count(0) == 4:
              break
    
          print(hints)
    
          rounds -= 1
    


  • 이제 숫자에 따라 누가 게임 베이스에서 이겼는지 결정합니다.

  •   if rounds > 0:
          print("You won the rounds")
      else:
          print("You lost bitterly to a computer")
    
      print(code_maker)
    


    최종 스니펫




    # app.py
    
    # Import the _random_ module
    import random
    
    # The number of times to play must be even between 2 to 12 rounds
    while True:
        try:
            rounds = int(input("Enter number of rounds (Even in [2, 12]): "))
    
            if rounds >= 2 and rounds <= 12 and rounds % 2 == 0:
                break
    
        except ValueError:
            print("Round must be an even number from 2 to 12 includes")
    
    
    # should there be duplicates
    try:
        duplicates_allowed = int(input("Duplicates allowed? (1/0) "))
    except ValueError:
        duplicates_allowed = 0
    
    
    # The number of codes we will be dealing with will four
    NUMBER_CODE = 4
    
    
    # The code maker
    code_maker = []
    counter = 0
    
    while counter < NUMBER_CODE:
        code = random.randint(0, 9)
    
        if duplicates_allowed:
            code_maker.append(code)
            counter += 1
    
        else:
            if not code in code_maker:
                code_maker.append(code)
                counter += 1
    
    
    # hint
    hints = ['h', 'i', 'n', 't']
    
    
    # code breaker guesses the code by the code maker
    while rounds > 0:
    
        # enter guess with spaces
        code_breaker = list(map(int, input("Enter codes space separated: ").split()))
    
        # compare the code_breaker to the code maker
        for i in range(NUMBER_CODE):
            if code_breaker[i] > code_maker[i]:
                hints[i] = 1
            elif code_breaker[i] == code_maker[i]:
                hints[i] = 0
            else:
                hints[i] = -1
    
        # because of the values that we used to hint the user
        # we have to find some dicey way to break the program
        # when the user guesses the code (all hints go to 0)
        if hints.count(0) == 4:
            break
    
        print(hints)
    
        rounds -= 1
    
    
    # declaring the result of the game
    if rounds > 0:
        print("You won the rounds")
    else:
        print("You lost bitterly to a computer")
    
    print(code_maker)
    
    
    


    조금 자랑하자



    가능한 경우 함수와 상수를 만들 것입니다. 한 번 이런 식으로 한 것을 기억하고 나중에 내가 어디에 있는지 찾을 수 있었기 때문에 이전 코드로 돌아갔습니다. 내 코드에서 길을 잃었습니다. 일어난다. 최고가 아닐 때도 있고 최고일 때도 있습니다. 다른 가능성을 보여드리고 싶습니다.

    # app2.py
    
    # Import the _random_ module
    import random
    import os
    from time import sleep
    
    
    # string constants
    ROUNDS_PROMPT = "Enter number of rounds (Even in [2, 12]) 🤗️: "
    INVALID_ROUNDS_PROMPT = "Round must be an even number from 2 to 12 includes 😩️"
    DUPLICATE_PROMPT = "Duplicates allowed? (1/0) 🤤️: "
    CODE_BREAKER_PROMPT = "Enter codes separated by space: "
    WIN_PROMPT = "You won the rounds 👏️"
    LOSS_PROMPT = "You lost bitterly to a computer 😏️"
    
    # int constants
    ZERO, ONE = 0, 1
    NUMBER_CODE = 4
    TERMINATING_VALUE = 0
    MORE, EQUAL, LESS = 1, 0, -1
    MIN_ROUNDS, MAX_ROUNDS = 2, 12
    RAND_INT_MIN, RAND_INT_MAX = 0, 9
    WAITING_TIME = 3
    
    # The code maker
    code_maker = []
    
    # hint
    hints = ['h', 'i', 'n', 't']
    
    def clear_screen() :
        os.system('cls' if os.name == 'nt' else 'clear')
    
    # validates the round input
    def isvalid_round(rounds):
        return MIN_ROUNDS <= rounds <= MAX_ROUNDS and rounds % 2 == ZERO
    
    
    # declaring the result of the game
    def declare_result(rounds):
        if rounds > TERMINATING_VALUE:
            print(WIN_PROMPT)
        else:
            print(LOSS_PROMPT)
    
    
    # generate code maker
    def generate_code_maker(duplicates_allowed):
        counter = 0
    
        while counter < NUMBER_CODE:
            code = random.randint(RAND_INT_MIN, RAND_INT_MAX)
    
            if duplicates_allowed:
                code_maker.append(code)
                counter += ONE
    
            else:
                if not code in code_maker:
                    code_maker.append(code)
                    counter += ONE
    
    
    # compare the code_breaker to the code maker
    def compare_code():
        # enter guess with spaces
        code_breaker = list(map(int, input(CODE_BREAKER_PROMPT).split()))
    
        for pos in range(NUMBER_CODE):
            if code_breaker[pos] > code_maker[pos]:
                hints[pos] = MORE
            elif code_breaker[pos] == code_maker[pos]:
                hints[pos] = EQUAL
            else:
                hints[pos] = LESS
    
    
    # entry point
    def App():
        # The number of times to play must be even between 2 to 12 rounds
        while True:
            try:
                rounds = int(input(ROUNDS_PROMPT))
    
                if isvalid_round(rounds):
                    break
    
            except ValueError:
                print(INVALID_ROUNDS_PROMPT)
    
    
        # should there be duplicates
        try:
            duplicates_allowed = int(input(DUPLICATE_PROMPT))
        except ValueError:
            duplicates_allowed = ZERO
    
    
    
        generate_code_maker(duplicates_allowed)
    
    
        # code breaker guesses the code by the code maker
        while rounds > TERMINATING_VALUE:
            compare_code()
    
            # because of the values that we used to hint the user
            # we have to find some dicey way to break the program
            # when the user guesses the code (all hints go to 0)
            if hints.count(EQUAL) == NUMBER_CODE:
                break
    
            print(hints)
    
            rounds -= ONE
    
    
        declare_result(rounds)
    
        print(code_maker)
    
    
    # infinitely keep playing
    while True:
        App()
    
        sleep(WAITING_TIME)
        clear_screen()
    
        # reset the game for replay
        code_maker = []
        hints = ['h', 'i', 'n', 't']
    
    


    출처


  • wiki-play-mastermind
  • wikipedia-mastermind
  • 좋은 웹페이지 즐겨찾기