El juego de la vida de John Conway programado en Visual C++ usando la MFC (Microsoft Fundation Class) para una aplicación SDI (Single Document Interface)
La arquitectura de programa es del tipo Documento Vista y fue creado con el Wizard de Visual C++, el cual crea y enlaza las 4 clases principales de la arquitectura las cuales son:
• CJuegoVidaApp // Representa la aplicación en sí
• CJuegoVidaDoc // Se encarga de manipular los atributos datos de la aplicación
• CJuegoVidaView // Visualiza los datos en el área cliente de nuestra vista
• CMainFrame // Es el marco que contiene a la vista
CObject es una clase genérica de la MFC la cual nos facilitara la serialización (guardado en disco duro) de los atributos de sus clases derivadas.
CFiguras deriva de la clase CObject y contiene atributos como el ancho, color y estilo de la pluma además del color de la brocha, y se encarga de serializarlos, además consta de un método virtual importante que es PintarFig el cual debe ser implementado en las sucesivas clases derivadas.
virtual void PintarFig(CDC* pDC) const
CCuadro deriva de CFiguras y contiene las coordenadas de la célula en un objeto CRect y se encarga de serializarlos, además implementa el método virtual PintarFig y dibuja un cuadro con la pluma y brocha de la clase base CFiguras.
COvalo deriva de CRect y simplemente sobrescribe el método virtual PintarFig y en vez de dibujar un cuadro dibuja una elipse.
CCelula deriva de COvalo y es la encargada de dibujar la célula, para ello recibe un contexto de dispositivo CDC* que es provisto por la clase CConway, la clase CCelula tiene tres atributos principales los cuales son:
BOOL m_bEstado; // Indica el estado de la celula (Live, Dead)
BOOL m_bEstTemp; // Indica el estado para la siguiente generación
BOOL m_bFormaCel; // Indica la forma de la Celula (Ovalo o Cuadrado)
Aquí la jerarquía de clases que se encargan de dibujar las células:
CObject
CFiguras
CCuadro
COvalo
CCelula
CConway deriva de la clase CWnd de la MFC por lo que al ser una clase de ventana debe ser registrada mediante la función:
BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass );
La clase CConway será la encargada de dibujar en su área cliente los objetos células los cuales tienen la propiedad de estar vivos o muertos, para esto la clase CConway tiene como atributo un puntero: CObArray* m_pCelulas que se encargara de contener los objetos CCelula.
Además la clase CConway será la encargada asignar memoria dinámica para cada objeto CCelula, así mismo asignarle las coordenadas de su superficie.
También la clase CConway aplicara las reglas del juego de la vida y con ayuda de un temporizador visualizar el estado de las células en la nueva generación.
Pueden ver el funcionamiento de este programa aquí: