Dune es un juego de estrategia en tiempo real basado en el icónico juego Dune 2000 de Westwood Studios del año 1998 ambientado en la novela Dune de Frank Herbert.
El objetivo es simple: destruir a todos los adversarios y quedarse con el control planeta Arrakis, conocido como Dune.
En este remake, el jugador podrá elegir jugar con una de las tres Casas: los nobles Atreides, los insidiosos Ordos y los malvados Harkonnen
Instalación de librerías externas:
sudo apt-get install libsdl2-dev libsdl2-mixer-dev libsdl2-ttf-dev libsdl2-image-dev libyaml-cpp-dev nlohmann-json-dev
Instalación librería libsdl2-mixer-dev versión 2.0.1:
https://packages.ubuntu.com/xenial/amd64/libsdl2-mixer-2.0-0/download
https://packages.ubuntu.com/xenial/amd64/libsdl2-mixer-dev/download
Instalación [amd64]: sudo dpkg -i libsdl2-mixer-2.0-0_2.0.1+dfsg1-1_amd64.deb
Instalación [amd64]: sudo dpkg -i libsdl2-mixer-dev_2.0.1+dfsg1-1_amd64.deb
Instalación librería nlohmann-json-dev (solo en caso de no tener Ubuntu 18):
https://packages.ubuntu.com/bionic/all/nlohmann-json-dev/download
Instalación [amd64]: sudo dpkg -i nlohmann-json-dev_2.1.1-1.1_all.deb
Flags de cmake para compilar en distintos modos:
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -DDEBUG") #Flags para modo debug
set(CMAKE_CXX_FLAGS "-Wall") #Flags para modo sin argumentos
Compilacion en cmake en modo DEBUG
mkdir debug; cd debug; rm -rf *; cmake .. -DCMAKE_BUILD_TYPE=Debug; make
Compilacion en cmake en modo RELEASE
mkdir build; cd build; rm -rf *; cmake ..; make
Pasos para instalar el juego:
1. sudo apt-get install libsdl2-dev libsdl2-mixer-dev libsdl2-ttf-dev libsdl2-image-dev libyaml-cpp-dev nlohmann-json-dev
2. Pararse sobre el directorio raiz de GIT
2. mkdir build; cd build
3. cmake ..
4. make [-j4]
5. sudo make install
6. ejecutar servidor: ~/usr/bin/dune/dune_Server 8080 <ruta_mapa>
7. ejecutar cliente: ~/usr/bin/dune/dune_Client
Desinstalar el juego:
1. sudo rm -r $HOME/usr/bin/dune; sudo rm -r $HOME/usr/var/dune; sudo rm -r $HOME/usr/etc/dune
Desde carpeta build/:
Cliente: ./dune_Client
Server: ./dune_Server <puerto> <mapa.yaml>
-
El juego finaliza cuando se destruyen todos los centros de construcción menos uno, el jugador cuyo centro queda en pie, será el ganador,informándole a todos los clientes si resultaron victoriosos o derrotados. -
Al seleccionar una unidad con click izquierdo o varias arrastrando el mouse con el click presionado, se informa por mensaje de voz la unidad seleccionada,y enviarla a atacar a una unidad enemiga, haciendo click derecho sobre esta, se acercará hasta encontrarse en rango y ahí comenzará el ataque. Si la atacada se desplaza, por ejemplo, intentando escapar, la atacante comenzará a perseguirla automáticamente, hasta encontrarse dentro de su rango de ataque. -
Para crear una unidad, se debe contar con dinero suficiente correspondiente a su costo y los edificios que requiera, mostrando un botón con la imagen de la unidad habilitado, caso contrario se deshabilitará el botón en la vista del jugador. Al iniciar el entrenamiento de cualquier unidad, se restará el dinero correspondiente del jugador, se deshabilitará el botón en la vista durante el tiempo de entrenamiento. Al finalizar el entrenamiento, la unidad creada será posicionada en el primer cuartel que posea el jugador.Validar dinero suficiente (ahora puedo crear unidades sin dinero suficiente mostrando balance negativo)Habilitar Handler (mostrar botón) en base a edificios construidosDeshabilitar botón si no se cumplen los anterioresRestar dinero cuando se construye unidad (solo restan cosechadora y trike)No tener harcodeado en handler posición de unidad, leer del modelo (spawn en edificio)
-
Al morir una unidad, se mostrará la animación correspondiente a su muerte/destrucción por pantalla y desaparecerá del mapa. -
Seleccionar una cosechadora, se la envía a recolectar especia y automáticamente realiza el recorrido hacia ese punto, cuando se completa su capacidad de 200 unidades en 20 segundos, retorna a la refinería, descarga lo cosechado en 5 segundos, incrementando en 1 la cantidad de dinero del jugador por cada unidad de especia recolectada. Cuando se agota la especia en la zona donde la cosechadora recolecta, debe buscar más especia en las cercanías automáticamente, continuando la cosecha. En el momento en que no encuentra más especia en sus alrededores, la cosechadora retorna a la refinería. -
Para construir un edificio, se debe contar con el dinero suficiente correspondiente a su costo. Caso contrario, se deshabilitará el botón para comenzar su construcción. Al iniciar la construcción de cualquier edificio, se restará el dinero correspondiente del jugador y se actualizará la energía consumida por el mismo, sumando y pasado el tiempo de construcción correspondiente a cada uno, se podrá colocar en cualquier parte del mapa cuyo terreno sean rocas, no haya unidades en el mismo y se encuentre al menos a 5 bloques de distancia de otros edificios. El edificio pasara a ocupar tantos bloques como su superficie lo indique.Validar la cantidad de dinero (no resta al construir, no deshabilita botón si no hay suficiente)La construcción es instantáneaTomar posición de ubicación de edificio del input de click del jugadorNo se actualiza energía consumida
-
Al destruirse un edificio, se disminuirá la energía consumida por el jugador que perdió el edificio mostrando una animación en pantalla de su destrucción y posterior borrado del mapa. -
Los jugadores al iniciar la aplicación, ingresan host y puerto, la casa con la cual jugará cada uno y se inicia la partida con los jugadores repartidos en el mapa con su dinero inicial y el centro de construcción. -
Para iniciar el servidor, se deberá indicar, puerto al cual escuchar, mapa sobre el que se jugará y cantidad de jugadores. El juego no iniciará hasta que se hayan conectado la cantidad de clientes indicada por parámetro. Una vez alcanzado ese número, se iniciará el juego para todos. -
Las distintas unidades de cada jugador se podrán diferenciar mediante un color característico para cada uno de ellos. -
Si la energía consumida por los edificios supera a la energía generada por las Trampas de Viento, los tiempos de construcción de edificios y de entrenamiento de unidades se verán incrementados en un factor proporcional a la energía consumida sobre la energía generada.
-
Debe aparecer un gusano de arena en intervalos de tiempo aleatorios, en lugares aleatorio, el cual devora cualquier unidad aleatoriamente. Estos no pueden ser atacados. Tras un numero aleatorio de ataques, desaparece.
-
Cuando el jugador seleccione un edificio, se habilitará el botón de venta, sobre el cual al hacer click izquierdo, destruirá el edificio, devolviéndole al jugador una parte de dinero de su costo de construcción.
-
Si una unidad se encuentra quieta y una unidad enemiga ingresa dentro de su rango de ataque, la primera, comenzará a atacarla sin desplazarse. Cuando la segunda salga del rango, detendrá el ataque.
-
Explota durante la animación al intentar renderizar un ataque. -
Al hacer click en los botones de unidades intenta crear el edificio de al lado. -
No se pueden seleccionar unidades -
Arreglar el bug de la desconexión al salir -
Al hacer click en la cruz, no cierra el juego. -
Al agregar el sleep, la vista tarda en renderizar.
-
Arreglar bug de que no disminuye la plata al comprar unidades -
Chequear la salida al finalizar el juego -
Al vender una refinería donde está descargando una cosechadora, esta sigue descargando en el mismo lugar como si aún estuviera el edificio.
-
Renderizar solamente las unidades que se están viendo (dentro de la cámara)
-
Quitar las velocidades con contadores -
Crear archivo de configuración. Eliminar (o cargarlo desde el archivo de conf) el GlobalConfig. -
Modificar el GlobalConfig para que no sea una variable global. Opción: Dejarla Static en el Model -
Hacer el instalador "sudo make install"
- /bin/dune => ejecutable
- /var/dune/assets => todos los assets. Acá se puede cambiar el path en el código (ponerla como absoluto) o poner desde assets y el resto por archivo de configuración (esto solo si hay tiempo)
- /etc/dune.cfg => archivo de configuración
-
Reducir tiempo en CPU
-
Ver de mejorar el envío de datos. Tratar de enviar solo novedades -
Ver en todo caso, cambiar la librería de json
-
Ver si se puede renderizar solo las novedades (agregar un news = true dentro de cada update)
-
Ver de renderizar el mapa solamente si cambia la cámara (para esto ver issue 11)
-
Testear si cambia el terreno de arena en base a la especia
-
Prioridad Critica
Hacer un mapa con todos los terrenosAgregar arena al mapa y verificar que funcione la cosecha automáticaRevisar capacidad de refinería + silosCorregir la distancia de los edificios (se debe construir a NO MAS de 5 bloques de distancia de otro edificio propio)CorregirTestear velocidad por terrenosReducción de energía edificiosRalentización por falta de energía (testear)Infantería puede moverse por cimas (testear)Velocidad cambia según el terrenoEfectividad de una unidad sobre otra (bono de armas?)Verificar que el tanque aparezca- Mejorar jugabilidad
Hacer el juego en pantalla completa (permitir alternar)- Hacer los manuales y documentación
- Borra código comentado!
Main.cpp agregar loop de juego- Corregir los paths harcodeados para facilitar la instalación
- GameView.cpp : quitar los "magic numbers"
GameView.cpp : corregir barra de energía RenderVPBar => percentage = 1 - percentageGameHandler : variable global actual player- Eliminar prints de debug
-
Prioridad Media
- Hacer gusanos
- Mejorar interfaz de dinero/energía
- Mejorar progreso de construcción/entrenamiento
-
Prioridad baja
Mejorar el botón de venta de edificiosAumento de velocidad de entrenamiento (testear)Agregar sonidos y FX
Usar "callgrind" para encontrar donde está consumiendo más memoria
Instalación:
sudo apt-get install kcachegrind
Uso:
valgrind --tool=callgrind ./dune_Client
kcachegrind <archivo_salida (callgrind.out.pid)>
- Integrantes
- Enunciado
- División de tareas
Evolución del proyecto: Cronograma propuesto y cronograma real- Inconvenientes encontrados: Problemas principales encontrados
Análisis de puntos pendientes: Cosas que faltan o deberían mejorar, cómo y por quéHerramientas: Herramientas auxiliares que utilizaron para hacer el proyecto, como editor de interfaz gráfica, control de versiones, herramienta para generar documentación, herramientas para debug, etcétera.- Conclusiones
- Requerimientos de software:
OS, bibliotecas y herramientas necesarias para compilar, desarrollar, probar y depurar el programa - Descripción general: Arquitectura general del proyecto, qué módulos tiene, etcétera.
- Módulo N: Una sección por módulo, que puede ser una aplicación, explicando más en detalle los ítems a continuación
- Descripción general
- Clases: Breve descripción de cada una que incluya responsabilidad y métodos principales, como mínimo
- Diagramas UML: De clases como mínimo, en lo posible diagramas de secuencia para operaciones más complejas
- Descripción de archivos y protocolos: Formato de archivos y protocolos de red utilizados, si son compartidos por varias aplicaciones pueden ponerlo en una sección aparte de este manual y hacer referencia a esa sección en cada módulo que lo use
- Programas intermedios y de prueba: Programas ‘intermedios’ que hayan usado para probar porciones del tp
- Código Fuente
Instalación- Requerimientos de software: OS, bibliotecas y herramientas necesarias para instalar el programa- Requerimientos de hardware
- Proceso de Instalación: Eventualmente puede requerir también la compilación
- Requerimientos de hardware
Configuración: Archivos de configuración y configuración general de la aplicación)Forma de uso: A criterio del alumno, debe explicar como usar la aplicación de forma completa y desde la perspectiva del usuario final, incluyendo capturas de pantalla- Apéndice de errores: Si la aplicación tiene códigos de error, poner aquí su descripción, posible causa y posible solución