Creación De Un Motor De Videojuegos 2D Multiplataforma De Código Abierto
Total Page:16
File Type:pdf, Size:1020Kb
Trabajo Fin de Grado JAGE (JustAnotherGameEngine): Creación de un motor de videojuegos 2D mu ti! ata"orma de código abierto Autor#es Rub%n Tomás Gracia Director#es Eduardo 'ena (ieto Grado en )ngenier*a )nformática Escue a de )ngenier*a + Ar,uitectura 2-./ Repositorio de la Universidad de Zaragoza – Zaguan http://zaguan.unizar.es Para mi abuelo Juan y mi tío abuelo Mateo, por ser quienes más influyeron en mi interés por los videojuegos Agradecimientos A mi fami ia, !or nunca rechazar mi afición !or os videojuegos2 A mi novia, !or apo+arme siem!re + a+udarme a seguir trabajando. A mis amigos, !or a+udarme en as !ruebas de !royecto. JAGE (JustAnotherGameEngine): !reación de un motor de videojuegos $% multiplataforma de código abierto Resumen 3oy en d*a os videojuegos est&n más !resentes en a vida diaria de o ,ue nunca han estado. 4on mucho más accesib es !ara a gente con !ocos medios0 Asimismo, a e5tensión de a )nformática ha !ropiciado e hecho de ,ue mucha gente ha+a !odido adoptar a !rogramación como hobb+2 Esto ha desencadenado un estal ido en e mundo de os videojuegos0 de gente ,ue !rograma sus !ropios videojuegos con bajo (o ning6n) !resu!uesto !ara uego !ub icar os en )nternet: conocidos como juegos indie0 est&n ahora en su mejor momento. Todo esto ha evado a cabo una retroalimentación !or a ,ue cada ve1 os videojuegos están más ace!tados0 + m&s gente ,uiere hacer su !ropio juego. 'uchas !ersonas no ,uiere un videojuego comercial0 solo e5! otar su ado art*stico en un mundo ,ue disfrutan0 + !or e o cada ve1 han surgido m&s herramientas ,ue !ermiten hacer juegos con un esfuer1o reducido: os motores2 En este !royecto se im! ementa, usando Java, desde cero + en código abierto, un motor de videojuegos 2D con a " e5ibi idad como m&5ima !rioridad2 Para demostrar dicha " e5ibi idad0 se han creado tres juegos com! etamente distintos con % 0 ,ue han !ermitido e5! orar todas as !osibi idades ,ue da e motor0 as* como servir de retroalimentación !ara e motor + saber ,u% era necesario cambiar en %ste !ara cum! ir os objetivos !ropuestos2 El !ro+ecto !retende ser una a+uda a todas as !ersonas ,ue ,uieren !robar e desarrol o de videojuegos0 tanto !ara aque as ,ue no saben ni ,uieren saber nada de !rogramación0 como !ara as ,ue ,uieren desarrol ar un motor !ropio, !uesto ,ue e !royecto se ha desarrol ado bajo una icencia de código abierto. IV Índice de contenido 1. INTRODUCCIÓN.........................................................................................................1 1.1. Objetivos................................................................................................................1 1.2. Metodología y herramientas..................................................................................1 1.3. Contenido de la memoria.......................................................................................2 1.4. Licencia usada........................................................................................................2 2. TECNOLOGÍA UTILIZADA.......................................................................................3 2.1. Por qué Java...........................................................................................................3 2.2. Por qué Gradle.......................................................................................................4 3. IMPLEMENTACIÓN DE LA BASE DEL MOTOR...................................................6 3.1. Requisitos funcionales...........................................................................................6 3.2. Extensibilidad del motor........................................................................................7 3.3. Base del motor.......................................................................................................9 4. IMPLEMENTACIÓN DE LAS EXTENSIONES......................................................11 4.1. Por qué un RPG, Tetris y Scramble.....................................................................11 4.2. Extensión RPG: JAGEmodules...........................................................................11 4.2.1. Patrón Composite.........................................................................................12 4.2.2. Gestor de recursos........................................................................................13 4.2.3. Datos de la partida........................................................................................13 4.2.4. Las implementaciones de GameState: modos de juego...............................14 4.3. Extensión Tetris: JAGEtetrisplugin.....................................................................16 4.4. Extensión Scramble: JAGEscrambleplugin.........................................................17 5. CONCLUSIONES.......................................................................................................19 5.1. Cronograma..........................................................................................................19 5.2. El futuro del proyecto..........................................................................................19 5.3. Opinión personal..................................................................................................20 Bibliografía......................................................................................................................21 ANEXO I: Descarga, compilación y ejecución...............................................................22 ANEXO II: Manual de usuario de RPG..........................................................................25 ANEXO III: Manual de usuario Tetris............................................................................30 ANEXO IV: Manual de usuario Scramble......................................................................32 V 1. INTRODUCCIÓN 8n motor de videojuegos es un !rograma ,ue se encarga de as tareas m&s com! icadas + re!etitivas, como !or ejem! o e renderi1ado de gráficos, + os c& cu os "*sicos2 A !artir de e o, e usuario !uede sim! emente dedicarse a definir as escenas ,ue uego e motor se encargará de hacer funcionar + de mostrar !or !antal a. 4in embargo, a ma+or*a de motores ,ue e5isten actualmente0 o son demasiado com! ejos !ara un juego 2D, demasiado senci os0 o demasiado caros2 'otores como 8nreal Engine. + Cr+engine2 son motores com! etamente enfocados a juegos 9D + tienen un reducido soporte 2D. 8nit+ Engine9 cada ve1 es mejor !ara os juegos 2D, sin embargo, sigue siendo más enfocado al 9D + es demasiado general !ara juegos en 2D. Game 'aker; es un buen motor 2D0 sin embargo su !recio !ara !oder an1ar un juego en <inu5 +a asciende a os =.;>2>>0 + su enguaje de scri!ting es bastante imitado. Y $PG 'aker@, un motor !ara videojuegos 2D $PG con e ,ue se !ueden hacer juegos decentes sin saber !rogramar nada0 + ,ue sabiendo !rogramar !uedes modificar o como ,uieras0 debido a ,ue todo e motor est& escrito en $ub+A.2B0 tiene muchas versiones distintas0 incom!atib es entre s*0 a un !recio demasiado e evado !ara alguien ,ue crea videojuegos sim! emente como hobb+2 Con e mercado de motores ,ue hay actualmente0 este !royecto ,uer*a !roponer una alternativa totalmente gratuita !ara iniciar a aque as !ersonas ,ue crean videojuegos como disfrute !ersonal0 !ero a a ve1 !ermitiendo crear juegos !erfectamente comerciales2 1.1. Objetivos El objetivo es desarrol ar un motor de videojuegos 2D com! etamente gratuito, ,ue !ermita a os usuarios crear videojuegos sin tener !or ,u% saber !rogramar0 ,ue funcione tanto en Cindows como en <inu50 + ,ue !ermita a fáci creación + distribución de e5tensiones de motor !ara !ermitir a creación de juegos com! etamente diferentes con e mismo motor2 1.2. Metodología y herramientas Este !royecto se ha evado a cabo en Java .2E0 usando a ibrer*a 4 ic:2D /0 ,ue faci ita e renderi1ado !or !antal a encapsu ando as amadas a F!enG<A>B en una A7) simi ar a a de Java2D[@B2 Para e iminar a necesidad de ,ue e usuario bus,ue + en ace as ibrerias al !royecto, as* como de crear os archivos ejecutab es finales0 se ha usado Grad eE como gestor de de!endencias + de com!i ación2 1 Unreal Engine. [Citado el 19/06/2016] https://www.unrealengine.com 2 CryEngine. [Citado el 19/06/2016] https://www.cryengine.com 3 Unity 3D. [Citado el 19/06/2016] https://unity3d.com 4 Game Maker. [Citado el 19/06/2016] http://www.yoyogames.com/gamemaker 5 RPG Maker. [Citado el 19/06/2016] http://www.rpgmakerweb.com 6 Slick2D. [Citado el 19/06/2016] http://slick.ninjacave.com 7 Gradle. [Citado el 19/06/2016] http://gradle.org 1 Por 6 timo, se ha uti i1ado Git3ubG como ! ataforma de gestión de configuraciones + de distribución0 debido a su gran uso en e softDare de código abierto !or sus !osibi idades de !artici!ación !6b ica en dichos !royectos0 as* como de su uso como copia de seguridad en caso de ,ue ha+a alg6n !rob ema con e com!utador usado. 1.3. Contenido de la memoria Esta memoria se divide en tres !artes c aramente diferenciadas2 Primero, se detal ar& e !rogreso de an& isis de entorno de os motores + enguajes de !rogramación ,ue con evó a a e ección de Java como enguaje de desarrol o, + de as in" uencias ,ue ha tenido e !royecto de otros motores + videojuegos2 4egundo, se detal ará cómo se ha im! ementado e motor + sus caracter*sticas m&s im!ortantes ,ue han !ermitido cum! ir os objetivos !ropuestos. Tercero, se e5! icará cómo se ha e5tendido e motor !ara os distintos juegos ,ue se han creado !ara demostrar todas sus capacidades2 1.4. Licencia usada Para este !royecto, se ha optado !or una icencia ()*+0 debido a ,ue