Juego Mastermind usando Python

Dada la familiaridad de la generación actual con los juegos y su tecnología altamente demandada, muchos aspiran a perseguir la idea de desarrollarla y hacerla avanzar aún más. Eventualmente, todos comienzan desde el principio. Mastermind es un viejo juego de descifrado de códigos jugado por dos jugadores. El juego se remonta al siglo XIX y se puede jugar con papel y lápiz.

Requisito previo:
números aleatorios en Python

Reglas del juego

Dos jugadores juegan el juego uno contra el otro; supongamos que el jugador 1 y el jugador 2.

  • El jugador 1 juega primero estableciendo un número de varios dígitos.
  • El jugador 2 ahora hace su primer intento de adivinar el número.
  • Si el jugador 2 tiene éxito en su primer intento (a pesar de que las probabilidades son muy poco probables), ¡gana el juego y es coronado como Mastermind! Si no, entonces el jugador 1 da pistas al revelar qué dígitos o números acertó el jugador 2.
  • El juego continúa hasta que el jugador 2 finalmente puede adivinar el número por completo.
  • Ahora, el jugador 2 puede establecer el número y el jugador 1 juega el papel de adivinar el número.
  • Si el jugador 1 puede adivinar el número en un número menor de intentos que el jugador 2, entonces el jugador 1 gana el juego y es coronado como Mastermind.
  • Si no, entonces el jugador 2 gana el juego.
  • El juego real, sin embargo, ha demostrado ser estético ya que los números están representados por botones codificados por colores.

Por ejemplo:
Entrada:

Player 1, set the number: 5672
Player 2, guess the number: 1472

Producción:

Not quite the number. You did get 2 digits correct.
X X 7 2

Enter your next choice of numbers:

No usaremos ninguna de las Pygamebibliotecas para ayudarnos con gráficos adicionales y, por lo tanto, solo trataremos con el marco y el concepto. Además, vamos a jugar contra la computadora, es decir, la computadora generará el número que se va a adivinar.

A continuación se muestra la implementación de la idea anterior.

import random
  
  
# the .randrange() function generates a
# random number within the specified range.
num = random.randrange(1000, 10000)  
  
n = int(input("Guess the 4 digit number:"))
  
# condition to test equality of the
# guess made. Program terminates if true.
if (n == num):  
    print("Great! You guessed the number in just 1 try! You're a Mastermind!")
else:
    # ctr variable initialized. It will keep count of 
    # the number of tries the Player takes to guess the number.
    ctr = 0  
  
    # while loop repeats as long as the 
    # Player fails to guess the number correctly.
    while (n != num):  
        # variable increments every time the loop
        # is executed, giving an idea of how many
        # guesses were made.
        ctr += 1  
  
        count = 0
  
        # explicit type conversion of an integer to
        # a string in order to ease extraction of digits
        n = str(n)  
  
        # explicit type conversion of a string to an integer
        num = str(num)  
  
        # correct[] list stores digits which are correct
        correct = ['X']*4  
  
        # for loop runs 4 times since the number has 4 digits.
        for i in range(0, 4): 
  
             # checking for equality of digits
            if (n[i] == num[i]):  
                # number of digits guessed correctly increments
                count += 1  
                # hence, the digit is stored in correct[].
                correct[i] = n[i]  
            else:
                continue
  
        # when not all the digits are guessed correctly.
        if (count < 4) and (count != 0):  
            print("Not quite the number. But you did get ", count, " digit(s) correct!")
            print("Also these numbers in your input were correct.")
            for k in correct:
                print(k, end=' ')
            print('\n')
            print('\n')
            n = int(input("Enter your next choice of numbers: "))
  
        # when none of the digits are guessed correctly.
        elif (count == 0):  
            print("None of the numbers in your input match.")
            n = int(input("Enter your next choice of numbers: "))
  
    # condition for equality.
    if n == num:  
        print("You've become a Mastermind!")
        print("It took you only", ctr, "tries.")

Supongamos que el número establecido por computadora es 1564

Producción:

Guess the 4 digit number: 1564

Great! You guessed the number in just 1 try! You're a Mastermind!

Si el número no se adivina en una oportunidad.

Producción:

Guess the 4 digit number: 2164    

Not quite the number. But you did get 2 digit(s) correct!
Also these numbers in your input were correct.
X X 6 4

Enter your next choice of numbers: 3564
Not quite the number. But you did get 2 digit(s) correct!
Also these numbers in your input were correct.
X 5 6 4

Enter your next choice of numbers: 1564
You've become a Mastermind.
It took you only 3 tries.

Puede hacer que el juego sea más difícil aumentando el número de dígitos de la entrada o no revelando qué números de la entrada se colocaron correctamente.
Esto se ha explicado en el siguiente código.

import random
  
  
#the .randrange() function generates
# a random number within the specified range.
num = random.randrange(1000,10000) 
                      
n = int(input("Guess the 4 digit number:"))
  
# condition to test equality of the 
# guess made. Program terminates if true.
if(n == num):             
     print("Great! You guessed the number in just 1 try! You're a Mastermind!")
else:
     # ctr variable initialized. It will keep count of 
     # the number of tries the Player takes to guess the number.
     ctr = 0    
  
     # while loop repeats as long as the Player
     # fails to guess the number correctly.
     while(n!=num):
          # variable increments every time the loop 
          # is executed, giving an idea of how many 
          # guesses were made.
          ctr += 1             
                                  
          count = 0
  
          # explicit type conversion of an integer to 
          # a string in order to ease extraction of digits
          n = str(n) 
              
          # explicit type conversion of a string to an integer                                 
          num = str(num)
  
          # correct[] list stores digits which are correct 
          correct=[]        
  
          # for loop runs 4 times since the number has 4 digits.     
          for i in range(0,4): 
              # checking for equality of digits
              if(n[i] == num[i]): 
                  # number of digits guessed correctly increments
                  count += 1    
                  # hence, the digit is stored in correct[].
                  correct.append(n[i])     
              else:
                  continue
  
          # when not all the digits are guessed correctly.
          if (count < 4) and (count != 0):     
              print("Not quite the number. But you did get ",count," digit(s) correct!")
              print("Also these numbers in your input were correct.")
                
              for k in correct:
                  print(k, end=' ')
  
              print('\n')
              print('\n')
              n = int(input("Enter your next choice of numbers: "))
  
          # when none of the digits are guessed correctly.
          elif(count == 0):         
              print("None of the numbers in your input match.")
              n=int(input("Enter your next choice of numbers: ")) 
  
     if n==num:                
         print("You've become a Mastermind!")
         print("It took you only",ctr,"tries.")
             

Supongamos que el número establecido por computadora es 54876.

Producción:

Guess the 5 digit number: 38476

Not quite the number. But you did get 2 digit(s) correct! 
Enter your next choice of numbers: 41876

Not quite the number. But you did get 4 digit(s) correct!
Enter the next choice of numbers: 54876

Great you've become a Mastermind!
It took you only 3 tries!

El alcance completo de la modificación de este código es enorme. La idea aquí es tener una idea de lo que es el concepto. Hay muchos juegos como este que se basan en un código básico similar.

Al utilizar este código, desarrollándolo aún más mientras se incorporan bibliotecas de Pygame, lo haría más como el verdadero negocio, ¡sin mencionar mucho más envolvente!

Publicación traducida automáticamente

Artículo escrito por siddhant_baroth y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *