¿Cuál es el motor de juegos de código abierto mejor diseñado para tomar el ejemplo? [cerrado]

15

Posible duplicado:
¿Dónde puedo encontrar buenos ejemplos (bien organizados) de código de juego?

He codificado varios juegos de C ++ y ahora estoy construyendo mi propio motor y editor de juegos.

Tengo algunas dudas sobre el diseño y deseo encontrar excelentes ejemplos a seguir.

¿Cuál es el mejor diseñado en tu opinión?

Debe estar orientado a objetos. El lenguaje de programación no importa, pero prefiero en este orden: C ++, C #, Java u otro similar.

EDITADO: Para aclarar más, no estoy interesado en el código específico del juego. Quiero motores de juegos de uso general.

EDITADO: Este artículo explica qué es un motor de juego: motor de juego en wikipedia y aquí hay una lista de motores de juego conocidos: lista de motores de juego en wikipedia

Dani
fuente
3
¿De verdad entiendes mi pregunta? Deseo motores de juego (no solo juegos ). Y solicité Debe estar orientado a objetos . En el hilo que dijiste, las respuestas son solo para juegos (Doom3, Prototype, etc.) Y también hay un kit de herramientas gráficas (OpenSceneGraph) pero no hay nada específico sobre los "motores de juego" en ese hilo ... Puedes cerrar o borra mi pregunta si no te gusta, pero no entiendo el voto negativo ... :( Mi pregunta no es la misma
Dani
2
Para aclarar aún más, no estoy interesado en el código específico del juego. Quiero motores de juegos de uso general.
Dani
3
Hay una diferencia: no todos los juegos funcionan con un motor de propósito general. Doom3 tiene un motor específico de FPS, el prototipo es diferente, etc. Es posible que tengan cosas en común (gestión de recursos, secuencias de comandos ...) pero esto no es relevante para mi pregunta. Mi pregunta comienza con la frase "He codificado varios juegos de C ++". Reitero: mi necesidad es encontrar un buen código fuente de motor de juego de propósito general. No es una fuente de juegos para buscar código reutilizable.
Dani el
1
Doom 3 tiene un "motor específico de FPS", pero también tiene todas las partes que necesita un motor genérico, como usted dice, administración de recursos y secuencias de comandos, representación 3D, física, etc. Es un motor genérico y más , no de alguna manera menos.
2
@Joe Wreschnig Me inclino a estar de acuerdo con @Dani sobre este tema. Aunque todos los juegos funcionan con algún tipo de motor, los patrones arquitectónicos utilizados para un motor "único" y un motor diseñado para trabajar en varios títulos son bastante diferentes, incluso si ambos tienen secuencias de comandos, gestión de recursos, representación 3D, etc. componentes. Además, mirar el código de un juego construido en un motor desarrollado por el mismo estudio probablemente no sea la mejor opción, ya que no le dará una indicación real de cuán flexible y fácil de usar es el motor en un entorno de terceros.
Ari Patrick el

Respuestas:

6

Creo que la mejor manera de construir un motor de juego es comenzar con lo que ya sabes bastante bien y agregar esas características que son tediosas o repetitivas.

Por ejemplo, hago mucho con Python / pygame (que es un contenedor SDL). Disfruto bastante del sistema, pero hubo tres cosas que me molestaron:

  • Construir el bucle de animación es tedioso, y todos son más o menos lo mismo.
  • El objeto sprite básico es muy limitado. Quería un sprite mejorado con dirección y velocidad, capacidad para manejar varias condiciones de borde de la pantalla, múltiples imágenes y múltiples esquemas de colisión.
  • Pygame no tiene características de interfaz de usuario. Quería etiquetas simples, botones y un selector de números que
    pudiera agregar fácilmente a mis juegos.

Fue relativamente fácil crear un contenedor orientado a objetos en torno a estas características. Echa un vistazo al capítulo 10 y la documentación de Game Engine disponible aquí: http://aharrisbooks.net/pythonGame/

(Esto fue escrito como parte de un libro, pero eres bienvenido al motor del juego incluso si no quieres el libro).

El Capítulo 10 explica la motivación y las técnicas para construir un motor de juego 2D básico. Podrías disfrutarlo mientras construyes el tuyo. El idioma real no es tan importante (excepto que, por supuesto, necesitará un lenguaje OOP para admitir OOP). Si ya está utilizando SDL con C ++, puede comenzar adaptando mi motor a C ++ / SDL.

Dos pi
fuente
8

El venerable diseño del motor Quake (ID tech) ha resistido la prueba del tiempo y es probablemente el diseño de motor de juego más exitoso de todos los tiempos. Todo, además del renderizador, no ha cambiado en gran medida desde fines de los 90 y todavía se usa en juegos modernos como ETQW.

El código fuente completo para cuatro iteraciones de este motor (Quake 1 a 3, más Wolf ET) está disponible bajo la GPL. Probablemente hay más de un centenar de motores de juego basados ​​en Quake desarrollados activamente y apoyados por la comunidad que los mantienen relevantes en la era moderna. Especialmente vale la pena ver XreaL por su fantástico renderizador y ioQuake3 por su fiel mantenimiento de Quake 3 optimizado para hardware moderno. Además, para las versiones de identificación "oficiales" más recientes del motor, también está disponible la lógica del juego (no todo el motor).

Incluso si no termina utilizando este motor de juego, es digno de estudio por su arquitectura de separación cliente-servidor bien pensada y la segregación de la lógica del juego de los detalles de bajo nivel.

Max E.
fuente
1
Sin embargo, no llamaría exactamente a la tecnología pre-Doom3 id tech object.
Tetrad el
3
No, no está orientado a objetos, pero como dije, es digno de estudio. Quiero decir, ¡solo porque sea de procedimiento no significa que te dará cáncer de ojo si lo miras! ;)
Max E.
6

