stringtranslate.com

Programación de videojuegos

La programación de juegos , un subconjunto del desarrollo de juegos , es el desarrollo de software de videojuegos . La programación de juegos requiere una habilidad sustancial 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 red (el código resultante, además de sus características de rendimiento, se conoce comúnmente como el netcode del juego por jugadores y programadores por igual). En algunos géneros, por ejemplo, los juegos de lucha , a menudo se exige una programación de red avanzada, ya que los jugadores y los críticos consideran que el netcode y sus propiedades (por ejemplo, la latencia ) son 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 se dedican a programadores de juegos profesionales , existe una escena próspera de desarrolladores independientes que carecen de una relación con una empresa editorial.

Proceso de desarrollo

El desarrollo de juegos profesionales suele comenzar con un diseño de juego , que a su vez tiene varios orígenes posibles. En ocasiones, el proceso de desarrollo de un juego comienza sin un diseño claro en mente, sino como una serie de experimentos. Por ejemplo, el diseñador de juegos Will Wright comenzó el desarrollo de Los Sims haciendo que los programadores experimentaran con varias ideas.

Prototipado

A menudo, se requiere que los programadores produzcan prototipos de ideas y características de juego. Es posible que se realice una gran cantidad de creación de prototipos durante la preproducción, antes de que se complete el documento de diseño, y esto puede ayudar a determinar qué características especifica el diseño.

Los prototipos se desarrollan rápidamente y no se dedica mucho tiempo al diseño inicial. Suelen servir como prueba de concepto o para probar ideas. No se espera que funcionen a la perfección, sino que se desarrollan para probar ideas nuevas y, a veces, exóticas.

Diseño de juegos

Aunque el trabajo principal del programador no es desarrollar el diseño del juego, los programadores a menudo contribuyen al diseño, al igual que los artistas del juego . El diseñador del juego solicitará aportes tanto del productor como del responsable de arte y programación para obtener ideas y estrategias para el diseño del juego. A menudo, también contribuyen personas que no ocupan puestos de responsabilidad, como redactores y otros programadores y artistas.

Los programadores suelen seguir de cerca el documento de diseño del juego . A medida que avanza el desarrollo del juego, el documento de diseño cambia a medida que se descubren y explotan limitaciones de programación y nuevas capacidades.

Producción

Durante la producción, los programadores pueden crear una gran cantidad de código fuente para crear el juego descrito en el documento de diseño del juego. A lo largo del proceso, el documento de diseño se modifica para cumplir con las limitaciones o se amplía para aprovechar nuevas características. El documento de diseño es en gran medida un "documento vivo", cuya vida está determinada en gran medida por los horarios, el talento y la inventiva del programador.

Si bien muchos programadores tienen algo que decir sobre el contenido de un juego, la mayoría de los productores de juegos solicitan la opinión del programador principal sobre el estado del desarrollo de la programación de un juego. El programador principal es responsable de conocer el estado de todas las facetas de la programación del juego y de señalar las limitaciones. El programador principal también puede transmitir sugerencias de los programadores sobre las posibles características que les gustaría implementar.

Con el contenido visualmente rico de hoy, el programador a menudo debe interactuar con el personal de arte . Esto depende en gran medida 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, si es que lo hace, con el personal de arte. 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 ser para un propósito específico y pueden tener errores debido a las limitaciones de tiempo (el tiempo para el desarrollo de tales herramientas a menudo no está incluido en el cronograma de un juego) así como porque solo son para uso interno de todos modos. Muchas herramientas de juego se desarrollan en lenguajes RAD para un desarrollo más rápido y pueden descartarse después de la finalización del juego.

Pruebas

El proceso formal de pruebas de control de calidad , realizado por probadores de juegos profesionales , comienza bien entrada la fase de desarrollo del juego. Los títulos de alto presupuesto pueden comenzar a probarse con la primera versión alfa jugable , mientras que los juegos de bajo presupuesto y casuales pueden no entrar en la fase de pruebas hasta que esté listo un candidato de lanzamiento . La tarea de los programadores es corregir los errores y fallos a medida que los equipos de control de calidad los descubren. [3]

A punto de terminarse

Las tareas finales incluyen "pulir" el juego, por ejemplo, que los programadores arreglen errores ocasionales (desde menores hasta catastróficos) que puedan surgir durante las últimas fases de prueba .

