Spaces:
Runtime error
Runtime error
File size: 3,080 Bytes
b3accf9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
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 |