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: