Programación de videojuegos

AjustarCompartirImprimirCitar

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 de computadoras en un idioma 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 la programación de redes (el código resultante, además de sus características de rendimiento, se conoce comúnmente como el código de red del juego tanto por jugadores como por programadores). 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 código de red y sus propiedades (por ejemplo, la latencia) son algunas de las métricas más importantes de la calidad del juego. Para los juegos en línea multijugador masivos (MMOG), se requieren incluso más conocimientos de programación de bases de datos y programación avanzada de redes. Aunque a menudo participan programadores de juegos profesionales, algunos pueden programar juegos como un pasatiempo, generando una próspera escena de los llamados desarrolladores de juegos independientes (es decir, desarrolladores de juegos independientes; típicamente definidos por su falta de relación con una editorial).

Proceso de desarrollo

El desarrollo de juegos profesionales generalmente comienza con un diseño de juego, que a su vez tiene varios orígenes posibles. Ocasionalmente, el proceso de desarrollo del 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.

Prototipos

A menudo se requiere que los programadores produzcan prototipos de ideas y características de juego. Una gran cantidad de creación de prototipos puede tener lugar 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, en su mayoría, actúan 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, a veces exóticas.

Diseño de juego

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 líder de arte y programación para obtener ideas y estrategias para el diseño del juego. A menudo, las personas que no ocupan puestos de liderazgo también contribuyen, como redactores publicitarios 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 las limitaciones de programación y las 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. En el camino, el documento de diseño se modifica para cumplir con las limitaciones o se expande para explotar nuevas características. El documento de diseño es en gran medida un "documento vivo", gran parte de cuya vida está dictada por los horarios, el talento y el ingenio 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 líder 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 posibles funciones 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 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, 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. Muchos de estos pueden tener un propósito específico y pueden tener errores debido a limitaciones de tiempo (el tiempo para el desarrollo de tales herramientas a menudo no se incluye en el cronograma de un juego), así como porque de todos modos son solo para uso interno.

Pruebas

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

A punto de concluir

Las tareas finales incluyen "pulir" el juego, como que los programadores corrijan errores ocasionales, desde menores hasta catastróficos, que pueden 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 funciones del juego, pero puede tener algunos errores o contenido incompleto. Pocos juegos tienen un período de 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 "se ha vuelto dorado" y se envía al editor. Dependiendo de las circunstancias, el editor puede someterlo a su propia garantía de calidad o puede comenzar a presionar el juego desde el maestro de oro.

Mantenimiento

Una vez que se envía 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 su objetivo es corregir la mayoría de los errores y problemas del juego. Ocasionalmente, un parche puede incluir características o contenido adicional o incluso puede alterar el juego.

Duración

La mayoría de los juegos modernos tardan de uno a tres años en completarse. La duración del desarrollo depende de una serie de factores, pero se requiere programación en todas las fases del desarrollo, excepto en las primeras etapas del diseño del juego.

Instrumentos

Al igual que otro software, los programas de desarrollo de juegos son generados desde el código fuente hasta el programa real (llamado ejecutable) por 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 completamente integrado. Una vez más, qué IDE se usa 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. Algunos de estos incluyen prototipos y herramientas de conversión de activos (programas que cambian las ilustraciones, por ejemplo, al formato personalizado del juego). Algunas herramientas personalizadas incluso se pueden entregar con el juego, como un editor de niveles.

Las empresas de desarrollo de juegos a menudo están 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 de dos a tres sistemas de desarrollo y múltiples monitores dominando su oficina o cubículo.

Lenguajes de programación

IdiomaCaracterísticas
AsambleaSobrecarga de CPU potencialmente mínima
CAmpliamente conocido, ampliamente portátil, numerosas API, compila en código de máquina
C++Orientado a objetos, ampliamente conocido, numerosas API, compila en código de máquina
JavaOrientado a objetos, recolección de basura, ampliamente portátil (a través de una máquina virtual)
C#, Visual Basic.NET, etc.Interfaces orientadas a objetos, recolección de elementos no utilizados, con productos de Microsoft
Objetivo-C, SwiftOrientado a objetos, interfaces con productos Apple
Lua, Python, JavaScript, Tcl, etc.Sintaxis familiar, fácilmente incrustada en los lenguajes anteriores, a menudo utilizada para secuencias de comandos
Lisp, Pascal, Perl, Smalltalk, etc.Lenguajes de juego marginales, aunque los enlaces a bibliotecas populares son comunes

Una vez 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 idioma del personal de programación, las plataformas de destino, los requisitos de velocidad de ejecución y el idioma de cualquier motor de juego, API o biblioteca que se utilice.

Para las computadoras personales, el idioma seleccionado puede ser poco más que una cuestión de preferencia. Los enlaces de idiomas para bibliotecas populares como SDL y Allegro están muy extendidos, y la brecha de rendimiento entre el código idiomático escrito en lenguajes compilados modernos es insignificante. Los lenguajes más populares suelen ser de procedimiento u orientados a objetos y se implementan a través de compiladores; por ejemplo, C, C++ y Java. Sin embargo, los desarrolladores pueden tener en cuenta las 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. Muchos juegos no están escritos en un idioma exclusivamente y pueden combinar dos o más idiomas; Por ejemplo, Unity, un motor de juego popular, tiene diferentes piezas escritas en C, C++ y C#.

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. 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, Microsoft y Sony tienen diferentes SDK para sus consolas Wii U, Nintendo Switch, Xbox One y PlayStation 4, respectivamente.

