1 Grupo compuesto por: Kevin Daich (Programación) Pablo Kvitca (Programación) Maximiliano Leibovich (Diseño)
2 Capturas de Pantalla
3
4
5
6 Trabajo de Diseño Maximiliano Leibovich Programas Utilizados: ● Adobe Illustrator CS4 ● Adobe Photoshop CS4 (Poco uso) ¿Porque ese programa? ● Simplicidad y previa experiencia por lo que no se necesitaban aprender conocimientos nuevos ● Previamente el juego iba a ser en 64 bits, debido a mi incapacidad de poder diseñar vehículos los cuales no fueran compuestos de pixeles (primer problema) ● Podía generar imagenes las cuales no tuvieran fondo lo que permitía que pudieran ser utilizadas en el programa
7 Trabajo de Diseño Avion ● El avión fue el primer objeto el cual diseñe, ya que tenía una idea aproximada de cómo se iba a ver, y se veía de esta forma: ●Al ver que el otro avión había superado al original decidí hacer un rediseño del avión anterior, pero usando de la misma forma, una imagen para darme una idea, y este es el avión final ●También queríamos incluir un avión militar el cual daría un poco más de diversidad al juego y este nada más era un rediseño del avión anterior pero en diferente color, entonces, busque imagenes las cuales me dieran una idea más clara de cómo debería ser, entonces hice este:
8 Trabajo de Diseño ● El segundo objeto que diseñe y en mi opinión al principio, era el más feo, no tenía idea como hacer uno, no tenía idea como se veía desde arriba en 2D, entonces con todo mi esfuerzo salio esto: Helicóptero ●Había aprendido con el ejemplo del avión entonces decidí buscar una imagen de guía y al final terminó siendo así
9 Trabajo de Diseño OVNI ● A pesar de todo lo anterior, seguimos pensando que faltaba algo en el proyecto, entonces añadimos una especie de “easter egg” (Un famoso término utilizado en videojuegos, el cual representa una parte “oculta” del juego) en cuanto [lograbas aterrizar algunos vehículos, un vehículo especial, un OVNI aparecería. ● Realice varios modelos, probando diferentes combinaciones de colores, y finalmente optamos por el del centro.
10 Trabajo de Diseño Decoraciones y Pistas: ● Esta fue la parte la cual menos conflicto me trajo, ya que eran indispensable pero no tan complejos de realizar, hice muy pocos cambios sobre estos y se ven de esta forma.
11 Trabajo de Diseño Título y fondo Completo ● Para el fondo necesitabamos una especie de isla en la cual los aviones aterrizarían ya que esa era la idea original, entonces en conjunto de las decoraciones de la playa, quedó de esta forma. ● Para el título o la pantalla de inicio, se me ocurrió la idea de usar el emblema de los pilotos de aerolíneas y usando una de las naves del alien y el avión y el helicóptero, quedó de esta forma
12 Trabajo de Diseño Añadidos finales Tras haber finalizado el diseño “primordial” del juego, nos dimos cuenta que al colisionar los objetos debíamos darle una forma de “final” al juego, que permitiese al usuario ver donde habia perdido, por lo que separe las partes de los objetos, para crear la ilusión de que al colisionar se habían roto. Acompañado de la pantalla de “Game Over”, la cual, como su nombre indica, muestra que el juego ha finalizado.
13 Trabajo de Diseño Botones y Pantalla Highscores Los botones son una parte esencial del juego, ya que sin ellos, no le brindamos al usuario ninguna interacción para que este pueda hacer lo que quiera ( Jugar, Salir, Cambiar Idioma, Ver Instrucciones) Queríamos que el usuario juegue cada vez más para poder superarse poco a poco y competir con otros, es por eso que añadimos la pantalla de Highscores (Mejores Puntajes) para que este pueda monitorear su progreso y el de otros, destacando los puntajes más altos.
14 Programación - Kevin Daich Programas utilizados: ● Microsoft visual studio 2010 ● XNA ● Microsoft SAPI Decidí utilizar el SAPI de microsoft para realizar los comandos de voz debido a que era el más simple para programarlo y, también, era el programa que menos tiempo de respuesta tenía, lo cual es vital para un juego.
15 Programación Dentro de la programación del juego yo fui el encargado de encontrar, y programar el API para que el juego pueda ser controlado por voz, realizar y programar, la base de datos para los highscores.
16 Programación Proceso para programar el API El tener que trabajar con un programa que pasa voz a texto fue algo completamente nuevo para mi, por lo que tuve que utilizar la página de desarrolladores de microsoft (MSDN), en la cual encontré instrucciones de como utilizarla.
17 Programación Proceso para programar el API Lo primero que debía hacerse era armar la lista de palabras que iban a ser utilizadas y colocarlas dentro de un grammar. El siguiente ejemplo muestra cómo fue hecho el código para que el programa reconozca ciertos colores.
18 Programación Proceso para programar el API Tras finalizar el codigo, lo probe en mi computadora personal y funcionaba. Lo que hacía este código es mostrar en un messagebox lo que el usuario decia, como se ve en el video a continuación:
19 Programación Primeros problemas Al intentar probar el programa en las computadoras el colegio surgió el primer problema: En windows XP (sistema operativo que tienen las computadoras de escritorio, tanto de L1, como L3) el API no tiene el idioma español, lo que hacía imposible darle comandos en este idioma. Dado que para realizar el juego era necesario utilizar XNA, tampoco teníamos la posibilidad de utilizar windows 8, por lo que si íbamos a utilizar este API era necesario tener windows 7.
20 Intentos de soluciones La primera solución que se nos ocurrió fue utilizar las netbooks (ya que tienen windows 7), pero fue inútil debido a que no tienen suficiente capacidad para correr XNA. Tras este inconveniente, decidí investigar otras APIs, las cuales funcionasen con Windows XP. Al hacer esto encontré el API de google, en su momento pareció una solución, pero tras investigar más a fondo llegue a la conclusión de que no iba a ser útil debido a que habia una gran demora en el tiempo de respuesta del API ya que debía enviar el audio a una pagina de internet y recibirlo de vuelta, lo que lo hacia lento e inviable para un juego. Sumado a esto, el API solo funcionaba con conexión a internet, lo que lo haría más limitado todavía. Programación
21 Solución al problema Tras no poder encontrar una solución viable para nuestro problema, decidimos preguntar si habia alguna computadora con windows 7 que pudiésemos utilizar, la cual tuviese suficiente capacidad para que el juego funcione de manera óptima. Al hacer esto, se nos fue dada la XPS, una computadora con windows 7 (necesario para el API y para XNA) Más allá de este gran problema con los sistemas operativos, no tuve mayores inconvenientes a la hora de programar el API ya que la documentación e instrucciones que encontré en MSDN eran bastante claras.
22 Programación - Pablo Kvitca Programas utilizados: ● Microsoft Visual Studio 2010 ● Microsoft XNA Game Studio 4.0 Decidimos utilizar el framework XNA Game Studio debido a que permite crear juegos con gran facilidad y de forma dinámica.
23 Programación Recursos de Programación Utilizados (nuevos): ● Objetos ● Listas ● Constantes ● Enumeradores ● Clase Math
24 Listas Es una estructura de datos que consiste de una secuencia de nodos unidas por punteros. Arrays Listas Dinámicas; Busqueda de Objetos; En Visual Studio este tipo de datos ya esta creado y se utilizan mediante una serie de metodos: Add(); Find(); FindIndex(); Remove(); Clear(); entre otros
25 Enumeradores Son variables que sólo pueden tomar los valores establecidos previamente. Pueden ser utilizados en la estructura de control switch Ejemplo: public enum Tipo { Avion, Helicoptero, Militar, OVNI, nulo } Para usarlos: Tipo tipo = Tipo.Avión;
26 Constantes Espacio en memoria que almacena un dato que no puede ser alterado durante la ejecución el programa. Se utiliza cuando es necesario que un valor se el mismo en varios lugares del programa. public const float velocidad = 5.3f;
27 Pistas - Problema El aterrizaje de los Aviones y de los Aviones Militares consiste en llevarlos desde el principio de la pista hasta el final de la misma. La velocidad y el tamaño del objeto se reduce a medida que se acerca al final. Luego desaparece. Para esto es necesario saber la ubicación del final de la pista.
28 Pistas - Problema La posición de las pistas y su dirección es siempre aleatoria, por lo que se necesita calcular cada vez dónde está el final de cada pista.
29 Pistas - Solución (trigonometría) Ejemplo: if (this.direccion < 90) { float angle = Global.DegreesToRadians(this.direccion); float x = Math.Abs(((float)Math.Sin(angle) * this.length)); float y = Math.Abs(((float)Math.Cos(angle) * this.length)); this.end = new Vector2(this.position.X + x, this.position.Y - y); } else if (this.direccion < 180) { float angle = Global.DegreesToRadians(this.direccion - 90); float x = Math.Abs(((float)Math.Cos(angle) * this.length)); float y = Math.Abs(((float)Math.Sin(angle) * this.length)); this.end = new Vector2(this.position.X + x, this.position.Y + y); }..... 55º 145º215º 315º
30 Pistas - Solución Sen45º = Opuesto/116 Opuesto = sen45º 116 Cos45º = Adyacente/116 Adyacente = cos45º * 116 Las funciones de matemática ya existentes toman los ángulos en radianes, por esto se convierten los grados a esa unidad y viceversa. 1 rad = 57.2957795 116p 45º Adyacente Opuesto
31 Aeronaves - Movimiento El movimiento de las aeronaves también se calcula con trigonometría Hipotenusa = velocidad Opuesto = velocidad * senA A Adyacente = velocidad * cosA El lado opuesto es la diferencia en el eje X. El lado adyacente es la diferencia en el eje Y
32 Aeronaves - Reflexión Los objetos al llegar al borde de la pantalla se “reflejan”, es decir que salen con una dirección cambiada. /*Derecha*/ if (this.Position.X > graphicsD.Viewport.Width) { this.Position.X = graphicsD.Viewport.Width; if (this.direccion