Spaces:
Runtime error
Runtime error
import random | |
import numpy as np | |
class tic_tac_toe_model(): | |
def __init__(self, n): | |
self.n = n | |
self.matriz = np.full((n,n),0,dtype=int) | |
def reset_matrix(self): | |
self.matriz = np.full((self.n,self.n),0,dtype=int) | |
def print_game(self): | |
matriz = self.matriz | |
substituicoes = {1: "X", 2: "O", 0:' '} | |
cabecalho = [str(i) for i in range(0,self.n)] | |
print(' ', ' | '.join(cabecalho)) | |
for i,linha in enumerate(matriz): | |
linha_formatada = [str(substituicoes.get(valor, valor)) for valor in linha] | |
print(i, " | ".join(linha_formatada)) | |
print("-" * 12) | |
def number_ij(self, number): | |
i,j = np.unravel_index(number, self.matriz.shape) | |
return i,j | |
def get_avaible_moves(self): | |
avaible_moves = np.ravel_multi_index(np.where(self.matriz == 0), self.matriz.shape) | |
return list(avaible_moves) | |
def get_random_move(self, piece): | |
possible_move_i, possible_move_j = np.where(self.matriz == 0) | |
if possible_move_j.shape[0] > 0: # Verifica se há movimentos possíveis | |
index = random.randint(0, possible_move_j.shape[0] - 1) # Correção aqui | |
self.move(possible_move_i[index], possible_move_j[index], piece) | |
def move(self,index_i,index_j,piece): | |
if self.matriz[index_i][index_j] == 0: | |
self.matriz[index_i][index_j] = piece | |
def reward_piece(self,piece): | |
w = self.check_win() | |
if w != 4 : | |
if w!=3: | |
if w == piece: | |
return 1 | |
else: | |
return -1 | |
return 0 | |
def check_win(self): | |
state = False | |
win_piece = -1 | |
value_counts_diagonal = np.unique(self.matriz.diagonal()) | |
value_counts_diagonal2 = np.unique(np.fliplr(self.matriz).diagonal()) | |
if value_counts_diagonal.shape[0] == 1 and value_counts_diagonal[0] !=0: | |
state=True | |
win_piece = value_counts_diagonal[0] | |
return win_piece | |
if value_counts_diagonal2.shape[0] == 1 and value_counts_diagonal2[0] !=0: | |
state=True | |
win_piece = value_counts_diagonal2[0] | |
return win_piece | |
for i in range(0,self.n): | |
value_counts_linha = np.unique(self.matriz[i,:]) | |
value_counts_coluna = np.unique(self.matriz[:,i]) | |
if value_counts_linha.shape[0] == 1 and value_counts_linha[0] != 0 : | |
state=True | |
win_piece = value_counts_linha[0] | |
break | |
if value_counts_coluna.shape[0] == 1 and value_counts_coluna[0] != 0: | |
state=True | |
win_piece = value_counts_coluna[0] | |
break | |
velha = np.where(self.matriz == 0) | |
if state: | |
return win_piece | |
if velha[0].shape[0] == 0: | |
return 3 | |
else: | |
return 4 |