Come posso implementare un sistema di programmazione nel mio gioco che sia sia accessibile, potente e veloce da inserire nel codice?


15

Attualmente sto lavorando a un gioco sandbox basato sullo spazio che presenterà fortemente la possibilità di programmare i sistemi in modo personalizzato. Voglio implementarlo in un modo che sia entrambi

  1. accessibile,
  2. potente (il minimo indispensabile sarebbe completezza turing)
  3. digiunare velocemente.

I linguaggi basati sul testo generalmente soddisfano solo questi ultimi due requisiti e, sebbene non sia difficile progettare un linguaggio visivo che soddisfi i primi due, i linguaggi visivi sono una seccatura da programmare a causa della necessità di un ampio uso del mouse. Mentre ci sono alcuni linguaggi di testo molto accessibili, voglio che i non programmatori completi siano in grado di facilitare la programmazione.


Sarò sorpreso se qualcuno può davvero darti un esempio. Perché penso davvero che questo abbia bisogno di alcune ricerche approfondite (come il modo in cui gli umani applicano la logica e cosa no, i fattori psicologici qualunque cosa e tutta questa roba centrata sull'uomo)
Sidar,

2
Nessuno ha menzionato Scratch?
Russell,

2
Non ho intenzione di suggerire un voto ravvicinato, ma voglio sottolineare che questo rientra abbastanza facilmente nella categoria "Se riesci a immaginare un intero libro che risponde alla tua domanda, stai ponendo troppo" dalle FAQ; questo è un problema molto difficile, e mentre le persone qui possono offrire consigli, questo è un problema che probabilmente va oltre i limiti di un sito SE da risolvere.
Steven Stadnicki,

Vale la pena notare che la completezza di Turing può essere raggiunta dal gioco della vita di Conway , da Minecraft e da altri sistemi simili non progettati per la programmazione.
Sarà il

Risposte:


10

In realtà, l'unico modo per avere tutte le funzionalità è implementare più interfacce. Accessibile e potente sono spesso le due estremità di uno spettro. Il modo più semplice per farlo è implementare un sistema potente, che ha un'interfaccia aggiuntiva per consentire ai principianti di interagire con il sistema in modo intuitivo.

Consentire un sistema che consenta ai principianti di programmare visivamente, forse qualcosa di simile al strumenti di programmazione Lego Mindstorms :

inserisci qui la descrizione dell'immagine

Dove ci sono componenti di trascinamento della selezione. I componenti hanno ingressi e uscite. I componenti possono essere cose semplici come AND, oOR cancelli, o più complessi come un test per i nemici vicini.

Idealmente, la rappresentazione visiva dovrebbe compilare una sceneggiatura scritta in background.Questo offre un potente strumento anche per l'apprendimento della lingua. Se un principiante può "scrivere" visivamente il proprio programma, quindi leggere il codice che produce è molto più probabile che lo capiscano e siano in grado di modificare il codice prodotto. Alla fine essere in grado di scrivere codice più potente di quello che solo gli strumenti visivi consentono. Ciò soddisfa il requisito di facilitare gli utenti alla programmazione.

La spina dorsale del sistema, ovviamente, è una lingua scritta. Gli strumenti visivi sono solo per dare agli utenti un digiuno modo per programmare qualcosa di semplice e consentire ai principianti di iniziare.

La lingua scritta consente agli utenti esperti di fare cose avanzate. E puoi anche consentire agli utenti di creare i propri componenti, creando script personalizzati. Quindi possono riutilizzare i componenti realizzati in un'interfaccia semplice e veloce per una programmazione rapida.

In bocca al lupo! Sembra un progetto divertente.


Grazie per la spiegazione. In realtà stavo pensando di fare qualcosa come NXT-G da solo, solo per esperienza so quanto sia difficile realizzare programmi complicati in una lingua del genere. Adoro l'idea di convertire i programmi visivi in ​​codice, consentendo ai giocatori di tornare indietro e modificare i loro programmi testualmente quando sono più esperti, quindi probabilmente lo userò.
Dimitriye98,

1
Attenzione che è facile generare un codice di script da una rappresentazione grafica ma molto difficile generare una rappresentazione grafica (significativa e leggibile) da uno script. Quindi probabilmente finirai con una sintassi di scripting molto limitata.
Imi,

1
È improbabile che tu voglia implementare script-> visual per quel motivo esatto. Stick con visual-> script.
MichaelHouse

I macroblocchi (blocchi che forniscono input / output e la capacità di posizionare blocchi abitrari all'interno) possono essere utilizzati per fornire gerarchia, incapsulamento e riutilizzo per facilitare la creazione di programmi complessi. Assicurati solo di non poter posizionare le macro all'interno delle macro o di rilevare tali casi ... Conosco almeno un programma che non riesce a rilevare cicli così infiniti.
Exilyth,

5

Potresti dare un'occhiata ai blocchi di Google , che combinano gli elementi visivi con termini di programmazione riconoscibili mantenendo un livello di accessibilità abbastanza decente.

inserisci qui la descrizione dell'immagine

Puoi dare un'occhiata alla demo di Maze per ispirazione, molti dei miei amici non programmatori sono stati in grado di superare la maggior parte dei puzzle utilizzandolo, soddisfacendo almeno alcuni dei tuoi criteri in effetti.


Linguaggio interessante dal punto di vista dell'accessibilità, tuttavia la sua programmazione è molto lenta (ho appena provato) ...
Pasha,

@PashaS In effetti lo è, immagino che sia parte del prezzo che devi pagare per cercare di ottenere il meglio da entrambi i mondi.
Quetzalcoatl,

4

Sono sorpreso che questo non sia stato menzionato prima, ma Scratch del MIT utilizza un'interfaccia a blocchi che è veloce per codificare. Permette agli utenti di creare le proprie funzioni e può diventare sorprendentemente complesso per un linguaggio che è stato costruito per insegnare ai bambini come codice.

Stencyl è un altro esempio di codifica a blocchi che fa qualcosa di più simile a quello che desideri. La codifica con blocchi come questi è molto più efficiente e richiede meno tempo rispetto alle interfacce di programmazione visiva come quelle utilizzate da Lego NXT. Stencyl consente agli utenti di codificare in Actionscript o in blocchi.

Mi scuso per la mancanza di immagini, non ho ancora abbastanza reputazione per pubblicare le immagini.


2

Il linguaggio di programmazione BPEL ha una rappresentazione visiva e molti strumenti che funzionano con esso. È un linguaggio di flusso di lavoro, non un linguaggio di programmazione, ma è completo. È prolisso, ma è facile da scrivere sia per i programmatori che per gli uomini d'affari ed è facilmente traducibile dalla forma visiva a quella testuale. Non penso che sarebbe un buon linguaggio di gioco, ma può servire come fonte di ispirazione. E data la quantità di motori e strumenti BPEL, dovrebbe essere possibile riutilizzare alcune idee e / o codice.

Un linguaggio simile a BPEL non avrà la sensazione di programmare, più piuttosto di un sistema di routing e connessione. Quindi puoi avere un sistema di mira collegato a un sistema di pistola con una logica in mezzo.


+1: Anche se non vorrei sostenere BPEL stesso, il suo approccio è esattamente la risposta che avrei fornito. Linguaggio altamente regolare che è sia facile da rappresentare nel testo o visivamente e che si concentra più sull'instradamento / risposta degli eventi rispetto a paradigmi di programmazione più "normali".
Sean Middleditch,

1

Considera questo approccio:

  1. Assicurati che la tua logica degli script sia esprimibile in semplici meccanismi basati su regole. Ad esempio, hai "Trigger" che si verifica durante il gameplay associato a "Condizioni" che deve essere riempito e quindi vengono eseguite le "Azioni" (rubate spudoratamente dall'editor di Starcraft 2).
  2. Quindi fornire un'interfaccia utente in cui è possibile trascinare alcune azioni / condizioni / trigger predefiniti e quindi costruire il 90% dei casi d'uso che le persone di solito vogliono fare.
  3. Ora integra un motore di scripting potente e popolare come Lua, Python o C #
  4. Infine, scrivi un paio di dozzine di queste azioni / condizioni / trigger in quella lingua. Assicurati che l'utente di personalizzazione possa copiare e incollare, modificare e integrare facilmente queste e nuove azioni nel tuo editor drag'n'drop.
  5. Probabilmente vuoi essere in grado di parametrizzare i tuoi trigger, condizioni e azioni e quindi hai bisogno di un paio di primitive in più rispetto a queste tre, ad esempio "GameObject", "Position", "Number" o "String". Nell'interfaccia utente, avrai bisogno di alcune finestre di dialogo per assegnare questi parametri, ma è ancora molto meno lavoro che se dovessi essere in grado di costruire interi script tramite operazioni dell'interfaccia utente.

Questo è il modo più veloce a cui riesco a pensare di ottenere tutte le caramelle senza troppo dolore. Ottieni i click'n'drag e anche i vim-geek a bordo. E se mantieni la meccanica semplice (ad es. Trigger -> Condizione -> Azione), non devi passare gli anni-uomo a sviluppare un'interfaccia utente per un editor di script grafico potente e ancora facile da usare.

Alcuni esempi per chiarire cosa intendo:

  • Il trigger potrebbe essere: "Game Framework Initialized", "Game caricato", "Unit create", "Unit distrutta", "Player danneggiato" e così via. I trigger di solito hanno alcuni parametri (ad esempio, l'unità creata ottiene l'oggetto GameObject che è stato creato)
  • Tutte le condizioni sono booleane standard e condizioni aritmiche di base (e / o / non / uguali / maggiori ...) più alcune condizioni tipiche che trovi nel tuo gioco come "L'unità è in piena salute" o "Almeno due giocatori sono collegati". Le condizioni di solito hanno un parametro che l'utente deve compilare (usando l'interfaccia utente)
  • Le azioni sono script che possono anche richiedere alcuni semplici parametri. come "Sposta la videocamera su XXX", "Uccidi unità Y", "Game over", "Esegui trigger" e "Chiama azioni X, Y, Z ... in una sequenza"

Nota che la programmazione è per computer IN gioco, non per plugin. Grazie comunque.
Dimitriye98,

Vedo .. sembra un approccio di gioco interessante;). Hai mai provato giochi simili come "Code Hero" o "Garry's Mod" che cercano di fornire funzionalità di codifica senza interrompere l'immersione del gioco? Ad ogni modo, puoi ancora recuperare i miei consigli di base e dividere il problema in script e parti dell'interfaccia utente. Buona fortuna con il tuo gioco. :)
Imi,

Bene, la programmazione verrà eseguita su console per computer in-game, il che non dovrebbe interrompere troppo l'immersione. Sebbene gli utenti che lo desiderano possano codificare fuori dal gioco, importano il codice nel loro salvataggio o nel server su cui giocano.
Dimitriye98,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.