hehco en clase
unknown
python
3 years ago
4.3 kB
6
Indexable
# 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()Editor is loading...