hehco en clase

mail@pastecode.io avatar
unknown
python
2 years ago
4.3 kB
0
Indexable
Never
# Rodrigo y weiyi xu wang
# ejercicio clase pue
import random

 
def display_board(board):
    #funcion para pintar el tablero
    # para acceder a la primera casila (fila 0 columna 0)
    # board[0][0]
    print("\n")
    for c in range(0,3):
        print(f"{board[c][0]} | {board[c][1]} | {board[c][2]}                                    {c*3+1} | {c*3+2} | {c*3+3} ")
        if(c != 2):
             print("-","*","-","*","-","                                   -","*","-","*","-")

    print("\n")
    print("--------------------------------------------------------------------------")
 
 
def enter_move(board):
 
    #funcion para que el usario introduzca su movimiento
    move_done = False
    while(not move_done):
        introduccion = input("Introduzca un numero del 1 - 9 para la posicion del movimiemto.")
        if( introduccion.isnumeric()):
            movimiento = int(introduccion)
            # check es un numero entre 1-9
            posibles_movimientos = list_free_fields(board)
            if(0<movimiento<10 and (movimiento in posibles_movimientos)):
                do_movement(board, movimiento,"Jugador", "X")
                move_done = True
            else:
                print("Has introducido un numero invalido, recuerde 1-9")
    
def list_free_fields (board):
    lista_vacia=[]
    for posicion in range (1,10):
        fila = (posicion - 1) // 3
        columna = (posicion -1 ) % 3
        if(board[fila][columna]==" "):
            lista_vacia.append(posicion)
    return lista_vacia
 
 
def victory_for(board, sign):
   #funcion para saber quien gana
   for i in range (0,3):
        if(board[i][0]==board[i][1]==board[i][2]==sign or board[0][i]==board[1][i]==board[2][i]==sign):
            return True
   if(board[0][0]==board[1][1]==board[2][2]==sign or board[0][2]==board[1][1]==board[2][0]==sign):
        return True
   else:
        return False
 
 
def do_movement(board, movement, player, sign):

    fila = (movement - 1) // 3
    columna = (movement -1 ) % 3
    board[fila][columna] = sign
    if(player!="simulacion"):
        print(f"Movimiento de la {player} {movement}")


def draw_move(board):
    casillas_vacias = list_free_fields(board)
    movimiento = inteligencia(board)
    do_movement(board, movimiento,"Computadora", "O")
    display_board(board)


def copy_board(board):
    simulation = list()
    for fila in board:
        simulation.append(fila[:])
    return simulation

def inteligencia(board):

    casillas_vacias = list_free_fields(board)
    for movimiento in casillas_vacias:
        simulacion = copy_board(board)
        # Ganar =  ganar sobre iteracions listas        
        do_movement(simulacion, movimiento,"simulacion", "X")
        if (victory_for(simulacion, "X")==True):
           return movimiento

        simulacion = copy_board(board) # [row[:] for row in board ]
        do_movement(simulacion, movimiento,"simulacion", "O")
        # Taponar = ganar con signo opuesto
        if (victory_for(board, "O")==True):
           return movimiento

        # Simulacionas de jugadas a 2 lineas con blanco (a futuro)

        # checkear que el centro  esta libre
        if( 5 in casillas_vacias):
            return 5
        # si no hay taponar o ganar random

    return casillas_vacias[random.randint(0, len(casillas_vacias)-1)]
 
  
def jugar():
    tablero = [[" " for c in range(3)] for d in range(3)]
    print("Vamos a jugar al 3 en raya!!!")
    display_board(tablero)
    no_box = False
    while(not no_box):
        enter_move(tablero)
        # check if you win
        if (victory_for(tablero, "X")==True):
            print (" \n *** Has ganado *** \n")
            break
        if (len(list_free_fields(tablero)) == 0):
            print (" \n *** Empate *** \n")
            break

        draw_move(tablero)
        # check if computer win
        if (victory_for(tablero, "O")==True):
            print ("Has perdido")
            break

        #check if there is more empty boxes, not useful if machine not start
        if(len(list_free_fields(tablero)) == 0):
            print ("Empate")
            no_box = True
    
    display_board(tablero)
 
   
jugar()