1. Deberá encontrar el mejor movimiento a realizar, esto es, el que tiene más
probabilidades de llevarnos a ganar la partida.
2. Deberá ser un algoritmo genérico, válido para cualquier tipo de juego en el que
compitan dos jugadores y no haya elementos de azar (por ejemplo dados)
1
Solución
2
//”jugador” valdrá 1 para mi jugador y -1 para el contrario
Algoritmo eligeMovimiento (tablero, jugador) Æ entero, movimiento
if (esFinalDePartida(tablero))
return evaluaFinal(tablero)
else
movimientosPosibles [] = dameMovimientosPosibles(tablero)
evaluacionesMovimientos []
i. Habría que escribir en pseudocódigo cada uno de los subalgoritmos utilizados, que
dependen del juego concreto que estemos jugando.
3
Ejemplo: Conecta4
• Final de partida:
o Cuando uno de los dos jugadores hace 4 en raya.
o Cuando ya no hay más movimientos posibles.
• Evaluación de un final de partida:
o Valor positivo si gano…
o …0 si empato…
o …valor negativo si pierdo.
o Puedo dar un valor mayor absoluto cuanto menos profundo en el árbol esté
este final (quiere decir que gano o me ganan en menos movimientos)
• Movimientos posibles:
o Buscar los huecos libres en la fila superior del tablero.
• Función de evaluación:
o Restar al número de oportunidades (posiciones de 2 y 3 en raya mías
susceptibles de ser culminadas)…
o …el número de amenazas (posiciones de 2 y 3 en raya de mi rival
susceptibles de ser culminadas)
¡¡Esto son sólo algunas ideas, se puede hilar tan fino como se quiera!!
(eso distingue a los mejores jugadores de los no tan buenos ;-)