Los desarrolladores de juegos 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 contiene todas las características del juego, pero puede tener algunos errores o contenido incompleto. Son pocos los juegos que tienen un período de prueba beta pública, por ejemplo, para medir la tolerancia al estrés de los servidores de juegos .

Cuando se considera que el juego está completo, se dice que ha alcanzado la fase "gold " y se envía al editor. Según las circunstancias, el editor puede someterlo a su propio control de calidad o puede comenzar a imprimir el juego a partir de la versión " gold master" .

Mantenimiento

Una vez que se lanza un juego, comienza la fase de mantenimiento del videojuego. Los programadores esperan un período para obtener tantos informes de errores como sea posible. Una vez que el desarrollador cree que ha obtenido suficientes comentarios, los programadores comienzan a trabajar en un parche . El parche puede tardar semanas o meses en desarrollarse, pero está destinado a corregir la mayoría de los errores y problemas del juego. Ocasionalmente, un parche puede incluir características o contenido adicionales o incluso puede alterar la jugabilidad.

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 se requiere programación en todas las fases de desarrollo, excepto en las primeras etapas del diseño del juego.

Herramientas

Al igual que cualquier otro software, los programas de desarrollo de juegos se generan a partir del código fuente hasta el programa real (llamado ejecutable ) mediante un compilador . El código fuente se puede desarrollar con casi cualquier editor de texto , pero muchos programadores de juegos profesionales utilizan un entorno de desarrollo integrado 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 juegos crean herramientas personalizadas desarrolladas para su uso interno. Algunas de ellas incluyen prototipos y herramientas de conversión de activos (programas que cambian el diseño gráfico, por ejemplo, al formato personalizado del juego). Algunas herramientas personalizadas pueden incluso entregarse con el juego, como un editor de niveles .

Las empresas de desarrollo de juegos suelen estar muy dispuestas a gastar miles de dólares para asegurarse de que sus programadores estén bien equipados con las mejores herramientas . Un programador bien equipado puede tener dos o tres sistemas de desarrollo y varios monitores dominando su oficina o cubículo.

Lenguajes de programación

Una vez que se ha acordado el diseño inicial del juego, se debe decidir el lenguaje de desarrollo. La elección depende de muchos factores, como la familiaridad con el lenguaje del personal de programación, 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. Los enlaces de lenguaje para bibliotecas populares como SDL y Allegro están muy extendidos, [4] [5] y la brecha 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 a través de 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 los videojuegos en línea. [11] Muchos juegos no están escritos en un lenguaje exclusivamente, y pueden combinar dos o más lenguajes; por ejemplo, Unity , un motor de juegos popular, tiene diferentes piezas 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 ensamblaje 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 diferentes SDK para sus consolas Wii U , Nintendo Switch , Xbox One y PlayStation 4 , respectivamente.

Los lenguajes de programación de alto nivel se utilizan cada vez más como extensiones integradas en el 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 juegos es qué API y bibliotecas utilizar, si es que hay alguna. Hoy en día, hay numerosas bibliotecas disponibles que se encargan de tareas clave de la programación de juegos. Algunas bibliotecas pueden manejar el procesamiento de sonido, la entrada y la representación de gráficos . Algunas incluso pueden manejar algunas tareas de IA como la búsqueda de rutas . Incluso hay motores de juegos completos que manejan la mayoría de las tareas de programación de juegos y solo requieren codificar la lógica del juego.

Las API y bibliotecas que se elijan dependerán en gran medida de la plataforma de destino. Por ejemplo, es posible que las bibliotecas para el desarrollo de PlayStation 2 no estén disponibles para Microsoft Windows y viceversa. Sin embargo, existen marcos de trabajo de juegos que permiten o facilitan el desarrollo multiplataforma, de modo que los programadores pueden programar 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 en 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 en 3D completos , incluso para juegos que son en gran parte de naturaleza 2D, como Civilization III . Sin embargo, los gráficos puramente en 2D han experimentado un renacimiento con los juegos independientes . [17]

Una plataforma de ordenador personal bien establecida es Microsoft Windows. Dado que venía preinstalada en casi el noventa por ciento de los PC vendidos, ahora tiene la mayor base de usuarios. [ cita requerida ] Las dos API de gráficos 3D más populares para Microsoft Windows son Direct3D y OpenGL . Los beneficios y las debilidades de cada API son objeto de acalorados debates entre los programadores de juegos de Windows .

Actualmente, la plataforma informática más popular es Google Android. Dado que viene preinstalado en casi el ochenta por ciento de los teléfonos inteligentes vendidos, Android tiene la segunda base de usuarios más grande y sigue aumentando. Android utiliza OpenGL ES y Vulkan (API) .

DirectX es una colección de API de juegos. Direct3D es la API 3D de DirectX. Direct3D está disponible de forma gratuita en Microsoft , al igual que el resto de las API de DirectX . Microsoft desarrolló DirectX para programadores de juegos y continúa agregando funciones a la API. La especificación de DirectX no está controlada por un comité de arbitraje abierto y Microsoft es libre de agregar, eliminar o cambiar funciones. Direct3D no es portátil; está diseñado específicamente para Microsoft Windows y ninguna otra plataforma (aunque se usa una forma de Direct3D en la Xbox de Microsoft , los teléfonos inteligentes Windows Phone 7.5 y los dispositivos móviles que ejecutan el sistema operativo Pocket PC ).

OpenGL es una especificación 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ático del juego. OpenGL es un estándar mantenido por la OpenGL Architecture Review Board (ARB). La ARB se reúne periódicamente para actualizar el estándar agregando soporte emergente para características 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 que se parecen a OpenGL. OpenGL a menudo se queda atrás en las actualizaciones de características debido a la falta de un equipo de desarrollo permanente y el requisito de que las implementaciones comiencen el desarrollo después de que se haya publicado el estándar. Los programadores que eligen usarlo pueden acceder a las últimas características 3D de algunos hardware, pero solo a través de extensiones no estandarizadas. La situación puede cambiar en el futuro, ya que la junta de revisión de la arquitectura OpenGL (ARB) ha pasado el control de la especificación al Grupo Khronos en un intento de contrarrestar el problema. [18]

Otras API

Para el desarrollo en Microsoft Windows, se pueden utilizar las distintas API de DirectX para la entrada, los efectos de sonido , la música, la conexión en red y la reproducción de vídeos. Hay muchas bibliotecas comerciales disponibles para realizar estas tareas, pero como DirectX está disponible de forma gratuita, es la más utilizada.

Para la programación de consolas, los fabricantes de consolas proporcionan herramientas para renderizar gráficos y realizar otras tareas de desarrollo de juegos. Los fabricantes de consolas también proporcionan sistemas de desarrollo completos, sin los cuales no se pueden comercializar ni desarrollar legalmente juegos 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 brindan beneficios especiales, como capacidades de desarrollo multiplataforma.

Estructura del juego

El componente central de cualquier juego, desde el punto de vista de la programación, es el bucle de juego . El bucle de juego permite que el juego se ejecute sin problemas independientemente de la intervención del usuario o de su ausencia.

La mayoría de los programas de software tradicionales responden a la entrada del usuario y no hacen nada sin ella. Por ejemplo, un procesador de textos formatea palabras y textos a medida que el usuario escribe. Si el usuario no escribe nada, el procesador de textos no hace nada. Algunas funciones pueden tardar mucho tiempo en completarse, pero todas se inician cuando el usuario le indica al programa que haga algo.

Por otro lado, los juegos deben seguir funcionando independientemente de la acción del usuario. El bucle de juego permite esto. Un bucle de juego muy simplificado, en pseudocódigo , podría verse así:

mientras (el usuario no sale) comprobar la entrada del usuario ejecutar IA mover enemigos resolver colisiones dibujar gráficos reproducir sonidosterminar mientras

El bucle se puede perfeccionar y modificar 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 funcionar dentro de las limitaciones del programador de procesos. Algunos juegos modernos ejecutan múltiples subprocesos de modo que, por ejemplo, el cálculo de la IA del personaje se puede desacoplar de la generación de movimiento suave dentro del juego. Esto tiene la desventaja de un aumento (ligero) de la sobrecarga, pero el juego puede ejecutarse de manera más fluida y eficiente en procesadores con hiperprocesamiento o multinúcleo y en plataformas multiprocesador. Con el enfoque de la industria informática en CPU con más núcleos que pueden ejecutar más subprocesos, esto se está volviendo cada vez más importante. Consolas como la Xbox 360 y la PlayStation 3 ya tienen más de un núcleo por procesador y ejecutan más de un subproceso 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 en consolas de juegos 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 de desarrollo de juegos profesionales. Sin embargo, Microsoft solía distribuir un marco de desarrollo de juegos, XNA , que se ejecuta tanto en Microsoft Windows como en Xbox 360. XNA se suspendió, pero otros proyectos como MonoGame y SharpDX están tratando de permitir el mismo acceso para la codificación de juegos. Últimamente, Android es la plataforma de aficionados más popular elegida por los desarrolladores móviles. [20] 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 ayudan con 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

  1. ^ Bouknight, W. Jack (septiembre de 1970). "Un procedimiento para la generación de presentaciones de gráficos informáticos tridimensionales de medio tono". Comunicaciones de la ACM . 13 (9): 527–536. doi : 10.1145/362736.362739 . ISSN  0001-0782. S2CID  15941472.
  2. ^ Millington, Ian (18 de marzo de 2019). IA para juegos. doi :10.1201/9781351053303. ISBN 9781351053303.S2CID186504701  .​
  3. ^ Schubotz, Moritz (12 de diciembre de 2016). "Cogex: un probador lógico para responder preguntas". Datasakura .
  4. ^ "Enlaces de lenguaje SDL" . Consultado el 8 de noviembre de 2015 .
  5. ^ "Allegro - Enlaces de idioma" . Consultado el 8 de noviembre de 2015 .
  6. ^ Corlan, Alexandru-Dan (2003). «Programming language benchmarks» (Puntos de referencia de lenguajes de programación) . Consultado el 8 de noviembre de 2015 .
  7. ^ Corlan, Alexandru-Dan (11 de junio de 2011). «Programming Languages ​​Benchmarks» (Puntos de referencia de lenguajes de programación) . Consultado el 8 de noviembre de 2015 .
  8. ^ ab Corlan, Alexandru-Dan (2011). "Programación de juegos en C y C++" . Consultado el 8 de noviembre de 2015 .
  9. ^ ab DeLoura, Mark (5 de marzo de 2009). "The Engine Survey: resultados generales" . Consultado el 8 de noviembre de 2015 .
  10. ^ Corlan, Alexandru-Dan. «LWJGL - Proyectos». Archivado desde el original el 10 de noviembre de 2015. Consultado el 8 de noviembre de 2015 .
  11. ^ 'No Bugs' Hare (30 de noviembre de 2015). "Capítulo V(b) de "Desarrollo e implementación de MMOG"".
  12. ^ Corlan, Alexandru (2011). "Programación de juegos en C y C++". Datasakura .
  13. ^ Hyde, Randy (1985). Uso del lenguaje ensamblador 6502 .
  14. ^ Helgason, David (2 de noviembre de 2012). "Desarrolladores de juegos, pongan en marcha sus motores Unity 3D". GamesBeat (Entrevista). Entrevista realizada por Dean Takahashi. VentureBeat . Consultado el 13 de julio de 2014 .
  15. ^ "[Phoronix] Por qué Sony está usando LLVM/Clang en PlayStation 4". Phoronix.com . Consultado el 17 de noviembre de 2014 .
  16. ^ Corlan, Alexandru-Dan (24 de marzo de 2015). «Lua: usos». Archivado desde el original el 24 de julio de 2019. Consultado el 8 de noviembre de 2015 .
  17. ^ "¿Por qué la mayoría de los juegos independientes son en 2D en lugar de 3D?". Rampant Games. 2013-05-16 . Consultado el 2017-01-01 .
  18. ^ "Khronos coloca las pruebas de conformidad con OpenGL y OpenGL ES en código abierto". Nota de prensa del grupo Khronos. Archivado desde el original el 3 de mayo de 2008.
  19. ^ Stutz, Michael (2001). Programación de juegos para Linux, Capítulo 1. Linux Journal Press. ISBN 1-886411-48-4.
  20. ^ "Informe: el 79% de los desarrolladores móviles prefieren desarrollar para Android". 29 de agosto de 2016.

Enlaces externos

Wikis