lunes, 4 de abril de 2011

Ejercicio. Implementar el juego del tres en raya (también llamado Tic Tac Toe o "de la vieja")


Programa en C# el juego del tres en raya. Inicialmente vamos a hacerlo para dos jugadores que manejan el ratón, la versión más simple. Ten en cuenta las siguientes consideraciones:

  • Crea una aplicación Windows en Sharp Develop y emplea componentes botón (Button) para representar cada celda del juego.
  • Las celdas tendrán un tamaño de 75x75 pixels.
  • Inicialmente el color de fondo de las celdas será negro.
  • No repitas el código para atender el evento de clic en cada celda. Trata simplemente de recoger una referencia al objeto botón que produjo el evento para manipularlos todos de forma genérica. Esto es, en cada manejador del clic aparecerá: celda =(Button)sender; siendo celda un atributo miembro del formulario de la clase Button.
  • Para poner X o O se cargará la imagen respectiva en el botón. Para cargar una imagen en un botón modifica su atributo Image como en este ejemplo: celda.Image=Image.FromFile("tres_en_raya_O.jpg");

  • Hacer clic sobre una celda en la que ya se ha jugado no debe tener efecto (puedes avisar al jugador mostrando un error en una etiqueta)
  • El juego debe detenerse cuando alguien haya ganado y debe mostrar en una etiqueta quién es el ganador.
  • Debe ser posible reiniciar el juego, una vez acabado o en medio de una partida, mediante un botón de Reset.
  • Debe ser posible elegir el turno inicial.
Una vez que funcione, trata de añadir manejadores de eventos para las teclas, de tal forma que cada jugador pueda jugar indistintamente con el ratón o con el teclado. Para ello puedes suponer la configuración

qwe
asd
zxc

haciendo corresponder a cada celda la letra que ocupa su misma posición. Para recordar cómo manejar eventos de teclado revisa el ejemplo del juego del Pong


Finalmente, habilita una opción para jugar contra la máquina. Para ello, en el turno de la máquina debes simular cierta "inteligencia" que sea capaz de tomar buenas decisiones. Lo ideal sería utilizar el algoritmo del minimax. Haz clic en este enlace y vete a la página 13 del documento para comprobar en qué consiste. Además de una clara explicación de su mecanismo dispones del pseudocódigo para implementarlo recursivamente. Simplemente, trata de adaptarlo a la sintaxis de C#.

Solución con minimax sin heurística: descárgalo aquí


No hay comentarios:

Publicar un comentario