DESARROLLO DE JUEGOS CON XNA

Anuncio
DESARROLLO DE JUEGOS CON XNA
AUTOR: JAVIER DEL OLMO SÁNCHEZ
TUTOR: FERNANDO LLOPIS PASCUAL
DEPARTAMENTO: LSI
CURSO: 2008/2009
1
INDICE
Página
1. INTRODUCCIÓN
3
2. CONTENIDOS
3
3. CONCLUSIONES
14
4. BIBLIOGRAFÍA
15
2
1. INTRODUCCIÓN
El objetivo de este proyecto es realizar un juego en XNA, en el que nos centraremos
en la inteligencia de los enemigos, en el que la dificultad de los niveles sea por la
dificultad de los enemigos y no por la cantidad de enemigos que se encuentren en el
escenario. Para ello se realizará unos escenarios en el que se situará al jugador como
a los enemigos. También se realizarán distintos parámetros al héroe como fuerza y
vida que irán evolucionando a lo largo del juego. Por último en cuanto a los enemigos
se hará al finalizar cada nivel un monstruo más complejo en el que se enfrentará al
héroe en uno contra uno.
2. CONTENIDOS
2.1 XNA
Vamos a definir la plataforma que vamos a manejar para orientar el diagrama de
clases a la funcionalidad que ofrece XNA.
Definición
XNA no son el acrónimo de ningún nombre. Es el nombre que recibe la nueva
tecnología para la programación multimedia de videojuegos basada en DirectX y
manejada
por
.Net.
Se trata de un API de programación que simplifica y hace más intuitivo el uso de las
librerías nativas DirectX y, en consecuencia, simplifica de manera notable la
programación de videojuegos.
Estructura
En esencia, XNA se compone de dos librerías de ensamblados (dll) para .Net 2.0 que
manejan por debajo las librerías nativas del sistema de DirectX. Al situarse como una
librería sobre el Runtime de .Net, se beneficia de todas las mejoras que .Net
proporciona incluyendo el manejo de la memoria por el recolector de basuras, la
posibilidad de trabajar con cualquier lenguaje .Net y la multiplataforma.
Previamente a XNA existían las librerías de ensamblados Managed DirectX que, de
manera similar a XNA, permitían el acceso desde lenguajes .Net a las librerías nativas
de DirectX. En este caso, sin embargo, el acceso era mucho menos intuitivo y se
componía, básicamente, de un calco de las funciones de DirectX para .Net. Las
librerías Managed DirectX están en desuso y no se soportarán más en el futuro.
Modelo de programación orientado a videojuegos
El modelo de programación de XNA, al contrario que Managed DirectX, está orientado
a la programación de videojuegos. Para ello se definen una buena cantidad de clases
básicas de tipo matemático, necesarias para la programación gráfica, pero también
una nueva API y metodología de programación sobre estas clases que simplifica el
proceso
de
desarrollo.
3
El desarrollo de videojuegos con XNA está orientado a componentes. Los
componentes son, básicamente, pequeños trozos de código que cumplen una
funcionalidad concreta. Existen componentes gráficos como podría ser una bola
rebotando por la pantalla, una nave espacial o el mismo escenario del videojuego. No
obstante no todos los componentes tienen por qué ser gráficos. Podemos tener un
manejador de eventos o estados del videojuego, un generador de lógica u otros tipos
de componentes que no necesiten ser renderizados para usarse y cumplir su función.
Todos estos elementos heredan de la clase GameComponent (para los elementos no
gráficos) o de la clase DrawableGameComponente (para los elementos gráficos).
Una clase central (Game) se encarga de manejar todos los GameComponents que
han sido registrados. Así, un videojuego (Game) es igual a la suma de las
funcionalidades
de
todos
los
GameComponents
que
lo
componen.
XNACommunity tiene como objetivo unir a los desarrolladores interesados en esta
tecnología para poner en común los GameComponents que han desarrollado y ser
capaces en el futuro de símplemente añadirlos a un videojuego y usarlos tal cual,
simplificando enormemente la tarea de programar videojuegos.
Multilenguaje
En la actualidad, XNA utiliza un IDE de programación basado en el IDE de C# 2005
Express Edition, por lo tanto la mayoría de los programas basados en XNA están
escritos en C#. Sin embargo, al tratarse de librerías de ensamblados totalmente
compatibles con .Net, pueden utilizarse con cualquier otro lenguaje .Net del mismo
modo que se utilizaría cualquier otra librería de ensamblados.
2.2. MÉTODOS A UTILIZAR
Una vez visto los componentes que podemos asignar en nuestro sistema hemos de
tener en cuenta que utiliza XNA en todas las clases que interactúan en el sistema
(escenarios, personajes, enemigos) en los que definimos:
Initialize(): Inicializa los componentes que contenga la clase, se efectuara al principio
de la ejecución
LoadComponent(): Carga los componentes como texturas, sonidos en la clase
Update(): Actualiza el estado del juego
Draw(): Dibuja los componentes del sistema
4
2.3. DIAGRAMA DE CLASES
5
A lo largo de la implementación del proyecto se vio necesario utilizar nuevas clases
para llevar los objetivos que se definió en el análisis
CargarEscenario: Es la base de datos que utilizaremos para la carga de escenarios y
enemigos, ya que todos los escenarios siguen un patrón y tienen los mismos atributos
en esta clase será la asignación de componentes de los escenarios.
Escenario tenía un problema ya que al diseñar el escenario no se definió que podía
ser no jugable. Para ello se ha hecho tres derivados de escenario que siguen la
filosofía de escenario pero sin el personaje y enemigos.
EscenarioIntro: Este escenario cargará el texto de la historia y la irá dibujando en la
pantalla
Escenarioanimacion: Cargará los integrantes del dialogo como el texto de este.
EscenarioTienda: Contendrá datos del héroe para saber que ofrecer al héroe.
2.4. IMPLEMENTACIÓN DEL SISTEMA
En este punto explicaremos más detenidamente las clases usadas y como se ha
implementando. También destacaremos algunas estrategias usadas para realizar el
sistema
Game
Game será el encargado de comenzar el juego así de cómo crear al héroe.
Otra de las funciones será controlar en cada momento que tipo de escenario se
encuentra en ejecución, esto lo hará en su función update y sabrá cuando acaba cada
uno para dar comienzo a otro tipo de escenario.
Heroe
Para hacer el héroe se ha utilizado 3 clases :
a) Jugador
La clase principal del héroe, en esta clase se inicializa todas las componentes del
héroe así como los movimientos que hace por pantalla, tiene diferentes métodos para
controlar el scrolling en el escenario
b) Barra de vida
Controla los toques que le queda al héroe
c) Ataque a distancia
Este objeto es el ataque a distancia que usa el heroe, aquí se controla su movimiento.
6
Escenarios
a) CargarEscenario
Es la “base de datos” de los distintos tipos de escenario que existen en el juego, para
ello se utiliza un hashMap con las distintas variables ya que al inicializar cada
escenario usarán estos datos, está hecho de manera genérica para mayor flexibilidad
a la hora de añadir nuevos escenarios .
b) Escenario
La clase escenario en la que interactúan los diferentes enemigos y el héroe, aquí se
controla los distintos movimientos del héroe con los distintos enemigos mediante el
método update , también controla el estado de la partida(si hemos ganado el escenario
o lo hemos perdido).
c) EscenarioAnimacion
Establece los valores que tiene las animaciones, carga los distintos diálogos que
contienen.
d) EscenarioTienda:
Esta tienda está conectada con los datos del héroe de manera que cada vez que
actualizamos sus datos sabremos que ofrecer al usuario
Enemigos
a) Enemigo
Para la construcción de los enemigos se ha utilizado una clase padre enemigo que
maneja todos los datos de los distintos tipos de enemigos, de esta manera
declararemos objetos de enemigos y poder interactuar con todos los hijos como si
fueran iguales.
b) Clases Hijas
Estas clases determinan la inteligencia de los distintos enemigos que tenemos, de esta
manera aquí controlaremos los métodos exclusivos de XNA como son el update, draw
y la carga de contenidos.
Otros
a) MenuComponent
Aquí establecemos los distintos elementos que contiene el menú así como su estado
b) Horizontallyscrolling
Controlamos el scrolling de los escenarios en los que está conectado con el héroe de
manera que da la sensación que avanza por la pantalla.
7
2.5 MANUAL DE USUARIO
Objetivo:
El objetivo del juego es avanzar por diversos escenarios y derrotar a todos los
enemigos para pasar de nivel.
Composición del juego:
El juego se compone de diferentes tipos de escenario que mencionaremos aquí.
Menú:
Aquí podremos elegir entre comenzar partida y salir. Seleccionaremos las opciones
con los cursores arriba y abajo y ENTER para elegir la opción. Este también saldrá
cuando nos pasemos el juego o nos maten todas las vidas para volver a jugar.
Secuencia Historia:
A lo largo del juego irán saliendo escenas que contarán la historia del juego, para ello
podemos ver la historia y dejar que pase el tiempo o apretar el botón c que sale en la
esquina inferior.
8
Secuencia Diálogos:
También encontraremos diálogos entre los personajes, aquí cuando leamos
apretaremos botón c para continuar.
Tutorial:
Este escenario es un poco especial al resto ya que debemos matar los enemigos y
aparte superar el tutorial que ira apareciendo mediante mensajes, para dar por leído el
mensaje pulsar c.
Tienda:
9
Aquí podremos mejorar las habilidades del héroe en el que indicamos las teclas para
cada objeto:
Tecla V: Recarga una vida al personaje
Tecla E: Pone un corazón más al personaje
Tecla F: Sube la fuerza que teclas se usarán para comprarlo del personaje.
Tecla R: Cura 1 corazón al personaje
Barra de estado:
Vemos que indica la cara del protagonista que cambiará dependiendo el movimiento
· Los corazones indican el número de toques que tiene
· El numero de abajo el número de vidas
· La puntuación de la derecha el número de puntos
· La barra de la derecha el tiempo que tardará en lanzar la magia
· La espada indicará la fuerza del héroe
Movimientos:
·
·
·
·
·
·
Las teclas a pulsar son:
<--Mover izquierda
-->: Mover derecha
Flecha arriba: salto
SPACE: ataca
Botón a: ataque mágico (este solo se podrá tirar cuando la barra este llena)
Escenarios:
Llegamos a la parte jugable del juego en el que deberemos derrotar a todos los
enemigos de la pantalla para poder pasar de nivel, si recibimos un golpe estaremos
invencible durante un tiempo. Si nos matan una vida volveremos al escenario. En caso
de que nos quedemos sin vidas volveremos a comenzar. De aquí en adelante todos
los escenarios jugables serán así. Si vencemos avanzaremos al siguiente escenario.
10
Escenario Jefe:
En estos escenarios habrá solo un enemigo el cual deberemos vencer al enemigo que
tendrá una dificultad mayor que los enemigos normales.
También tienen la característica de cambiar de movimientos cuando le queda poco
vida. Si vencemos avanzaremos al siguiente escenario.
Enemigos:
· Arquero: Es un guerrero cuya habilidad es la de disparar flechas para eliminar el
oponente, siendo débil en combates cuerpo a cuerpo.
11
· Esqueleto: Este enemigo es el más poderoso y versátil tanto en ataque como en
defensa. Además del ataque cuerpo a cuerpo, no le afectan los ataques a distancia
lanzados por el héroe y puede resucitar en un 60% de probabilidad.
· Guerrero: Es el guerrero más básico, se lanza al ataque del héroe sin vacilar.
· Guerrero de Elite: Su capacidad de ataque es mayor que la del guerrero, ya que
neutraliza los ataques a distancia lanzados por el héroe y le obliga a luchar cuerpo a
cuerpo.
· Planta: Es una mala hierba crecida en lo más profundo del bosque, capaz de repeler
y contraatacar cualquier ataque de meleé, pero vulnerable a los ataque a distancia.
· Lobo: Es un fiero animal que acecha a sus presas en la profundidad del bosque. Su
velocidad le ayuda a cazar y atacar a sus presas.
Abeja: Enemigo volador que ataca cuando esta cerca de su enemigo.
Ninja: Guerrero rápido que puede teletransportarse cuando uno menos se lo espera,
además si se le da la espalda puede atacar con cuchillos
12
Fantasma: Espíritu que vaga por las mazmorras, su cuerpo transparente le hace
inmune a los ataques físicos
Zombi: Muerto viviente que es capaz de tirar ondas de viento, además de tener mal
temperamento ya que si se le ataca mucho explota.
Pájaro: Guardián del bosque el cual sobrevuela la zona lanzado ataques de fuego, en
caso de peligro llama a sus guerreros.
General: Jefe de las tropas de Golt, rápido y ágil ataca con poderosos ataques a
distancia.
Dragón: Guardián de las mazmorras de golt , solo ataca cuando su presa esta cerca,
además de atacar con ataques mágicos
13
3. CONCLUSIONES
Una vez realizado el juego se ha podido comprobar que con la herramienta XNA
realizar un juego es más sencillo que hacerlo de cero ya que solo nos tenemos que
preocupar de realizar la lógica del juego.
En este proyecto la complejidad inicial ha sido que empezamos de cero con lo que
había que estudiar bien el análisis y diseño para la realización de los buenos cimientos
del juego. Se ha conseguido establecer un escenario en el que el jugador interactúa
mediante los controles y distintos enemigos para poder enfrentarse, de esta forma se
ha conseguido hacer mediante una clase que añadir escenarios sea bastante fácil y
añadir enemigos sea solo crear una hija de clase enemigo y desarrollar su inteligencia.
Uno de los objetivos principales del proyecto que era la inteligencia se ha conseguido
a lo largo de distintos niveles y cada nivel es un poco más complicado con el mismo
número de enemigos y los jefes de cada nivel hacen movimientos más complejos
cada nivel.
Cosas que se podrían mejorar en un futuro pues podría ser añadir nuevas habilidades
de enemigo, ya que se podrían centrar fácilmente en ese tema por la estructura ya
realizada de enemigo y solo tendría que ocuparse de realizar la lógica del enemigo.
Otros temas que se podían enfocar es a nuevas características de juego como puede
ser jugar 2 jugadores, realizar guardado de partida, intentar realizar movimiento
vertical (aparte de moverse izquierda y derecha mover arriba y abajo) o crear diversos
obstáculos en el escenario.
Puede que me deje algunos detalles de lo que se podía añadir al juego, pero no
debería haber problema ya que el juego está bastante bien estructurado como para
añadir funcionalidades sin tener que reconstruir el código.
14
4. BIBLIOGRAFÍA
Básicamente la bibliografía consta de direcciones:
http://www.spriters-resource.com/: Para utilización de sprites e imágenes del
proyecto
http://www.fdi.ucm.es/profesor/fpeinado/courses/gamedesign/index_es.html:
Para la realización análisis y diseño del proyecto
http://xna.animered.net: Para el aprendizaje con la plataforma
http://www.codeplex.com/XNACommunity: Ejemplos de proyectos de XNA
15
Descargar