No lo veo dificil, hice uno en javascript. Mi opción sería esta:
Varios casos posibles que había que detectar al momento del turno de la CPU, y luego manejar bien para el correcto funcionamiento de la IA:
- No hay posible victoria en esta tirada -> No hay posible victoria de mi oponente -> tirada aleatoria
- No hay posible victoria en esta tirada -> Sí hay posible victoria de mi oponente -> impedir la victoria del oponente
- Sí hay posible victoria en esta tirada -> Conseguir la victoria mediante esta tirada.
La verdad es que era eficiente, aunque tenía los típicos truquillos que se le podía ganar haciendo siempre lo mismo, quizás habría que corregirlos, pero bueno, era bastante básico.
PD: El laberinto me parece mucho más complicado...
Un saludo.