Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/02/2020, 15:53
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: TATETI en Python

Hola a todos, resulta que encontré un código de TATETI sencillo para jugar con la computadora:

Código Python:
Ver original
  1. from Mensajes import Mensajes
  2. import random
  3.  
  4.  
  5. class TaTeTi:
  6.     def __init__(self):
  7.         self.__tamanio = 9
  8.         self.__figJugador = "X"
  9.         self.__figCompu = "O"
  10.         self.__tablero = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
  11.  
  12.     def play(self):
  13.         # Human starts first
  14.         turno = self.__figJugador
  15.         ganador = 0
  16.         # Set to 1, 2, or 3 when game is over
  17.         # Keep looping until someone wins or a tie
  18.         while ganador == 0:
  19.             if turno == self.__figJugador:
  20.                 self.__mueveJugador()
  21.                 turno = self.__figCompu
  22.             else:
  23.                 self.__mueveComputadora()
  24.                 turno = self.__figJugador
  25.             ganador = self.__verificarGanador()
  26.         Mensajes.messageInfo(self.__mostrarTablero() + "\n")
  27.         # Report the winner
  28.         if ganador == 1:
  29.             Mensajes.messageInfo("El juego ha terminado en empate.")
  30.         elif ganador == 2:
  31.             Mensajes.messageInfo("Jugador, has ganado! :)")
  32.         elif ganador == 3:
  33.             Mensajes.messageInfo("La computadora ha ganado! :(")
  34.         else:
  35.             Mensajes.messageInfo("¡Aquí hay un problema de lógica!")
  36.  
  37.     def __mostrarTablero(self):
  38.         res = "\n"
  39.         res += self.__tablero[0] + " | " + self.__tablero[1] + " | " + self.__tablero[2]
  40.         res += "\n-----------\n"
  41.         res += self.__tablero[3] + " | " + self.__tablero[4] + " | " + self.__tablero[5]
  42.         res += "\n-----------\n"
  43.         res += self.__tablero[6] + " | " + self.__tablero[7] + " | " + self.__tablero[8]
  44.         res += "\n"
  45.         return res
  46.  
  47.     """
  48.        Check for a winner.  Return
  49.        0 if no winner or tie yet
  50.        1 if it's a tie
  51.        2 if X won
  52.        3 if O won
  53.    """
  54.  
  55.     def __verificarGanador(self):
  56.         # Check horizontal wins
  57.         for i in range(0, 7, 3):
  58.             if self.__tablero[i] == self.__figJugador and self.__tablero[i + 1] == self.__figJugador and self.__tablero[i + 2] == self.__figJugador:
  59.                 return 2
  60.             if self.__tablero[i] == self.__figCompu and self.__tablero[i + 1] == self.__figCompu and self.__tablero[i + 2] == self.__figCompu:
  61.                 return 3
  62.         # Check vertical wins
  63.         for i in range(0, 3):
  64.             if self.__tablero[i] == self.__figJugador and self.__tablero[i + 3] == self.__figJugador and self.__tablero[i + 6] == self.__figJugador:
  65.                 return 2
  66.             if self.__tablero[i] == self.__figCompu and self.__tablero[i + 3] == self.__figCompu and self.__tablero[i + 6] == self.__figCompu:
  67.                 return 3
  68.         # Check for diagonal wins
  69.         if (self.__tablero[0] == self.__figJugador and self.__tablero[4] == self.__figJugador and self.__tablero[8] == self.__figJugador) or (
  70.             self.__tablero[2] == self.__figJugador and self.__tablero[4] == self.__figJugador and self.__tablero[6] == self.__figJugador
  71.         ):
  72.             return 2
  73.         if (self.__tablero[0] == self.__figCompu and self.__tablero[4] == self.__figCompu and self.__tablero[8] == self.__figCompu) or (
  74.             self.__tablero[2] == self.__figCompu and self.__tablero[4] == self.__figCompu and self.__tablero[6] == self.__figCompu
  75.         ):
  76.             return 3
  77.         # Check for tie
  78.         for i in range(0, self.__tamanio):
  79.             # If we find a number, then no one has won yet
  80.             if self.__tablero[i] != self.__figJugador and self.__tablero[i] != self.__figCompu:
  81.                 return 0
  82.         # If we make it through the previous loop, all places are taken, so it's a tie
  83.         return 1
  84.  
  85.     def __mueveJugador(self):
  86.         mueve = -1
  87.         while mueve == -1:
  88.             try:
  89.                 mueve = Mensajes.requestInt(self.__mostrarTablero() + "\n\n Ingrese su movimiento")
  90.                 while (
  91.                     mueve < 1
  92.                     or mueve > self.__tamanio
  93.                     or self.__tablero[mueve - 1] == self.__figJugador
  94.                     or self.__tablero[mueve - 1] == self.__figCompu
  95.                 ):
  96.                     if mueve < 1 or mueve > self.__tamanio:
  97.                         Mensajes.messageInfo("Por favor, ingrese un movimiento entre 1 y " + str(tamanio) + ".")
  98.                     else:
  99.                         Mensajes.messageInfo("Ese espacio esta ocupado. Por favor escoge otro espacio.")
  100.                     mueve = Mensajes.requestInt(self.__mostrarTablero() + "\n\n Ingrese su movimiento: ")
  101.             except Exception as ex:
  102.                 Mensajes.messageInfo(ex)
  103.         self.__tablero[mueve - 1] = self.__figJugador
  104.  
  105.     def __mueveComputadora(self):
  106.         mueve = -1
  107.         # First see if there's a move O can make to win
  108.         for i in range(0, self.__tamanio):
  109.             if self.__tablero[i] != self.__figJugador and self.__tablero[i] != self.__figCompu:
  110.                 curr = self.__tablero[i]
  111.                 self.__tablero[i] = self.__figCompu
  112.                 if self.__verificarGanador() == 3:
  113.                     Mensajes.messageInfo("La computadora esta moviendo a: " + str(i + 1))
  114.                     return
  115.                 else:
  116.                     self.__tablero[i] = curr
  117.         # See if there's a move O can make to block X from winning
  118.         for i in range(0, self.__tamanio):
  119.             if self.__tablero[i] != self.__figJugador and self.__tablero[i] != self.__figCompu:
  120.                 curr = self.__tablero[i]
  121.                 self.__tablero[i] == self.__figJugador
  122.                 if self.__verificarGanador() == 2:
  123.                     self.__tablero[i] = self.__figCompu
  124.                     Mensajes.messageInfo("La computadora esta moviendo a: " + str(i + 1))
  125.                     return
  126.                 else:
  127.                     self.__tablero[i] = curr
  128.         # Generate random move
  129.         while True:
  130.             mueve = random.randrange(self.__tamanio)
  131.             if self.__tablero[mueve] != self.__figJugador and self.__tablero[mueve] != self.__figCompu:
  132.                 break
  133.         Mensajes.messageInfo("La computadora se esta movimiento a: " + str(mueve + 1))
  134.         self.__tablero[mueve] = self.__figCompu

Pero no funciona bien, es decir siempre termino ganando en el juego, y no me doy cuenta de que cambiarle para que funcione bien el método mueveComputadora.

Espero sus respuestas y saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias