• Domingo 22 de Diciembre de 2024, 07:21

Autor Tema:  Implementacion de algoritmo minimax en Othello (Reversi) 2  (Leído 2584 veces)

chin13

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Implementacion de algoritmo minimax en Othello (Reversi) 2
« en: Miércoles 15 de Junio de 2016, 18:47 »
0
Buenas tardes,
Estoy programando el juego Othello en c++, hasta el momento todo me funciona perfectamente, todas las funciones creadas y clases estan testeadas y funcionan a la perfeccion.

El problema viene cuando me he puesto a implementar el algoritmo MINIMAX que os paso a continuacion:

Código: C++
  1. int minimax(taulell &t, int color, nat prof, nat metode, coord &cmillor)
  2. {
  3.   int eval, milloreval_negre=-1000, milloreval_blanc=1000, milloreval;
  4.   coord c,caux;
  5.   queue<coord> cua = t.coord_pot_jugar(color);
  6.     if (prof >= 1){
  7.       for (int i=0;i<cua.size();++i){
  8.         c = cua.front();
  9.         cua.pop();
  10.         taulell t2(t);
  11.         t2.posa_fitxa(c,color);
  12.         eval = t2.avalua_posicio();
  13.         if (eval > milloreval) {
  14.           milloreval = eval;
  15.           caux = c;
  16.         }
  17.       }
  18.     }
  19.     else {
  20.       for (int i=0; i<cua.size();i++){
  21.         c = cua.front();
  22.         cua.pop();
  23.         taulell t2(t);
  24.         t2.posa_fitxa(c,color);
  25.         color = -color;
  26.         if (t2.pot_jugar(color)) eval = minimax(t2,color,prof-1,metode,c);
  27.         else eval = minimax(t2,-color,prof-1,metode,c);
  28.         if (eval > milloreval){
  29.           milloreval = eval;
  30.           caux = c;
  31.         }
  32.       }
  33.     }
  34.   //}
  35.   cmillor = caux;
  36.   return milloreval;
  37. }
  38.  

Me funciona, tanto como para profundidad 1 i 2, el problema viene que llega un momento en que los movimientos que va realizando las fichas negras son correctos hasta cierta jugada en la que coloca la ficha en una posición en la que no come nada (algo que no es permitido en el juego). Sin embargo, la función que corrobora si una posición es válida para que juegue un determinado color esta comprobado que anda correctamente, lo que concluye a que en realidad ese movimiento es uno que debió realizar el jugador blanco, o el mismo negro en una jugada más a futuro.

Si alguien echandole un vistazo al codigo sabe de que se puede tratar, le estaría muy agradecido.

Gracias de antemano !