¿Cómo implemento un sistema de programación en mi juego que sea accesible, potente y rápido de codificar?

15

Actualmente estoy trabajando en un juego sandbox basado en el espacio que contará con la capacidad de programar sus sistemas a medida. Quiero implementar esto de una manera que sea a la vez

  1. accesible,
  2. Potente (un mínimo sería la integridad de Turing)
  3. rápido para codificar.

Los lenguajes basados ​​en texto generalmente solo satisfacen los dos últimos requisitos, y si bien no es difícil diseñar un lenguaje visual que satisfaga los dos primeros, los lenguajes visuales son difíciles de programar debido a que requieren un uso extensivo del mouse. Si bien hay algunos lenguajes basados ​​en texto muy accesibles, quiero que los no programadores completos puedan facilitarse en la programación.

Dimitriye98
fuente
Me sorprendería si alguien puede darte un ejemplo. Porque realmente creo que esto necesita una investigación exhaustiva (como la forma en que los humanos aplican la lógica y qué no, factores psicológicos, lo que sea y todas estas cosas centradas en los humanos)
Sidar
2
¿Nadie mencionó Scratch?
Russell
2
No voy a sugerir una votación cerrada, pero quiero señalar que esto cae muy fácilmente en la categoría de preguntas "Si puedes imaginar un libro completo que responda a tu pregunta, estás haciendo demasiado". de las preguntas frecuentes; Este es un problema muy difícil, y aunque las personas aquí pueden ofrecer consejos, este es un problema que probablemente esté más allá de los límites de un sitio de SE para resolver.
Steven Stadnicki
Vale la pena señalar que la integridad de Turing se puede lograr con el juego de la vida de Conway , Minecraft y otros sistemas similares no diseñados para la programación.
Will

Respuestas:

10

Realmente, la única forma de tener todas las características es implementar múltiples interfaces. Accesible y poderoso son a menudo dos extremos de un espectro. La forma más fácil de hacer esto es implementar un sistema potente, que tenga una interfaz adicional para permitir a los principiantes interactuar con el sistema de manera intuitiva.

Permitir un sistema que permita a los principiantes programar visualmente, quizás algo similar a las herramientas de programación de Lego Mindstorms :

ingrese la descripción de la imagen aquí

Donde hay componentes de arrastrar / soltar. Los componentes tienen entradas y salidas. Los componentes pueden ser cosas simples como AND, o ORpuertas, o más complejas como una prueba para enemigos cercanos.

Idealmente, la representación visual debería estar compilando un script de lenguaje escrito en segundo plano. Esto ofrece una herramienta poderosa para aprender el idioma también. Si un principiante puede "escribir" su programa visualmente, luego leer el código que produce, es mucho más probable que lo entiendan y puedan modificar el código producido. Eventualmente, ser capaz de escribir código más poderoso que lo que permiten las herramientas visuales. Esto cumple el requisito de facilitar a los usuarios la programación.

La columna vertebral del sistema, por supuesto, es un lenguaje escrito. Las herramientas visuales son solo para brindar a los usuarios una forma rápida de programar algo simple y permitir que los principiantes comiencen.

El lenguaje escrito permite a los usuarios avanzados hacer cosas avanzadas. E incluso puede permitir a los usuarios crear sus propios componentes, creando scripts personalizados. Luego pueden reutilizar los componentes que hicieron en una interfaz rápida y fácil para una programación rápida.

¡Buena suerte! Suena como un proyecto divertido.

MichaelHouse
fuente
Gracias por la explicación. De hecho, estaba pensando en hacer algo como NXT-G, solo sé por experiencia lo difícil que es crear programas complicados en un lenguaje como ese. Me encanta la idea de convertir programas visuales en código, lo que permite a los jugadores volver y editar sus programas textualmente cuando tienen más experiencia, por lo que probablemente usaré eso.
Dimitriye98
1
Tenga en cuenta que es fácil generar algún código de script a partir de representaciones gráficas, pero muy difícil generar una representación gráfica (significativa y legible) a partir de un script. Por lo tanto, probablemente terminará con una sintaxis de script propia muy restringida.
Imi
1
Es poco probable que desee implementar script-> visual por esa razón exacta. Quédate con visual-> script.
MichaelHouse
Los macrobloques (bloques que proporcionan entradas / salidas y la capacidad de colocar bloques abituarios en su interior) se pueden usar para proporcionar jerarquía, encapsulación y reutilización para facilitar la creación de programas complejos. Solo asegúrese de que no pueda colocar macros dentro de las macros o detectará tales casos ... Conozco al menos un programa que no puede detectar dichos bucles infinitos.
Exilyth
5

Es posible que desee echar un vistazo a Google de manera bloqueada , ya que combinan los elementos visuales con términos de programación reconocibles y mantienen un nivel de accesibilidad bastante decente.

ingrese la descripción de la imagen aquí

Puede echar un vistazo a la demostración de Maze en busca de inspiración, muchos de mis amigos no programadores fueron capaces de completar la mayor parte de los acertijos usándola, satisfaciendo al menos algunos de sus criterios vigentes.

Quetzalcoatl
fuente
Lenguaje interesante desde el punto de vista de la accesibilidad, sin embargo, la programación es muy lenta (lo acabo de probar) ...
Pasha
@PashaS De hecho lo es, supongo que es parte del precio que tienes que pagar para tratar de obtener lo mejor de ambos mundos.
Quetzalcóatl
4

