public class logica
{
public int tableros[][]= new int[3][3];
public int nganador=-1;
int ncontar=0;
public logica()
{
empezarpartida();
ncontar=0;
}
public void empezarpartida()
{
for(int i =0 ;i<tableros.length;i++)
{
for(int j =0 ;j<tableros[i].length;j++)
{
tableros[i][j]=-1;
}
}
nganador=-1;
}
public void pulsaboton(int i ,int j)
{
if(i>=0 && j>=0 && j<=3 && i<=3 && tableros[i][j]==-1)
{
if(nganador==-1)
{
tableros[i][j]=0;
nganador=ganarpartida();
}
}
}
public int ganarpartida()
{
if(tableros[0][0]!=-1 && tableros[0][0]==tableros[1][1] && tableros[0][0]==tableros[2][2])
{
return tableros[0][0];
}
if(tableros[0][2]!=-1 && tableros[0][2]==tableros[1][1] && tableros[0][2]==tableros[2][0])
{
return tableros[0][2];
}
for(int i =0 ;i<tableros.length;i++)
{
if(tableros[i][0]!=-1 && tableros[i][0]==tableros[i][1] && tableros[i][0]==tableros[i][2])
{
return tableros[i][0];
}
if(tableros[0][i]!=-1 && tableros[0][i]==tableros[1][i] && tableros[0][i]==tableros[2][i])
{
return tableros[0][i];
}
}
return -1;
}
//Algoritmo Minimax
public boolean tablerocompleto()
{
for(int i =0 ;i<tableros.length;i++)
{
for(int j =0 ;j<tableros[i].length;j++)
{
if(this.tableros[i][j]==-1)
{
return false;
}
}
}
return true;
}
public boolean finpartida()
{
return tablerocompleto() || ganarpartida()!=-1;
}
public void ponerfichaordenador(){
if(!finpartida())
{
int f=0,c=0;
int aux;
for(int i =0 ;i<tableros.length;i++){
for(int j =0 ;j<tableros[i].length;j++){
if(tableros[i][j]==-1)
{
tableros[i][j]=1;
aux=min();
if(aux>v){
v=aux;
f=i;
c=j;
}
tableros[i][j]=-1;
}
}
}
tableros[f][c]=1;
}
nganador=ganarpartida();
}
private int max()
{
if(finpartida())
{
if(ganarpartida()!=-1) return -1;
else return 0;
}
int aux;
for(int i =0 ;i<tableros.length;i++){
for(int j =0 ;j<tableros[i].length;j++){
if(this.tableros[i][j]==-1){
tableros[i][j]=1;
aux=min();
if(aux>v) v=aux;
tableros[i][j]=-1;
}
}
}
return v;
}
private int min()
{
if(finpartida())
{
if(ganarpartida()!=-1) return 1;
else return 0;
}
int aux;
for(int i =0 ;i<tableros.length;i++){
for(int j =0 ;j<tableros[i].length;j++){
if(this.tableros[i][j]==-1){
tableros[i][j]=0;
aux=max();
if(aux<v) v=aux;
tableros[i][j]=-1;
}
}
}
return v;
}
}