Comment implémenter dans mon jeu un système de programmation à la fois accessible, puissant et rapide à coder?

15

Je travaille actuellement sur un jeu de bac à sable basé sur l'espace qui offrira fortement la possibilité de programmer vos systèmes sur mesure. Je veux mettre cela en œuvre d'une manière à la fois

  1. accessible,
  2. puissant (le strict minimum serait turing-exhaustivité)
  3. rapide à coder.

Les langages basés sur du texte ne satisfont généralement que les deux dernières exigences, et même s'il n'est pas difficile de concevoir un langage visuel qui satisfait les deux premiers, les langages visuels sont difficiles à programmer car ils nécessitent une utilisation intensive de la souris. Bien qu'il existe des langages textuels très accessibles, je souhaite que les non-programmeurs complets puissent se familiariser avec la programmation.

Dimitriye98
la source
Je serai surpris si quelqu'un peut réellement vous donner un exemple. Parce que je pense vraiment que cela nécessite des recherches approfondies (comme la façon dont les humains appliquent la logique et non, les facteurs psychologiques et toutes ces choses centrées sur l'homme)
Sidar
2
Personne n'a mentionné Scratch?
Russell
2
Je ne vais pas suggérer un vote serré, mais je tiens à souligner que cela tombe assez facilement dans la catégorie «Si vous pouvez imaginer un livre entier qui répond à votre question, vous demandez trop» catégorie de questions à ne pas poser de la FAQ; c'est un problème très difficile, et bien que les gens ici puissent offrir des conseils, c'est un problème qui est probablement au-delà des limites d'un site SE à résoudre.
Steven Stadnicki
Il convient de noter que l'intégralité de Turing peut être obtenue par le jeu de la vie de Conway , Minecraft et d'autres systèmes de ce type non conçus pour la programmation.
Will

Réponses:

10

Vraiment, la seule façon d'avoir toutes les fonctionnalités est d'implémenter plusieurs interfaces. Accessible et puissant sont souvent les deux extrémités d'un spectre. La façon la plus simple de le faire est d'implémenter un système puissant, doté d'une interface supplémentaire pour permettre aux débutants d'interagir avec le système de manière intuitive.

Permettant un système qui permet aux débutants de programmer visuellement, peut-être quelque chose de similaire aux outils de programmation de Lego Mindstorms :

entrez la description de l'image ici

Où il y a des composants glisser / déposer. Les composants ont des entrées et des sorties. Les composants peuvent être des choses simples comme AND, ou des ORportes, ou plus complexes comme un test pour les ennemis proches.

Idéalement, la représentation visuelle devrait compiler un script de langage écrit en arrière-plan.Cela offre également un outil puissant pour apprendre la langue. Si un débutant peut "écrire" visuellement son programme, alors lire le code qu'il produit, il est beaucoup plus susceptible de le comprendre et de pouvoir modifier le code produit. Finalement, être capable d'écrire du code plus puissant que les outils visuels seuls le permettent. Cela répond à l'exigence de faciliter la programmation des utilisateurs.

L'épine dorsale du système, bien sûr, est un langage écrit. Les outils visuels sont juste pour donner aux utilisateurs un rapide moyen de programmer quelque chose de simple et permettre aux débutants de commencer.

Le langage écrit permet aux utilisateurs avancés de faire des choses avancées. Et vous pouvez même permettre aux utilisateurs de créer leurs propres composants, en créant des scripts personnalisés. Ils peuvent ensuite réutiliser les composants qu'ils ont créés dans une interface rapide et facile pour une programmation rapide.

Bonne chance! Le project semble amusant.

MichaelHouse
la source
Merci pour l'explication. Je pensais en fait à faire quelque chose comme NXT-G moi-même, mais je sais par expérience combien il est difficile de créer des programmes compliqués dans une langue comme celle-ci. J'adore l'idée de convertir des programmes visuels en code, permettant aux joueurs de revenir en arrière et de modifier leurs programmes textuellement lorsqu'ils sont plus expérimentés, donc je vais probablement l'utiliser.
Dimitriye98
1
Attention, il est facile de générer du code de script à partir d'une représentation graphique mais très difficile de générer une représentation graphique (significative et lisible) à partir d'un script. Vous vous retrouverez donc probablement avec une propre syntaxe de script très restreinte.
Imi
1
Il est peu probable que vous souhaitiez implémenter un script-> visuel pour cette raison exacte. Stick avec visuel-> script.
MichaelHouse
Les macro-blocs (blocs qui fournissent des entrées / sorties et la possibilité de placer des blocs abitrary à l'intérieur) peuvent être utilisés pour fournir la hiérarchie, l'encapsulation et la réutilisation pour faciliter la création de programmes complexes. Assurez-vous simplement que vous ne pouvez pas placer de macros dans les macros ou que vous détectez de tels cas ... Je connais au moins un programme qui ne parvient pas à détecter de telles boucles infinies.
Exilyth
5

Vous voudrez peut-être jeter un œil à Google en bloc , ils combinent les éléments visuels avec des termes de programmation reconnaissables tout en maintenant un niveau d'accessibilité assez décent.

entrez la description de l'image ici

Vous pouvez jeter un coup d'œil à la démo Maze pour vous inspirer, beaucoup de mes amis non programmeurs étaient capables de parcourir la plupart des énigmes en l'utilisant, satisfaisant au moins certains de vos critères.

Quetzalcoatl
la source
Langage intéressant du point de vue de l'accessibilité, mais la programmation est très lente (je viens d'essayer) ...
Pasha
@PashaS En effet, je suppose que c'est une partie du prix à payer pour essayer de tirer le meilleur parti des deux mondes.
Quetzalcoatl
4

