Evaluando propuestas

Proyectos Estructuras de Datos

Publicado el 11 Diciembre, 2018 en Programación y Tecnología

Sobre este proyecto

Abierto

Descripción
Se requiere el desarrollo de un juego con características similares a Advance Wars, en el que se
implantara la parte de datos en un servidor Java y toda la parte gráfica del juego en una aplicación
Java.
Funcionamiento
Deberá implementarse una matriz dispersa para manejar la parte gráfica del mapa del juego, Donde
cada capa de la matriz representa una parte del mapa de juego, Esta matriz será consultada por el
cliente, obteniendo así información vital para el desarrollo del juego. Se implementará un árbol
Binario de Búsqueda por cada jugador (2 dos jugadores) para manejar las tropas que siguen con vida
en el juego junto con sus atributos.
Servidor Java
El servidor debe tener todas las funcionalidades necesarias para que le juego en el cliente, fluya sin
problemas. Este será desarrollando en Java. En él se deben implementar todas las estructuras de
datos requeridas para el proyecto.

Se cargará un archivo de entrada para generar las capas de la matriz dispersa. El servidor debe
permitir cargar archivos de entrada preguntando a que capa será asignada. Cada capa de la matriz
se guarda en una lista circular doblemente enlazada.


Cliente Java
El cliente será lo único con lo que el usuario interactúa, ignorando el funcionándomelo interno de
la aplicación. En él se debe implementar el estilo visual del juego, debe ser intuitivo y de fácil manejo
para el usuario final.
Comunicación
Para la comunicación entre el servidor Java y el Cliente Java, se debe utilizar la herramienta
RabbitMQ, para hacer la comunicación entre estas 2 aplicaciones, se pueden tener más de una cola
mensajes según a como usted lo considere.

Reglas del Juego
El juego consiste en un combate por turnos, cada uno de los usuarios tendrán un número de tropas
establecidos a partir de un archivo de entrada y almacenadas en una estructura de un árbol binario
de Búsqueda. El objetivo de este es acabar a todas las tropas del contrincante para poder ganar una
partida.

Flujo del juego
• Al iniciar el juego se deberá pedir los archivos de entrada para generar nuestro mapa o
campo de batalla, estos tendrán extensión *.map
• El juego siempre será de para dos jugadores, por lo cual el programa deberá solicitar el
archivo *.army para el jugador 1 y posteriormente otro archivo con la misma extensión para
el jugador 2.
• Luego de cargar los archivos del juego dará inicio, el primer turno será para el jugador uno
y luego que este acabe jugará el jugador 2. (Ver flujo de turnos)
• Cuando uno de los dos jugadores se quede sin tropas el juego dará fin.
Tropas
Infantería
• Movimiento: 3 casillas.
• Vida: 50 puntos.
• Ataque: 30 puntos.
• Alcance de ataque: 1 casilla.
• Niveles de desplazamiento: Puede desplazarse sobre cualquier superficie.
Infantería Mecanizada
• Movimiento: 2 casillas.
• Vida: 50 puntos.
• Ataque: 50 puntos.
• Alcance de ataque: 3 casilla.
• Niveles de desplazamiento: Puede desplazarse sobre cualquier superficie a excepción del
agua.
Reconocimiento
• Movimiento: 6 casillas.
• Vida: 100 puntos.
• Ataque: 50 puntos.
• Alcance de ataque: 2 casilla.
• Niveles de desplazamiento: Puede desplazarse únicamente sobre grama, carretera y
bosque.
Tanque
• Movimiento: 4 casillas.
• Vida: 150 puntos.
• Ataque: 80 puntos.
• Alcance de ataque: 2 casilla.
• Niveles de desplazamiento: Puede desplazarse únicamente sobre grama y carretera.

Mega tanque
• Movimiento: 3 casillas.
• Vida: 200 puntos.
• Ataque: 100 puntos.
• Alcance de ataque: 2 casilla.
• Niveles de desplazamiento: Puede desplazarse únicamente sobre carretera.
Artillería
• Movimiento: 3 casillas.
• Vida: 50 puntos.
• Ataque: 150 puntos.
• Alcance de ataque: 6 casilla.
• Niveles de desplazamiento: Puede desplazarse únicamente sobre carretera.
Flujo de turno
Cuando sea el turno de cada jugador sucederá lo siguiente:
Cuando inicia u nuevo turno todas las tropas de este jugador serán habilitadas, el jugador puede
seleccionar cualquiera de sus tropas y moverlas a través del mapa. Cada tropa tiene un rango
distinto de desplazamiento, por lo que esta puede desplazarse desde 0 hasta n casillas (donde n es
su rango máximo de desplazamiento de dicha tropa). Una ves la tropa se haya desplazado puede
atacar, para esto hará uso de sus atributos de atraque, vida y bonus que serán detallados en la
sección de Fórmula de Ataque.
Al momento de que una tropa ataque a otra enemiga, la tropa
enemiga realizará un contraataque defensivo siempre y cuando la tropa atacante se encuentre en
el alcance de la tropa enemiga. Por ejemplo que tenemos al Jugador A y al Jugador B, ente caso
momento el Jugador A realiza su turno y decide mover una tropa de artillería, luego de su
movimiento decide atacar a una tropa enemiga de infantería la cual se encuentra a 3 casillas de
distantica, debido a que el alcance de ataque de la artillería es de 6 casillas, este jugador puede
realizar su ataque sin recibir ningún contraataque debido a que el alcance de la infantería enemiga
es de 1 casilla y la artillería se encuentra demasiado lejos como para poder recibir el ataque de la
infantería enemiga. De igual forma si la artillería del Jugador A tiene a más de una tropa en su
alcance de ataque el jugador deberá de seleccionar a cuál de las dos tropas desea atacar.

Luego de realizar el ataque la tropa entra en modo deshabilitado por lo que ya no podrá hacer
ningún tipo de acción durante ese turno. Si únicamente lo que se desea es mover a la tropa y no
atacar, esto se podrá realizar saltándose así la fase de ataque. Para mejor compresión, el diagrama
de estados para las tropas es el que se muestra a continuación:

La única forma en que una tropa regresará al estado de “Habilidad” será cuando inicie el turno del
jugador.
El turno acabará cuando el jugador lo desee, él puede mover todas sus tropas, algunas de
ellas o ninguna durante su turno. Para marcar el fin del turno se deberá tener botón que lo permita
realizar.
Es importante mencionar que, si una tropa muere, el nodo correspondiente a la misma del árbol
binario de búsqueda deberá ser eliminado.
Fórmula de Ataque
La siguiente fórmula será utilizada para calcular el daño infligido por una tropa hacia otra, La misma
fórmula es aplicada para el contraataque con la diferencia de que el defensor pasa a ser al ahora el
atacante y el atacante pasa a ser el defensor.

D = A*(va/vta)*b

• d = daño infligido.
• A = Daño de la tropa atacante.
• VA = Vida actual del atacante.
• VTA = Vida total del atacante.
Mapa
El mapa será generado a partir de un archivo de entrada, este será manejado lógicamente y se
almacenará en la matriz dispersa. Básicamente, el mapa contenga 5 tipos de bloque que serán
guardados en la matriz dispersa de la siguiente forma.
Tipo Agua, nivel 0:
Dará un -5% de bonus de ataque.
Tipo Grama, nivel 1:
Dará un +10% de bonus de ataque.
Tipo Árboles, nivel 2:
Dará un -10% de bonus de ataque.
Tipo Carretera, nivel 3:
No dará ningún bonus.
Tipo Montaña, nivel 4:
Dará un +25% de bonus de ataque.

El mapa final podrá ser visualizado como un tablero de NxM, algo importante de resaltar es que las
tropas no pueden ser posicionada en la misma casilla en la que otra tropa aliado/enemiga se
encuentra, pero sí pueden desplazarse a través de estas casillas en la etapa de movimiento, dicho
de otra forma, las tropas pueden atravesar a las demás unidades para moverse.
Ejemplo de movimiento para una tropa de infantería sobre un mapa con grama, árboles y montañas.

Al cargar las capas se deben superponer, quiere decir capa 1 va arriba de capa 0 y así sucesivamente,
así en el caso que exista un nodo en una posición en la capa 0 y uno en la misma posición de la capa
1, se deberá mostrar el de capa 1.
Carga de Archivos
Los archivos de entrada deben ser cargados al programa al iniciar el mismo, todos los archivos
tendrán este formato pos_x,pos_y;tipo. Con excepción del archivo de tropas este tendrá en cuenta
el tipo de tropa tendrá este formato pos_x,pos_y,id;tipo_tropa. Para cargarlo tiene que ser por
medio de un botón para el usuario final pueda elegir sus archivos de carga de tropas.
Los archivos
no tendrán errores léxicos ni sintácticos.
Estructuras
Para el proyecto se realiza 4 estructuras, una matriz dispersa para el mapa, un árbol binario de
búsqueda para los jugadores 1 y 2 Y la lista circular doblemente enlazada para cada capa del mapa.
En cada nodo del árbol Binario representara una tropa, por lo que los atributos de cada uno de los
nodos de dicho árbol serán:
• Posición X
• Posición Y
• Id
• Vida
• Alcance de Movimiento
• Ataque
• Alcance de ataque
Estos atributos serán los mínimos que un nodo de esta estructura debería de tener, si considera
necesaria algún otro atributo puede agregarlo, Estos 7 atributos deberán de ser desplegados en el
reporte. Para cada nodo de la matriz dispersa, se solicita únicamente de atributo un contador guarde
la cantidad de veces que cualquier tropa ha estado en esa posición de la matriz.
Gráficas y Reportes
Dentro del menú de la ventana del juego se deberá de colocar una opción que permita en
cualquier momento generar un reporte por nivel o capa de la matriz, de igual forma se
podrá generar la gráfica para el árbol binario del jugador 1 y 2. Todas estas gráficas serán
realizadas del lado del servidor (ya que este contiene las estructuras) y para ello se
utilizara la herramienta Graphviz.
Se solicitan los siguientes reportes:
• Reporte por cada capa individual de la matriz, en vista funcional
Reporte de todas las capas unidas de la matriz. En vista lógica y funcional (Ejemplo
al final del archivo de entrada)
• Reporte de árbol binario del jugador 1 y 2

Observaciones
• Lenguaje de programación a utilizar: Java
• Herramientas de comunicación: RabbitMQ
• Sistema Operativo: Libre
• IDE: Netbeans

Categoría Programación y Tecnología
Subcategoría Otros
Tamaño del proyecto Pequeño
¿Es un proyecto o una posición? Un proyecto
Actualmente tengo Tengo las especificaciones
Disponibilidad requerida Según se necesite
Integraciones de API Cloud Storage (Dropbox, Google Drive, etc.), Otros (Otras APIs)

Plazo de Entrega: 16 Diciembre, 2018

Habilidades necesarias

C