Menu

domingo, 14 de abril de 2013

Implementación del Triqui con Algoritmo de Mini Max



Presentado a Julio Cesar Sierra

Por:

- María José Velandia: 52960713
- Jorge Barrera: 1018413066

Universidad Central 2013

Runnable Jar

Se colocan secciones de código críticas donde se muestra el funcionamiento del algoritmo de MiniMax.


 /* Metodo recursivo, que genera los nodos con los movimientos. */
 public void movComputadora(NodoG raiz) {

  /* Numero de movimientos disponibles y sus indices en el tablero. */
  int movimientos = movDisponibles(raiz.tablero);
  int indices[] = posVacias(raiz.tablero);
  int Max, Min;

  /* Inicializamos el nodo. */
  raiz.nodos = new NodoG[movimientos];

  /* Verificamos si hay un ganador. */
  int ganador = terminado(raiz.tablero);
  if (ganador == 1) {
   ganador = -1;
  } else if (ganador == 2) {
   ganador = 1;
  }

  if (ganador != 0 || movimientos == 0) {
   raiz.ganador = ganador;
  } else {

   /* Creamos los datos de cada hijo. */
   for (int i = 0; i < movimientos; i++) {

    /* Inicializamos los nodos hijos del arbol. */
    raiz.nodos[i] = new NodoG();

    /* Les pasamos su tablero. */
    for (int j = 0; j < 9; j++) {
     raiz.nodos[i].tablero[j] = raiz.tablero[j];
    }

    /* Creamos los diferentes movimientos posibles. */
    if (raiz.miTurno) {
     raiz.nodos[i].tablero[indices[i]] = 1;
    } else {
     raiz.nodos[i].tablero[indices[i]] = 2;
    }

    /* Cambiamos el turno de los hijos */
    raiz.nodos[i].miTurno = !raiz.miTurno;

    /* Guardamos el indice de su movimiento. */
    raiz.nodos[i].indice = indices[i];

    movComputadora(raiz.nodos[i]);

   }

   /* Minimax */
   if (!raiz.miTurno) {
    raiz.ganador = Max(raiz);
   } else {
    raiz.ganador = Min(raiz);
   }
  }
 }

No hay comentarios.: