Entornos de Usuario.
Práctica 2. (Sesiones 2 y 3).Desarrollo de aplicaciones Windows MFC.
Objetivos.
Crear una aplicación con el Visual C++, utilizando la arquitectura
documento/vista.
Utilizar las funciones básicas de dibujo de windows.
Crear menús y cuadros de diálogo.
Enunciado.
Esta práctica se plantea para ser realizada en dos sesiones.
El objetivo es diseñar el juego "tic tac toe"
o tres en raya americano. Para ello se dibujará en la ventana un tablero
con líneas negras formando nueve casillas. Además en la parte
superior de la ventana aparecerá el título "Tres en Raya".
En la parte inferior de la ventana aparecerá el jugador al que le toca
en ese momento poner ficha.
El tablero se dibujará centrado en la ventana, dejando
1/5 del tamaño de la ventana de espacio en cada lado.
La interacción con la ventana será la siguiente:
cuando el usuario pulse el botón izquierdo en una de las casillas aparecerá
una ficha correspondiente al jugador 1, la siguiente pulsación corresponderá
a una ficha del jugador 2. El juego acabará cuando uno de los dos jugadores
haga un tres en raya, o el juego acabe en tablas. En ese momento aparecerá
un mensaje indicando que el juego ha finalizado y cuál ha sido el resultado.
Se podrán elegir tres tipos de fichas para cada uno de
los jugadores: círculo, cuadrado y aspa. Además cada una de las
fichas podrá ser roja, azul o verde. Esta elección se hará
desde dos menús: Jugador 1 y Jugador 2, los cuales abrirán un
cuadro de diálogo con las posibles opciones.
La aplicación tendrá un menú para cada jugador,
con dos opciones, la primera 'configuración' abrirá un cuadro
de diálogo que permitirá seleccionar el tipo de ficha así
como el nombre del jugador. La segunda opción 'color' nos permitirá
elegir el color de dicha ficha.


Desarrollo de la práctica.
Para empezar a desarrollar la aplicación se creará una aplicación
de tipo MFC AppWizard. Esto nos creará una aplicación base que
utilizará la arquitectura documento/vista. En la clase vista será
donde introduzcamos todas las funciones para dibujar el tablero y las fichas,
así como los eventos de ratón a los que queremos que responda
la aplicación.
Para ello, dentro de la función Ondraw, añadiremos los funciones
que dibujan las líneas del tablero, y las funciones que, dependiendo
del estado de la matriz de datos dibujen las fichas correspondientes en cada
casilla.
A la clase CView le añadiremos la función que responde al evento
de 'Ratón izquierdo pulsado' (WM_LBUTTONDOWN), donde detectaremos si
el ratón ha sido pulsado dentro o fuera del tablero, y si ha sido dentro
en qué casilla.
La clase documento la utilizaremos para almacenar la información necesaria
para la lógica del juego. Necesitaremos para ello una matriz de datos
que almacene para cada casilla su estado (0=sin ficha, 1=ficha jugador 1, 2=
ficha jugador 2). Para poder introducir y obtener datos de la matriz, necesitaremos
dos funciones, una que nos permita introducir un valor en una posición
de la matriz, y otra que nos devuelva el valor de una posición. Cuando
pinchemos con el ratón en una casilla, primero comprobaremos si esa casilla
está libre (valor 0), y si así, introduciremos el nuevo valor
(1 ó 2).
Además, necesitaremos una función a la que llamar cada vez que
se introduce una nueva ficha y que calcule si el tres en raya ha sido completado.
Cuando uno de los dos jugadores haya conseguido el tres en raya, o se haya
llegado a tablas, aparecerá un mensaje que lo indique:
