Java - método evalua tablero no funciona

 
Vista:

método evalua tablero no funciona

Publicado por Miguel Angel De La Calle (5 intervenciones) el 31/05/2009 12:40:59
package Conecta4;

import java.lang.*;
import java.io.*;
import java.util.Set;
import java.util.HashSet;

/**
* La finalidad de esta clase es detectar quien es el ganador de una partida y mediante un heuristico
* evaluar una jugada sobre el tablero desde el punto de vista del ordenador.
* @author Nieves de la Calle Ferrere
* @version 1-jun-2009
* */

public class EvaluaTablero{
private static int VALOR_HUMANO = -1;
private static int VALOR_ORDENADOR = 1;

private static int PUNTACION_MAX = 10000;
private static int PUNTACION_3_IGUALES = 100;
private static int PUNTACION_2_IGUALES = 5;
private static int PUNTACION_1_IGUALES = 1;

// Campo para poder desarrollar las trazas en la clase Tablero.
private static final Logger LOGGER = Logger.getLogger("Conecta4.Tablero");

/**
* Este metodo retornará null, si no ha encontrado ganador o un objeto Ficha indicando el jugador que ha ganado.
* */
private static boolean Analiza_Horizontal(Ficha ficha, Tablero tablero) {
boolean bHayGanador = false;
Ficha fichaA = null;
Ficha fichaB = null;
Ficha fichaC = null;
Ficha fichaD = null;
for (int fila=0; fila < Tablero.FILAS-1; fila++){
for (int columna=0; columna < Tablero.COLUMNAS-3; columna++){
fichaA = tablero.getFicha(new Posicion(fila,columna));
fichaB = tablero.getFicha(new Posicion(fila,columna+1));
fichaC = tablero.getFicha(new Posicion(fila,columna+2));
fichaD = tablero.getFicha(new Posicion(fila,columna+3));
if (fichaA == fichaB && fichaB == fichaC && fichaC == fichaD && fichaD == ficha){
bHayGanador = true;
}
if (bHayGanador) break;
}
if (bHayGanador) break;
}
return bHayGanador;
}

private static boolean Analiza_Vertical(Ficha ficha, Tablero tablero) {
boolean bHayGanador = false;
//Hacer
return bHayGanador;
}

private static boolean Analiza_DiagonalDer(Ficha ficha, Tablero tablero) {
boolean bHayGanador = false;
//Hacer
return bHayGanador;
}

private static boolean Analiza_DiagonalIzq(Ficha ficha, Tablero tablero) {
boolean bHayGanador = false;
//Hacer
return bHayGanador;
}

/**
* Este metodo te indica si ha gando el ordendor o el humano al haber formado en el tablero cuatro en raya.
* */
public static boolean haGanado(Ficha ficha, Tablero tablero){
boolean bGanado = false;
bGanado = Analiza_Horizontal(ficha,tablero);
if (!bGanado) bGanado = Analiza_Vertical(ficha,tablero);
if (!bGanado) bGanado = Analiza_DiagonalDer(ficha,tablero);
if (!bGanado) bGanado = Analiza_DiagonalIzq(ficha,tablero);
return bGanado;
}


/**
* Este metodo valora la posicion del ordenador frente a la del jugador humano.
**/

private static int Puntua_Horizontal(int fila, int columna, Tablero tablero, Ficha ficha) {
int valor = 0;

Ficha fichaA = tablero.getFicha(new Posicion(fila,columna));
if (columna == Tablero.COLUMNAS-1 && fichaA == ficha) return PUNTACION_1_IGUALES;
if (columna <= Tablero.COLUMNAS-2){
Ficha fichaB = tablero.getFicha(new Posicion(fila,columna+1));
if (fichaA == fichaB && fichaB == ficha){
valor = PUNTACION_2_IGUALES;
if (columna <= Tablero.COLUMNAS-3){
Ficha fichaC = tablero.getFicha(new Posicion(fila,columna+2));
if (fichaB == fichaC && fichaC == ficha){
valor = PUNTACION_3_IGUALES;
if (columna <= Tablero.COLUMNAS-4){
Ficha fichaD = tablero.getFicha(new Posicion(fila,columna+3));
if (fichaC == fichaD && fichaD == ficha){
valor = PUNTACION_MAX;
}
}
}
}
}
}
return valor;
}

private static int Puntua_Vertical(int fila, int columna, Tablero tablero, Ficha ficha) {
int valor = 0;

Ficha fichaA = tablero.getFicha(new Posicion(fila,columna));
if (columna == Tablero.FILAS-1 && fichaA == ficha) return PUNTACION_1_IGUALES;
if (columna <= Tablero.FILAS-2){
Ficha fichaB = tablero.getFicha(new Posicion(fila+1,columna));
if (fichaA == fichaB && fichaB == ficha){
valor = PUNTACION_2_IGUALES;
if (columna <= Tablero.FILAS-3){
Ficha fichaC = tablero.getFicha(new Posicion(fila+2,columna));
if (fichaB == fichaC && fichaC == ficha){
valor = PUNTACION_3_IGUALES;
if (columna <= Tablero.FILAS-4){
Ficha fichaD = tablero.getFicha(new Posicion(fila+3,columna));
if (fichaC == fichaD && fichaD == ficha){
valor = PUNTACION_MAX;
}
}
}
}
}
}
return valor;
}

public static int valorarTablero(Tablero tablero){
int valorTablero = 0;

int valorHorizontal_H = 0;
int valorVertical_H = 0;

for (int fila=0; fila < Tablero.FILAS-1; fila++){
for (int columna=0; columna < Tablero.COLUMNAS-1; columna++){
valorHorizontal_H += Puntua_Horizontal(fila,columna,tablero, Ficha.HUMANO);
if (valorHorizontal_H == PUNTACION_2_IGUALES) columna = columna + 2;
if (valorHorizontal_H == PUNTACION_3_IGUALES) columna = columna + 3;
if (valorHorizontal_H == PUNTACION_MAX) columna = columna + 4;
}
}
valorTablero += valorHorizontal_H;

for (int columna=0; columna < Tablero.COLUMNAS-1; columna++){
for (int fila=0; fila < Tablero.FILAS-1; fila++){
// Hacer
Puntua_Vertical(fila,columna,tablero,Ficha.HUMANO);
valorVertical_H += Puntua_Vertical(fila, columna, tablero, Ficha.HUMANO);
if (valorHorizontal_H == PUNTACION_2_IGUALES) fila = fila + 2;
if (valorHorizontal_H == PUNTACION_3_IGUALES) fila = fila + 3;
if (valorHorizontal_H == PUNTACION_MAX) fila = fila + 4;
}
}
valorTablero += valorVertical_H;

//TODO DiagonalDer
//valorTablero += valorVertical_H;

// TODO DiagonalIzq
//valorTablero += valorVertical_H;


return valorTablero;
}
}


Mi duda es que en el fragmento public static boolean ha ganado debería decirme quien ha ganado, y que no lo hace, sigue poniendo fichas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder