Pregunta Construyendo un juego, necesita un lenguaje con funciones de primera clase altamente compatibles


Estoy construyendo un juego educativo que, a través de su modularidad, permite enseñar a los estudiantes a programar. Es esencialmente un juego de cartas genérico que puede modificarse fácilmente.

La columna vertebral del juego se supone que es totalmente inédita (al menos en teoría), así que tengo que crear un tipo de "Tarjeta" que permita una función anónima ya que es una acción (incluso peor, o tal vez incluso más interesante, necesita una función anónima que puede tener una cantidad arbitraria de argumentos).

También necesito una biblioteca fuerte de GUI, y debe ser portátil, y si es posible, debe ser potencialmente un lenguaje web. Debe tener un amplio soporte para modularidad, estar orientado a objetos y, con suerte, ser lo suficientemente claro como para que no requiera que un programador experimentado comprenda la sintaxis. Esos son muchos requisitos, pero se supone que debo ser detallista y quiero una respuesta específica y por qué sería una buena elección, así que debería poner tanta información como sea posible, creo. No tengo una necesidad real de eficiencia del lenguaje, por lo que no es necesario tener un nivel bajo de idiomas, en este caso, los idiomas de muy alto nivel serán lo suficientemente rápidos.

Python no es lo suficientemente fuerte. Ruby puede ser, pero no estoy lo suficientemente familiarizado con sus características. Haskell y Scheme tienen el soporte más fuerte pero no son lenguajes web y, hasta donde yo sé, no tienen bibliotecas de GUI en su mayor parte. C # puede ser razonable, no estoy muy familiarizado con sus características, pero estoy particularmente preocupado por la portabilidad. Si es posible, me gustaría evitar el javascript, pero si esa es realmente la mejor opción, probablemente tendré que ir en esa dirección.


5
2017-11-29 22:58


origen


Respuestas:


Javascript parece ser la elección perfecta para ti: funciones de primera clase, sintaxis portátil, basada en web, clara, buena compatibilidad con la biblioteca. Sé que estás tratando de evitarlo, pero espero que una vez que hayas evaluado y rechazado todas las demás opciones, le des otra oportunidad a Javascript.


6
2017-11-29 23:02



Si estás familiarizado con Scheme, echa un vistazo DrScheme entorno de programación.
Tiene soporte de GUI y se traslada a Windows, Linux y Macintosh.


4
2017-11-29 23:14



Ha considerado Scala? Se ejecuta en la JVM, por lo que puede aprovechar las bibliotecas Java swing, y aún así tener un lenguaje funcional fuerte para codificar.


3
2017-11-29 23:24



Iría con C # o quizás F #, en la forma de Silverlight. C # y F # admiten funciones anónimas (incluidas funciones lambda) y una cantidad variable de argumentos.

Las aplicaciones de Silverlight se pueden entregar en la Web, admiten una biblioteca de gráficos sofisticada y se ejecutarán en la mayoría de los navegadores, tanto en la PC como en la Mac. El soporte para Linux debería estar disponible "pronto" (Microsoft e Intel aparentemente están trabajando en ello). Mientras tanto, hay Mono y Moonlight.

Desde la perspectiva de la aplicación del juego, Silverlight es agradable porque admite cosas como líneas de tiempo y animación. Además, el hecho de poder separar el marcado del código ayuda a mantener el diseño limpio y manejable.


2
2017-11-29 23:14



FWIW, si está enseñando programación, también puede asegurarse de que el idioma tenga un buen entorno de desarrollo: un editor contextual y un depurador potente y fácil de usar son muy útiles. Lo más probable es que los programadores primerizos cometan muchos errores y puedan pasar fácilmente por las líneas de código y ver las variables, y la depuración es tan importante para aprender a programar realmente como todas las partes teóricas, como usar funciones lambda.


1
2017-11-29 23:54



¿Has considerado C ++, lo mantiene simple? Podrías tener un 'CORE' que es un binario y luego hacer que tus estudiantes compilen las bibliotecas que el archivo C ++ llama, de esa forma cada estudiante puede enviar una carpeta con todas las diferentes bibliotecas y todo lo que tendrías que hacer es mover el binario a La carpeta y ejecutarlo. El binario usaría sus bibliotecas para ejecutar los diferentes aspectos del código que quería modular.

Este enfoque tiene el efecto adicional de enseñarles a trabajar en equipos también, puede hacer que una persona escriba el subsistema de renderizado, otro el subsistema de entrada, etc. Y todo lo que tendría que definir en su binario es un conjunto de funciones de esqueleto que Llamas para hacer la lógica para esas secciones.


1
2017-11-29 23:54