La biblioteca de renderizado de Ogre3D está bastante cerca del código del motor y, según todas las cuentas que he escuchado, está muy bien diseñada y es muy original.

http://www.ogre3d.org/

Tétrada
fuente
+1 Gran motor. Gracias Tetrad! Ya lo sé, pero nunca usé ni vi su código fuente. ¿Sabes si tiene IA integrada (es decir, búsqueda de ruta, etc.)
Dani
3
Creo que todo está relacionado con la representación.
Tetrad el
2
Ogre es solo una biblioteca de representación de gráficos. Motor de renderizado de gráficos orientado a objetos.
Jonathan Sternberg
0

Cuando hablamos del motor del juego, supongo que estás pensando en algo que no sea el motor de renderizado, el motor de sonido, el motor de física, el motor de entrada, etc.

Por lo tanto, puede estar pensando en la arquitectura del juego, la IA o el diseño de patrones / sistemas, etc., que se utilizan para estructurar un software en la gestión de datos y otros componentes para crear algún tipo de escena / thater / ilusion, produciendo así un conjunto de reglas manejables para ajustar para crear un "videojuego" real.

Esta es la capa superior real de un videojuego, e incluso intenté aprender un poco al respecto, es vasta, complicada y requiere mucho conocimiento en todas las demás materias. Imagina que quieres recrear una realidad alternativa de la nada, rastrear y calcular cada evento, y regenerar datos precisos de ellos, en cualquier momento: para cada tipo de juego hay algún tipo de motor de juego de subconjunto, y yo no ' No creo que sea posible hacer un motor genérico que sea matemáticamente lo suficientemente rápido. Incluso para un juego en el que controlas un solo personaje, todavía hay muchas cosas que pueden variar y que pueden requerir que el juego cambie toda la arquitectura.

La industria del juego no está tan bien atendida por el código abierto como otros campos de las ciencias de la computación, solo porque el entretenimiento tiene diferentes tipos de licencias, que implican licencias artísticas: el producto del juego solo lo paga un cliente, y AFAIK, solo hay pocos motores que parecen lo suficientemente buenos para trabajar para usted: Hord3d, NeoAxis, blendelf, Panda3D. Pero no puedo asegurarle que serán tan fáciles de usar como herramientas como Unity, Torque, C4 y otras; ten en cuenta que un motor de juego es, con el procesador gráfico, creo que el tipo de software más difícil que encontrarás en la creación de juegos.

jokoon
fuente
0

Para mí, usar Python con Pygame es una buena solución. Tal vez Python es un poco lento, pero para las computadoras de hoy y si solo intentas optimizar tu juego, esto no importa. Pygame tiene una muy buena documentación en el sitio original de pygame. Pero primero tome el comienzo de un tutorial para aprender algunos conceptos básicos. Para la optimización de la velocidad (conversión de imágenes, ...) necesitará otros ejemplos que son fáciles de encontrar.

nmin
fuente