Los lenguajes de secuencias de comandos de alto nivel se utilizan cada vez más como extensiones integradas del juego subyacente escrito en un lenguaje de programación compilado, para comodidad tanto del desarrollador original como de cualquier persona 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. 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 usar, si las hay. Hoy en día, existen numerosas bibliotecas disponibles que se encargan de las 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. Algunos 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 dependen 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, hay marcos de juegos disponibles que permiten o facilitan el desarrollo multiplataforma, de modo que los programadores pueden programar un juego en un solo idioma y hacer que el juego se ejecute en varias plataformas, como Wii, PlayStation 3, Xbox 360, PSP y Microsoft Windows..

API gráficas

sistema operativovulcanoDirecto XGNMXMetal
ventanas 10nono
MacFundidoVKnono
linuxnonono
Androideno
iOSFundidoVK
tizénen desarrollononono
Pez velaen desarrollononono
xbox unononono
Sistema operativo mundial (PS4)nonono
interruptor de nintendononono

Hoy en día, los gráficos son una característica clave que define a 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 para juegos que son en gran parte de naturaleza 2D, como Civilization III. Sin embargo, los gráficos puramente 2D han experimentado un renacimiento con los juegos independientes.

Una plataforma de computadora personal bien establecida es Microsoft Windows. Dado que venía preinstalado en casi el noventa por ciento de las PC vendidas, ahora tiene la base de usuarios más grande. 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 se debaten acaloradamente 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 usa OpenGL ES y Vulkan (API).

DirectX es una colección de API de 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 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, quitar 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 los teléfonos inteligentes Xbox, Windows Phone 7.5 y dispositivos móviles de Microsoft que ejecutan el sistema operativo Pocket PC).

OpenGL es una especificación de API portátil. El código escrito con OpenGL se transfiere fácilmente entre plataformas con una implementación compatible. Por ejemplo, Quake II, que usa OpenGL, fue portado de Windows a Linux por un fanático del juego. OpenGL es un estándar mantenido por OpenGL Architecture Review Board (ARB). El ARB se reúne periódicamente para actualizar el estándar agregando soporte emergente para funciones del hardware 3D más reciente. Dado que se basa en estándares y ha existido por más tiempo, OpenGL es utilizado y enseñado en colegios y universidades de todo el mundo.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 asemejan a OpenGL. OpenGL a menudo se queda atrás en las actualizaciones de funciones debido a la falta de un equipo de desarrollo permanente y al requisito de que las implementaciones comiencen a desarrollarse después de que se haya publicado el estándar. Los programadores que eligen usarlo pueden acceder a las funciones 3D más recientes 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 arquitectura (ARB) de OpenGL ha pasado el control de la especificación al Grupo Khronos en un intento de contrarrestar el problema.

Otras API

Para el desarrollo en Microsoft Windows, las diversas API de DirectX se pueden usar para entrada, efectos de sonido, música, redes y reproducción de videos. Muchas bibliotecas comerciales están disponibles para realizar estas tareas, pero dado que DirectX está disponible de forma gratuita, es la más utilizada.

Para la programación de consolas, los fabricantes de consolas brindan instalaciones para renderizar gráficos y otras tareas de desarrollo de juegos. Los fabricantes de consolas también proporcionan sistemas de desarrollo completos, sin los cuales uno no puede comercializar legalmente ni desarrollar juegos para su sistema. Los desarrolladores de terceros 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 del juego. El bucle del juego permite que el juego se ejecute sin problemas, independientemente de la entrada de un usuario o la falta de ella.

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 texto 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 son iniciadas por un usuario que le dice al programa que haga algo.

Los juegos, por otro lado, deben continuar funcionando independientemente de la entrada de un usuario. El bucle del juego lo permite. Un bucle de juego muy simplificado, en pseudocódigo, podría verse así:

while (el usuario no sale)
    verificar la entrada del usuario
    ejecutar IA
    mover enemigos
    resolver colisiones
    dibujar gráficos
    Reproducir sonidos
terminar mientras

El bucle se puede refinar y modificar a medida que avanza el desarrollo del juego, pero la mayoría de los juegos se basan en esta idea básica.

Los bucles de juego difieren según la plataforma para la que se desarrollaron. 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 para que, por ejemplo, el cálculo de la IA del personaje se pueda desvincular de la generación de movimiento suave dentro del juego. Esto tiene la desventaja de una sobrecarga (ligeramente) mayor, pero el juego puede ejecutarse de manera más fluida y eficiente en procesadores multinúcleo o hiperprocesadores 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 subprocesos, esto se está volviendo cada vez más importante.

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 profesionales de desarrollo de juegos. 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. 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 usar paquetes de software que ayudan con el desarrollo de juegos, como Adobe Animate, Unity, Android Studio, pygame, Adventure Game Studio, GameMaker Studio, Godot, Unreal Engine, Pixel Game Maker MV o Construct.

Contenido relacionado

Maestro de juego

Un maestro de juego es una persona que actúa como organizador, oficiante de las reglas, árbitro y moderador de un juego de rol multijugador. Son más...

Juego en línea multijugador masivo (MMOG)

Un juego en línea multijugador masivo o MMOG o más comúnmente MMO, es un videojuego en línea con una gran cantidad de jugadores, a menudo cientos o miles...

Teoría GNS

La teoría GNS es un campo de estudio informal desarrollado por Ron Edwards que intenta crear una teoría unificada de cómo funcionan los juegos de rol....
Más resultados...
Tamaño del texto: