La programación de videojuegos , un subconjunto del desarrollo de videojuegos , es el desarrollo de software para videojuegos . La programación de videojuegos requiere una gran habilidad en ingeniería de software y programación informática en un lenguaje determinado , así como especialización en una o más de las siguientes áreas: simulación , gráficos por computadora , inteligencia artificial , física , programación de audio y entrada . Para los juegos multijugador , se requiere conocimiento de programación de redes (el código resultante, además de sus características de rendimiento, es comúnmente conocido como netcode del juego tanto por jugadores como por programadores). En algunos géneros, por ejemplo, los juegos de lucha , a menudo se exige programación de redes avanzada, ya que el netcode y sus propiedades (por ejemplo, la latencia ) son considerados por jugadores y críticos como algunas de las métricas más importantes de la calidad del juego. Para los juegos multijugador masivos en línea (MMOG), se requieren conocimientos aún mayores de programación de bases de datos y programación de redes avanzada. Aunque a menudo la realizan programadores de videojuegos profesionales , existe una próspera comunidad de desarrolladores independientes que no tienen ninguna relación con una editorial.
Proceso de desarrollo
El desarrollo profesional de videojuegos suele comenzar con un diseño , que a su vez tiene varios orígenes posibles. En ocasiones, el proceso de desarrollo comienza sin un diseño claro en mente, sino como una serie de experimentos. Por ejemplo, el diseñador de videojuegos Will Wright comenzó el desarrollo de Los Sims haciendo que los programadores experimentaran con varias ideas.
Prototipado
A menudo, se les pide a los programadores que creen prototipos de ideas y características de juego. Gran parte del prototipado puede realizarse durante la preproducción, antes de que se complete el documento de diseño, y puede ayudar a determinar qué características especifica el diseño.
Los prototipos se desarrollan rápidamente, con muy poco tiempo para el diseño inicial, y sirven principalmente como prueba de concepto o para evaluar ideas. No se espera que funcionen a la perfección, sino que se desarrollan para probar ideas nuevas, a veces poco convencionales.
Diseño de juegos
Aunque la principal función del programador no es desarrollar el diseño del juego, los programadores suelen contribuir a él, al igual que los artistas . El diseñador del juego solicitará ideas y estrategias tanto al productor como al responsable de arte y programación para el diseño. Con frecuencia, también contribuyen personas en puestos no directivos, como redactores y otros programadores y artistas.
Los programadores suelen seguir al pie de la letra el documento de diseño del juego . A medida que avanza el desarrollo del juego, el documento de diseño cambia conforme se descubren y aprovechan las limitaciones de programación y las nuevas capacidades.
Producción
Durante la producción, los programadores pueden generar una gran cantidad de código fuente para crear el juego descrito en el documento de diseño. A lo largo del proceso, dicho documento se modifica para ajustarse a las limitaciones o se amplía para incorporar nuevas funcionalidades. El documento de diseño es, en gran medida, un documento vivo, cuya evolución depende en gran medida de la disponibilidad, el talento y la capacidad de adaptación de los programadores.
Si bien muchos programadores tienen cierta influencia en el contenido de un juego, la mayoría de los productores solicitan la opinión del programador principal sobre el estado del desarrollo. El programador principal es responsable de conocer el estado de todos los aspectos de la programación del juego y de señalar las limitaciones. También puede transmitir las sugerencias de los programadores sobre posibles funciones que les gustaría implementar.
Con el contenido visualmente rico de hoy en día, el programador a menudo debe interactuar con el equipo artístico . Esto depende mucho del rol del programador, por supuesto. Por ejemplo, un programador de gráficos 3D puede necesitar trabajar codo a codo con los modeladores 3D del juego discutiendo estrategias y consideraciones de diseño, mientras que un programador de IA puede necesitar interactuar muy poco, o nada, con el equipo artístico. Para ayudar a los artistas y diseñadores de niveles con sus tareas, los programadores pueden ofrecerse como voluntarios o ser llamados para desarrollar herramientas y utilidades . [ 1 ] [ 2 ] Muchas de estas pueden tener un propósito específico y pueden contener errores debido a las limitaciones de tiempo (el tiempo para el desarrollo de dichas herramientas a menudo no está incluido en el cronograma de un juego), así como porque de todos modos solo son para uso interno. Muchas herramientas de juego se desarrollan en lenguajes RAD para un desarrollo más rápido y pueden descartarse una vez finalizado el juego.
Pruebas
El proceso formal de pruebas de control de calidad , realizado por probadores de juegos profesionales , comienza bastante avanzado el desarrollo del juego. Los títulos de alto presupuesto pueden comenzar las pruebas con la primera versión alfa jugable , mientras que los juegos de bajo presupuesto y casuales podrían no entrar en pruebas hasta que esté lista una versión candidata para su lanzamiento . La tarea de los programadores es corregir los errores y fallos a medida que los equipos de control de calidad los descubren. [ 3 ]
Casi terminado
Las tareas finales incluyen "pulir" el juego, como por ejemplo que los programadores corrijan errores ocasionales, desde menores hasta catastróficos, que puedan surgir durante las últimas fases de las pruebas .
Los desarrolladores de videojuegos pueden tener un período de prueba beta , pero la definición de este varía de un desarrollador a otro. A menudo, una versión beta incluye todas las características del juego, pero puede contener algunos errores o contenido incompleto. Pocos juegos tienen un período de beta pública, por ejemplo, para medir la resistencia de los servidores .
Cuando el juego se considera terminado, se dice que ha alcanzado la fase de producción finalizada y se envía al editor. Según las circunstancias, el editor puede someterlo a su propio control de calidad o comenzar a fabricar el juego a partir del máster de producción finalizado .
Mantenimiento
Una vez lanzado el juego, comienza la fase de mantenimiento. Los programadores esperan un tiempo para recopilar la mayor cantidad posible de informes de errores. Cuando el desarrollador considera que ha obtenido suficiente retroalimentación, los programadores comienzan a trabajar en un parche . El desarrollo del parche puede llevar semanas o meses, pero su objetivo es corregir la mayoría de los errores y problemas del juego. En ocasiones, un parche puede incluir funciones o contenido adicionales, o incluso modificar la mecánica de juego.
Duración
La mayoría de los juegos modernos tardan entre uno y tres años en completarse. La duración del desarrollo depende de varios factores, pero la programación es necesaria en todas las fases del desarrollo, excepto en las primeras etapas del diseño del juego.
Herramientas
Al igual que otros programas, los programas de desarrollo de videojuegos se generan a partir del código fuente (denominado ejecutable ) mediante un compilador . El código fuente se puede desarrollar con casi cualquier editor de texto , pero muchos programadores profesionales de videojuegos utilizan un entorno de desarrollo integrado (IDE) completo . Una vez más, el IDE que se utilice depende de la plataforma de destino.
Además de los IDE, muchas empresas de desarrollo de videojuegos crean herramientas personalizadas para uso interno. Algunas de estas herramientas incluyen prototipos y herramientas de conversión de recursos (programas que transforman, por ejemplo, las ilustraciones al formato específico del juego). Algunas herramientas personalizadas incluso se entregan junto con el juego, como un editor de niveles .
Las empresas de desarrollo de videojuegos suelen estar dispuestas a invertir miles de dólares para asegurarse de que sus programadores cuenten con las mejores herramientas . Un programador bien equipado puede tener dos o tres sistemas de desarrollo y varios monitores que ocupan gran parte de su oficina o cubículo.
Lenguajes de programación
Una vez acordado el diseño inicial del juego, se debe decidir el lenguaje de programación. La elección depende de muchos factores, como la familiaridad del equipo de programación con el lenguaje, las plataformas de destino, los requisitos de velocidad de ejecución y el lenguaje de los motores de juego , las API o las bibliotecas que se utilicen.
Para las computadoras personales , el lenguaje seleccionado puede ser poco más que una cuestión de preferencia. Las vinculaciones de lenguaje para bibliotecas populares como SDL y Allegro están muy extendidas, [ 4 ] [ 5 ] y la diferencia de rendimiento entre el código idiomático escrito en lenguajes compilados modernos es insignificante. [ 6 ] [ 7 ] Los lenguajes más populares suelen ser procedimentales u orientados a objetos e implementados mediante compiladores ; por ejemplo, C , [ 8 ] C++ , [ 8 ] [ 9 ] y Java . [ 10 ] Sin embargo, los desarrolladores pueden tener en cuenta características específicas del dominio , como la interfaz con el sistema operativo y la resistencia a la ingeniería inversa para videojuegos en línea. [ 11 ] Muchos juegos no están escritos exclusivamente en un lenguaje, y pueden combinar dos o más lenguajes; por ejemplo, Unity , un motor de juegos popular, tiene diferentes partes escritas en C, C++ y C# . [ 12 ]
Para las consolas , el soporte de la plataforma de destino suele ser el factor más considerado. En el pasado, los videojuegos para consolas se escribían casi exclusivamente en lenguaje ensamblador debido a los recursos limitados en términos de almacenamiento y velocidad de procesamiento. [ 13 ] Sin embargo, a medida que la tecnología ha avanzado, también lo han hecho las opciones para el desarrollo de juegos en consolas. Nintendo , [ 14 ] Microsoft y Sony [ 15 ] tienen SDK diferentes para sus consolas Nintendo Switch , Xbox One y PlayStation 4 , respectivamente.
Los lenguajes de scripting de alto nivel se utilizan cada vez más como extensiones integradas del juego subyacente escrito en un lenguaje de programación compilado, para la comodidad tanto del desarrollador original como de cualquiera que desee modificar el juego. Lua es una opción muy popular, ya que su API está escrita en ANSI C y el lenguaje está diseñado para integrarse en otras aplicaciones. [ 9 ] [ 16 ] Muchos desarrolladores han creado lenguajes personalizados para sus juegos, como QuakeC de id Software y UnrealScript de Epic Games .
API y bibliotecas
Una decisión clave en la programación de videojuegos es qué API y bibliotecas utilizar. Hoy en día, existen numerosas bibliotecas que se encargan de las tareas principales de la programación de videojuegos. Algunas bibliotecas pueden gestionar el procesamiento de sonido, la entrada de datos y la renderización de gráficos . Otras incluso pueden gestionar tareas de IA, como la búsqueda de rutas . Incluso existen motores de juego completos que se encargan de la mayoría de las tareas de programación y solo requieren programar la lógica del juego.
La elección de las API y bibliotecas depende en gran medida de la plataforma de destino. Por ejemplo, las bibliotecas para el desarrollo de PlayStation 2 pueden no estar disponibles para Microsoft Windows , y viceversa. Sin embargo, existen frameworks de juegos que permiten o facilitan el desarrollo multiplataforma, de modo que los programadores pueden crear un juego en un solo lenguaje y ejecutarlo en varias plataformas, como Wii , PlayStation 3, Xbox 360 , PSP y Microsoft Windows.
API gráficas
Hoy en día, los gráficos son una característica clave de la mayoría de los juegos. Si bien los gráficos 2D solían ser la norma para los juegos lanzados hasta mediados de la década de 1990, la mayoría de los juegos AAA ahora cuentan con gráficos 3D completos , incluso aquellos que son predominantemente 2D, como Civilization III . Sin embargo, los gráficos puramente 2D han experimentado un renacimiento con los juegos independientes . [ 17 ]
Microsoft Windows es una plataforma informática personal consolidada . Al venir preinstalada en casi el noventa por ciento de los ordenadores vendidos, cuenta actualmente con la mayor base de usuarios. Las dos API de gráficos 3D más populares para Microsoft Windows son Direct3D y OpenGL . Las ventajas y desventajas de cada API son objeto de intensos debates entre los programadores de videojuegos para Windows .
Actualmente, la plataforma informática más popular es Google Android. Al venir preinstalada en casi el ochenta por ciento de los smartphones vendidos, Android cuenta con la segunda mayor base de usuarios, y sigue creciendo. Android utiliza OpenGL ES y Vulkan (API) .
DirectX es un conjunto de API para juegos. Direct3D es la API 3D de DirectX. Direct3D está disponible gratuitamente en Microsoft , al igual que el resto de las API de DirectX . Microsoft desarrolló DirectX para programadores de juegos y continúa añadiendo funciones a la API. La especificación de DirectX no está controlada por un comité de arbitraje abierto, por lo que Microsoft tiene libertad para añadir, eliminar o modificar funciones. Direct3D no es portable; está diseñado específicamente para Microsoft Windows y ninguna otra plataforma (aunque una versión de Direct3D se utiliza en la Xbox de Microsoft , los teléfonos inteligentes con Windows Phone 7.5 y los dispositivos móviles que ejecutan el sistema operativo Pocket PC ).
OpenGL es una especificación de API portable. El código escrito con OpenGL se puede portar fácilmente entre plataformas con una implementación compatible. Por ejemplo, Quake II , que utiliza OpenGL, fue portado de Windows a Linux por un fan del juego. OpenGL es un estándar mantenido por la Junta de Revisión de Arquitectura de OpenGL (ARB). La ARB se reúne periódicamente para actualizar el estándar añadiendo soporte para las características emergentes del hardware 3D más reciente. Además, las herramientas de desarrollo proporcionadas por los fabricantes de algunas consolas de videojuegos (como Nintendo GameCube, Nintendo DS y PSP) utilizan API gráficas similares a OpenGL. OpenGL suele estar desfasado en las actualizaciones de características debido a la falta de un equipo de desarrollo permanente y al requisito de que las implementaciones comiencen su desarrollo después de la publicación del estándar. Los programadores que optan por usarlo pueden acceder a las características 3D más recientes de algunos hardware, pero solo a través de extensiones no estandarizadas. La situación podría cambiar en el futuro, ya que la Junta de Revisión de Arquitectura de OpenGL (ARB) ha cedido el control de la especificación al Grupo Khronos en un intento por solucionar el problema. [ 18 ]
Otras API
Para el desarrollo en Microsoft Windows, se pueden usar las diversas API de DirectX para la entrada de datos, efectos de sonido , música, redes y reproducción de vídeo. Existen muchas bibliotecas comerciales para realizar estas tareas, pero dado que DirectX es gratuito, es la más utilizada.
Para la programación de consolas, los fabricantes proporcionan herramientas para la renderización de gráficos y otras tareas del desarrollo de videojuegos. También ofrecen sistemas de desarrollo completos, sin los cuales no se puede comercializar ni desarrollar juegos legalmente para su sistema. Los desarrolladores externos también venden kits de herramientas o bibliotecas que facilitan el desarrollo de una o más de estas tareas o que proporcionan ventajas especiales, como la capacidad de desarrollo multiplataforma.
Estructura del juego
Desde el punto de vista de la programación, el componente central de cualquier juego es el bucle principal . Este bucle permite que el juego funcione sin problemas, independientemente de la interacción del usuario o de su ausencia.
La mayoría de los programas informáticos tradicionales responden a la entrada del usuario y no hacen nada sin ella. Por ejemplo, un procesador de textos da formato a las palabras y al texto a medida que el usuario escribe. Si el usuario no escribe nada, el procesador de textos no hace nada. Algunas funciones pueden tardar en completarse, pero todas se inician cuando el usuario le indica al programa que realice una acción.
Los juegos, por otro lado, deben seguir funcionando independientemente de la entrada del usuario. El bucle del juego permite esto. Un bucle de juego muy simplificado, en pseudocódigo , podría verse así :
mientras (el usuario no salga) comprobar la entrada del usuario ejecutar IA mover enemigos resolver colisiones dibujar gráficos reproducir sonidos fin mientras
El bucle puede refinarse y modificarse a medida que avanza el desarrollo del juego, pero la mayoría de los juegos se basan en esta idea básica. [ 19 ]
Los bucles de juego difieren según la plataforma para la que se desarrollan. Por ejemplo, los juegos escritos para DOS y muchas consolas pueden dominar y explotar los recursos de procesamiento disponibles sin restricciones. Sin embargo, los juegos para un sistema operativo de PC moderno como Microsoft Windows deben operar dentro de las limitaciones del planificador de procesos. Algunos juegos modernos ejecutan múltiples hilos para que, por ejemplo, el cálculo de la IA de los personajes pueda desacoplarse de la generación de movimiento fluido dentro del juego. Esto tiene la desventaja de un ligero aumento de la sobrecarga, pero el juego puede ejecutarse de forma más fluida y eficiente en procesadores con hyper-threading o multinúcleo y en plataformas multiprocesador. Con el enfoque de la industria informática en las CPU con más núcleos que pueden ejecutar más hilos, esto está adquiriendo cada vez más importancia. Consolas como Xbox 360 y PlayStation 3 ya tienen más de un núcleo por procesador y ejecutan más de un hilo por núcleo.
Aficionados
Las únicas plataformas ampliamente disponibles para que los aficionados programen son los sistemas operativos de consumo , como Android, iOS, Windows, Mac, Linux, etc. Esto se debe a que el desarrollo para consolas de videojuegos requiere sistemas de desarrollo especiales que cuestan miles de dólares. A menudo, estos deben obtenerse del fabricante de la consola y solo se venden o alquilan a estudios profesionales de desarrollo de videojuegos. Sin embargo, Microsoft solía distribuir un entorno de desarrollo de videojuegos, XNA , que funcionaba tanto en Microsoft Windows como en Xbox 360. XNA se descontinuó, pero otros proyectos como MonoGame y SharpDX intentan ofrecer el mismo acceso para la programación de videojuegos. Algunos aficionados también desarrollan juegos caseros , especialmente para sistemas portátiles o consolas modificadas .
Algunos estudiantes de ingeniería de software programan juegos como ejercicios para aprender un lenguaje de programación o un sistema operativo .
Algunos aficionados pueden utilizar paquetes de software que facilitan el desarrollo de juegos, como Adobe Animate , Unity , Android Studio , pygame , Adventure Game Studio , Roblox Studio , GameMaker Studio , Godot , Unreal Engine , Pixel Game Maker MV o Construct .
Véase también
Referencias
- ↑ Bouknight, W. Jack (septiembre de 1970). "Un procedimiento para la generación de presentaciones de gráficos por computadora tridimensionales en semitono" . Communications of the ACM . 13 (9): 527– 536. doi : 10.1145/362736.362739 . ISSN 0001-0782 . S2CID 15941472 .
- ↑ Millington, Ian (18 de marzo de 2019). IA para juegos . doi : 10.1201/9781351053303 . ISBN 9781351053303. S2CID 186504701 .
- ↑ Schubotz, Moritz (12 de diciembre de 2016). "Cogex: Un demostrador lógico para responder preguntas" . Datasakura .
- ↑ "Enlaces del lenguaje SDL" . Consultado el 8 de noviembre de 2015 .
- ↑ "Allegro - Enlaces de lenguaje" . Consultado el 8 de noviembre de 2015 .
- ↑ Corlan, Alexandru-Dan (2003). "Pruebas comparativas de lenguajes de programación" . Recuperado el 8 de noviembre de 2015 .
- ↑ Corlan, Alexandru-Dan (11 de junio de 2011). "Puntos de referencia de lenguajes de programación" . Recuperado el 8 de noviembre de 2015 .
- 1 2 "Programación de juegos en C y C++" . 2011. Consultado el 8 de noviembre de 2015 .
- 1 2 DeLoura, Mark (2009-03-05). "The Engine Survey: General results" . Recuperado el 2015-11-08 .
- ↑ "LWJGL - Proyectos" . Archivado del original el 10/11/2015 . Consultado el 08/11/2015 .
- ↑ 'Sin errores' Hare (30 de noviembre de 2015). "Capítulo V(b) de "Desarrollo y despliegue de MMOG"" .
- ↑ "Programación de juegos en C y C++" . Datasakura . 2011.
- ↑ Hyde, Randy (1985). Uso del lenguaje ensamblador 6502 .
- ↑ Helgason, David (2 de noviembre de 2012). "Desarrolladores de videojuegos, pongan en marcha sus motores Unity 3D" . GamesBeat (Entrevista). Entrevistado por Dean Takahashi. VentureBeat . Archivado del original el 14 de julio de 2014. Recuperado el 13 de julio de 2014 .
- ↑ " [ Phoronix ] Por qué Sony está usando LLVM/Clang en la PlayStation 4" . Phoronix.com . Consultado el 17 de noviembre de 2014 .
- ↑ "Lua: Usos" . 24 de marzo de 2015. Archivado del original el 24 de julio de 2019. Consultado el 8 de noviembre de 2015 .
- ↑ "¿Por qué la mayoría de los juegos independientes son 2D en lugar de 3D?" . Rampant Games. 16 de mayo de 2013. Consultado el 1 de enero de 2017 .
- ↑ "Khronos incorpora las pruebas de conformidad de OpenGL y OpenGL ES al código abierto" . Comunicado de prensa del Grupo Khronos. Archivado del original el 3 de mayo de 2008.
- ↑ Stutz, Michael (2001). Programación de juegos para Linux, Capítulo 1. Linux Journal Press. ISBN 1-886411-48-4.
Enlaces externos
- GameDev.net , un recurso líder para el desarrollo de videojuegos.
- Asociación Internacional de Desarrolladores de Videojuegos (IGDA)
- Desarrollo de videojuegos para ingenieros de software , un curso intensivo de 5 días ofrecido por el MIT con la orientación de los mentores del galardonado MIT Game Lab.
- La experiencia de un ex programador de videojuegos en la industria del desarrollo de videojuegos.
- Consejos de Tom Sloper, veterano de la industria de los videojuegos, sobre programación de videojuegos.
Wikis
- Wiki de desarrollo de juegos 2D
- Wiki de desarrollo de juegos - GDwiki
- desarrollo de videojuegos