Me sorprende que esto no se haya mencionado antes, pero Scratch del MIT utiliza una interfaz de bloque que es rápida de codificar. Permite a los usuarios crear sus propias funciones y puede volverse sorprendentemente complejo para un lenguaje creado para enseñar a los niños cómo código.

Stencyl es otro ejemplo de codificación de bloque que hace algo más similar a lo que quieres. La codificación con bloques como estos es mucho más eficiente y requiere menos tiempo que las interfaces de programación visual como las utilizadas por Lego NXT. Stencyl permite a los usuarios codificar en Actionscript o en bloques.

Pido disculpas por la falta de imágenes, todavía no tengo suficiente reputación para publicar imágenes.

Barba de lino
fuente
2

El lenguaje de programación BPEL tiene representación visual y muchas herramientas que funcionan con él. Es un lenguaje de flujo de trabajo, no un lenguaje de programación, pero está completo. Es detallado, pero es fácil de escribir tanto para programadores como para empresarios y es fácilmente traducible de forma visual a textual. No creo que sea un buen lenguaje de juego, pero puede servir como fuente de inspiración. Y dada la cantidad de motores y herramientas BPEL, debería ser posible reutilizar algunas ideas y / o códigos.

El lenguaje similar a BPEL no se sentirá como programación, más como enrutamiento y conexión de sistemas. Por lo tanto, puede tener un sistema de orientación conectado a un sistema de armas con cierta lógica en el medio.

MartinTeeVarga
fuente
+1: Aunque no abogaría por BPEL, su enfoque es exactamente la respuesta que habría proporcionado. Lenguaje altamente regular que es fácil de representar en texto o visualmente y que se enfoca más en el enrutamiento / respuesta de eventos que en paradigmas de programación más "normales".
Sean Middleditch
1

Considere este enfoque:

  1. Asegúrese de que la lógica de su script se pueda expresar en una mecánica simple basada en reglas. Por ejemplo, tienes "Trigger" que ocurre durante el juego asociado con "Condiciones" que deben cumplirse y luego se ejecutan "Acciones" (descaradamente robadas del Editor de Starcraft 2).
  2. Luego, proporcione una interfaz de usuario donde pueda arrastrar y soltar algunas acciones / condiciones / desencadenadores predefinidos y así construir el 90% de los casos de uso que la gente generalmente quiere hacer.
  3. Ahora obtenga un motor de scripting potente y popular integrado como Lua, Python o C #
  4. Finalmente, escriba un par de docenas de estas Acciones / Condiciones / Desencadenantes en ese idioma. Asegúrese de que el usuario de personalización pueda copiar, pegar, editar e integrar estas y nuevas acciones dentro de su editor de arrastrar y soltar fácilmente.
  5. Probablemente desee poder parametrizar sus activadores, condiciones y acciones, por lo que necesita un par de primitivas más que estas tres, por ejemplo, "GameObject", "Posición", "Número" o "Cadena". En la interfaz de usuario, necesitará algunos cuadros de diálogo para asignar estos parámetros, pero todavía es mucho menos trabajo que si tuviera que poder construir scripts completos a través de operaciones de la interfaz de usuario.

Esa es la forma más rápida en la que puedo pensar para obtener todos los dulces sin demasiado dolor. Obtienes los noobs click'n'drag y los vim-geeks a bordo. Y si mantiene la mecánica simple (por ejemplo, Trigger -> Condición -> Acción), entonces no tiene que gastar muchos años en desarrollar una interfaz de usuario para un editor de script gráfico potente y aún fácil de usar.

Algunos ejemplos para aclarar lo que quiero decir:

  • El desencadenante podría ser: "Marco de juego inicializado", "Juego cargado", "Unidad creada", "Unidad destruida", "Jugador dañado", etc. Los disparadores generalmente tienen algunos parámetros (por ejemplo, la Unidad creada obtiene el GameObject que se ha creado)
  • Las condiciones son todas condiciones aritmáticas básicas y booleanas estándar (y / o / no / igual / mayor ...) más algunas condiciones típicas que encuentras en tu juego como "La unidad está en plena salud" o "Al menos dos jugadores están conectados". Las condiciones generalmente tienen un parámetro que el usuario debe completar (usando la interfaz de usuario)
  • Las acciones son scripts que también pueden tomar algún parámetro simple. como "Desplazar la cámara a XXX", "Matar unidad Y", "Juego terminado", "Ejecutar disparador" y "Llamar acciones X, Y, Z ... en una secuencia"
Imi
fuente
Tenga en cuenta que la programación es para computadoras en el juego, no para complementos. Gracias de todos modos.
Dimitriye98
Ya veo ... eso suena como un enfoque de juego interesante;). ¿Has buscado juegos similares como "Code Hero" o "Garry's Mod" que intentan proporcionar capacidades de codificación sin romper la inmersión del juego? De todos modos, aún puede salvar mi consejo básico y dividir el problema en secuencias de comandos y partes de la interfaz de usuario. Buena suerte con tu juego. :)
Imi
Bueno, la codificación se realizará en consolas de computadora en el juego, lo que no debería romper demasiado la inmersión. Aunque los usuarios que lo deseen podrán codificar fuera del juego y luego importar el código a su partida guardada o al servidor en el que juegan.
Dimitriye98