Je suis surpris que cela n'ait pas été mentionné auparavant, mais Scratch du MIT utilise une interface de bloc qui est rapide à coder. Il permet aux utilisateurs de créer leurs propres fonctions et peut devenir étonnamment complexe pour un langage qui a été construit pour enseigner aux enfants comment code.

Stencyl est un autre exemple de codage par blocs qui fait quelque chose de plus similaire à ce que vous voulez. Le codage avec des blocs comme ceux-ci est beaucoup plus efficace et prend moins de temps que les interfaces de programmation visuelles comme celles utilisées par Lego NXT. Stencyl permet aux utilisateurs de coder en Actionscript ou en blocs.

Je m'excuse pour le manque d'images, je n'ai pas encore assez de réputation pour poster des images.

Flaxbeard
la source
2

Le langage de programmation BPEL a une représentation visuelle et de nombreux outils qui fonctionnent avec. C'est un langage de workflow, pas un langage de programmation, mais il est complet. Il est verbeux, mais il est facile à écrire pour les programmeurs et les hommes d'affaires et il est facilement traduisible de la forme visuelle au texte. Je ne pense pas que cela ferait un bon langage de jeu, mais il peut servir de source d'inspiration. Et compte tenu de la quantité de moteurs et d'outils BPEL, il devrait être possible de réutiliser certaines idées et / ou du code.

Le langage de type BPEL ne ressemblera pas à de la programmation, mais plutôt à des systèmes de routage et de connexion. Vous pouvez donc avoir un système de ciblage connecté à un système d'armes à feu avec une certaine logique entre les deux.

MartinTeeVarga
la source
+1: Bien que je ne préconise pas BPEL lui-même, son approche est exactement la réponse que j'aurais fournie. Langage très régulier qui est à la fois facile à représenter dans le texte ou visuellement et qui se concentre davantage sur le routage / réponse aux événements que sur des paradigmes de programmation plus "normaux".
Sean Middleditch
1

Considérez cette approche:

  1. Assurez-vous que votre logique de script peut être exprimée dans une mécanique simple basée sur des règles. Par exemple, vous avez un "déclencheur" qui se produit pendant le jeu associé à des "conditions" qui doivent être remplies, puis des "actions" sont exécutées (volées sans vergogne à Starcraft 2 Editor).
  2. Ensuite, fournissez une interface utilisateur où vous pouvez faire glisser et déposer des actions / conditions / déclencheurs prédéfinis et ainsi créer 90% des cas d'utilisation que les gens veulent généralement faire.
  3. Obtenez maintenant un moteur de script puissant et populaire intégré comme Lua, Python ou C #
  4. Enfin, écrivez vous-même quelques dizaines de ces actions / conditions / déclencheurs dans cette langue. Assurez-vous que l'utilisateur de personnalisation peut copier-coller, modifier et intégrer facilement ces nouvelles actions dans votre éditeur drag'n'drop.
  5. Vous voulez probablement être en mesure de paramétrer vos déclencheurs, conditions et actions et vous avez donc besoin de quelques primitives de plus que ces trois, par exemple "GameObject", "Position", "Number" ou "String". Dans l'interface utilisateur, vous aurez besoin de certaines boîtes de dialogue pour attribuer ces paramètres, mais c'est encore beaucoup moins de travail que si vous deviez être capable de construire des scripts entiers via les opérations de l'interface utilisateur.

C'est à peu près la façon la plus rapide à laquelle je peux penser pour obtenir tous les bonbons sans trop de douleur. Vous obtenez les noobs click'n'drag ainsi que les vim-geeks à bord. Et si vous gardez la mécanique simple (par exemple Trigger -> Condition -> Action), vous n'avez pas à passer des années-homme à développer une interface utilisateur pour un éditeur de script graphique puissant et toujours facile à utiliser.

Quelques exemples pour clarifier ce que je veux dire:

  • Le déclencheur peut être: "Game Framework Initialized", "Game Charger", "Unit created", "Unit destroy", "Player endommagé" et ainsi de suite. Les déclencheurs ont généralement certains paramètres (par exemple, l'unité créée obtient le GameObject qui a été créé)
  • Les conditions sont toutes des conditions arithmatiques booléennes et de base standard (et / ou / non / égal / supérieur ...) plus quelques conditions typiques que vous trouvez dans votre jeu comme "L'unité est en pleine santé" ou "Au moins deux joueurs sont connectés". Les conditions ont généralement un paramètre que l'utilisateur doit remplir (à l'aide de l'interface utilisateur)
  • Les actions sont des scripts qui peuvent également prendre un paramètre simple. comme "Déplacer la caméra vers XXX", "Kill Unit Y", "Game over", "Execute Trigger" et "Call Actions X, Y, Z ... in a sequence"
Imi
la source
Notez que la programmation est destinée aux ordinateurs DANS le jeu, pas aux plugins. Merci quand même.
Dimitriye98
Je vois .. cela ressemble à une approche de jeu intéressante;). Avez-vous regardé des jeux similaires comme "Code Hero" ou "Garry's Mod" qui essaient de fournir des capacités de codage sans interrompre l'immersion du jeu? Quoi qu'il en soit, vous pouvez toujours récupérer mes conseils de base et diviser le problème en parties de script et d'interface utilisateur. Bonne chance avec votre jeu. :)
Imi
Eh bien, le codage se fera sur les consoles informatiques du jeu, ce qui ne devrait pas trop casser l'immersion. Bien que les utilisateurs qui le souhaitent pourront coder hors jeu, importez le code dans leur sauvegarde ou sur le serveur sur lequel ils jouent.
Dimitriye98