UNIVERSIDAD DE BUENOS AIRES - Facultad de Ingeniería ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ====================== +-------------------------------+ | ALGORITMOS Y PROGRAMACIÓN III | 2do cuatrimestre de 2000 +-------------------------------+ Cátedra: Ing. Carlos Fontela ======= Grupo: 10 ----- ALGOWARS - Episodio IV ====================== Para mayor información visite: http://www.algowars.llucax.hn.org/ Cambios realizados: ------------------ 05/10/00: Se terminaron de realizar algunos cambios en las clases cNavePropia, cEspacio, cNaveEnemiga y cObjetoVolador. Se les agregó, modificó y reemplazó algunos métodos (documentado en cada unidad en particular). Se empezó a migrar los comentarios del código fuente para hacerlo compatible con DelphiDoc (una herramienta similar al JavaDoc pero para Delphi que permite generar automáticamente documentación a partir de los comentarios en el código fuente). Se reestructuró el proyecto en diferentes directorios para simplificar el desarrollo. La nueva estructura es la siguiente: --------------- algowars\ Directorio con el proyecto entero algowars\HISTORIA.TXT Este documento algowars\bin Binarios ejecutables compilados algowars\dcu Unidades compiladas algowars\doc Documentación del proyecto en gral. algowars\doc\uml Diagramas UML algowars\doc\ref Referencia de las clases del proyecto (y sus métodos) en formato HTML Generada con DelphiDoc (http://www.softconsult.se) algowars\src Código fuente general algowars\src\test Proyectos temporales que fueron utilizados para probar las unidades algowars\src\ov Unidad que contiene cObjetoVolador y sus subclases algowars\src\ov\naves Unidad que contiene cNave y sus subclases --------------- 01/11/00: Se realizaron cambios profundos en el modelo, como el agregado de un sistema de coordenadas a todos los objetos voladores. También se cambiaron TODOS los métodos mGetXxxx para que devuelvan una copia del atributo porque de otra manera se esta violando, en parte, el encapsulamiento, ya que al devolver un puntero al atributo, en definitiva estamos permitiendo acceso a la estructura interna del objeto. Un claro ejemplo de los problemas que traía esa implementación es el problema que trajo el cambio de la estructura interna de cObjetoVolador, ya que para mantener la "interfaz" intacta, se tuvo que simular la existencia de un atributo que no existía mas, devolviendo un puntero a un objeto nuevo que luego nunca se liberaba. 10/11/00: Se agrega un condicional para el preprocesador del compilador, para que si no se compila como una versión de DEBUG, que no utilice el objeto cObjeto y por consiguiente, su método abstracto mGetDebugInfo. 02/12/00: Se terminó de implementar los disparos. Entre los cambios principales están los siguientes: Se separó la funcionalidad de la cámara en una clase nueva: cFiltro. La cámara tiene un atributo cFiltro que se encarga de filtrar los objetos que se pueden ver. Se reutiliza la clase cFiltro para implementar el sistema de lockeo de la cNavePropia. Para hacer esto se hizo una subclase que también filtra las armas. Se separó la clase auxiliar cLista en su propia unidad. 04/12/00: Se creo una clase abstracta cObjetoPersistente de la cual derivarán todas las demás clases que soportan persistencia. Esta clase provee un identificador único de la clase y métodos para serializar y deserializar las clases. La serialización se realiza representando el objeto en una cadena de texto con un formato parecido al XML (con el que cualquier persona que conozca XML o incluso HTML se va a sentir familiarizado). Para hacer esto se hace un uso muy importante de expresiones regulares, utilizando la clase TRegExpr (externa). 08/12/00: Se termina de implementar la persistencia. Para lograr esto, además de implementarse los métodos mSerializar y mDesSerializar en todas las clases que son ahora persistentes, se agregaron algunos métodos auxiliares y una nueva unidad con funciones útiles para el manejo de persistencia (SerializacionUtils). Los métodos auxiliares se limitaron a ser métodos para acceder y establecer atributos. También se implementa el almacenamiento de escenarios (configuración inicial del juego) de una forma prácticamente idéntica a la del almacenamiento de un juego. Se cambian las clases cCamara y cFiltro para que sean abstractas. Las clases que se utilizan ahora derivan de estas. Se implementan variantes de la cámara y filtro frontal, para crear cámaras que "vean" lateralmente, arriba, abajo, etc. Siempre como subclases de cCamara y cFiltro. Se cambia la clase cVista para que soporte cámaras múltiples. Para esto se agrega un array de cámaras. 09/12/00: Se termina de implementar las vistas, creando dos nuevas clases: cCamaraMapa y cFiltroMapa. Además se hacen algunos cambios internos a la clase cNavePropia para poder obtener el arma recién disparada sobre la que se monta la cámara del Arma. Se reorganiza el proyecto en una nueva serie de directorios: algowars/src/vista Tiene las clases que implementan las vistas algowars/src/modelo Tiene las clases que implementan el modelo algowars/src/forms Tiene las clases que implementan los formularios algowars/src/auxiliares Tiene las clases auxiliares algowars/src/test Tiene proyectos utilizados para pruebas del programa. algowars/src/test/cb Tiene proyectos y clases auxiliares para pruebas de caja blanca específicamente. algowars/src/test/cn Tiene proyectos y clases auxiliares para pruebas de caja negra específicamente.