J'ai utilisé le moteur Tads3 (www.tads3.org) pour certaines des aventures textuelles que j'ai écrites. C'est plus pour les programmeurs informatiques mais c'est un langage très puissant. Si vous êtes un programmeur, Tads3 sera beaucoup plus facile à coder plus rapidement que Inform7, que j'ai également utilisé auparavant. Le problème avec Inform7 pour les programmeurs est aussi célèbre que "devinez le verbe" est pour les joueurs d'aventures de texte en ce que si vous n'écrivez pas vos phrases TRÈS soigneusement, vous allez casser le jeu. Si vous avez la patience de le faire, vous pouvez facilement écrire un analyseur en Java en utilisant la classe Tokenizer. Exemple, j'ai écrit en utilisant un JTextArea global et un tableau String [] global. Il supprime les caractères indésirables, sauf laisse AZ et 0-9 ainsi que le point d'interrogation (pour un raccourci de commande "aide"):
// put these as global variables just after your main class definition
public static String[] parsed = new String[100];
// outputArea should be a non-editable JTextArea to display our results
JTextArea outputArea = new JTextArea();
/*
* parserArea is the JTextBox used to grab input
* and be sure to MAKE sure somewhere to add a
* java.awt.event.KeyListener on it somewhere where
* you initialize all your variables and setup the
* constraints settings for your JTextBox's.
* The KeyListener method should listen for the ENTER key
* being pressed and then call our parseText() method below.
*/
JTextArea parserArea = new JTextArea();
public void parseText(){
String s0 = parserArea.getText();// parserArea is our global JTextBox
s0 = s0.replace(',',' ');
s0 = s0.replaceAll("[^a-zA-Z0-9? ]","");
// reset parserArea back to a clean starting state
parserArea.setCaretPosition(0);
parserArea.setText("");
// erase what had been parsed before and also make sure no nulls found
for(int i=0;i < parsed.length; i++){
parsed[i] = "";
}
// split the string s0 to array words by breaking them up between spaces
StringTokenizer tok = new StringTokenizer(s0, " ");
// use tokenizer tok and dump the tokens into array: parsed[]
int iCount = 0;
if(tok.countTokens() > 0){
while(tok.hasMoreElements()){
try{
parsed[iCount] = tok.nextElement().toString();
if(parsed[iCount] != null && parsed[iCount].length()>1){
// if a word ENDS in ? then strip it off
parsed[iCount] = parsed[iCount].replaceAll("[^a-zA-Z0-9 ]","");
}
}catch(Exception e){
e.printStackTrace();
}
iCount++;
}
/*
* handle simple help or ? command.
* parsed[0] is our first word... parsed[1] the second, etc.
* we can use iCount from above as needed to see how many...
* ...words got found.
*/
if(parsed[0].equalsIgnoreCase("?") ||
parsed[0].equalsIgnoreCase("help")){
outputArea.setText("");// erase the output "screen"
outputArea.append("\nPut help code in here...\n");
}
}
// handle other noun and verb checks of parsed[] array in here...
}// end of if(tok.countTokens() > 0)...
}// end of public void parseText() method
... J'ai laissé de côté la définition de la classe principale et la méthode initialize () de la variable, etc. car il est supposé que si vous connaissez Java, vous savez déjà comment le configurer. La classe principale pour cela devrait probablement étendre JFrame et dans votre méthode publique statique void main (), créez-en simplement une instance. Si tout va bien une partie de ce code aide.
ÉDITÉ - D'accord, alors maintenant, ce que vous feriez ensuite, c'est de créer une classe Actions et de rechercher une action (c'est-à-dire "obtenir une lampe" ou "déposer une épée"). Pour simplifier, vous devez disposer d'un objet ou d'une méthode RoomScan pour analyser tout ce qui est visible dans la portée et rechercher uniquement les objets de cette action. L'objet lui-même gère la gestion des actions et par défaut, vous devriez avoir une classe Item qui gère toutes les actions connues de manière par défaut, qui peut être remplacée. Maintenant, si par exemple, un objet que vous voulez "obtenir" est détenu par un personnage non joueur, la réponse par défaut pour obtenir cet objet détenu par son propriétaire devrait être quelque chose comme "Le ne vous laissera pas l'avoir". Vous devez maintenant créer une tonne de réponses d'action par défaut à cela dans la classe Item ou Thing. Cela vient essentiellement d'une perspective Tads3 sur la conception globale. Parce que dans Tads3, chaque élément a sa propre routine de gestion d'actions par défaut que l'analyseur appelle si une action est initialisée. Donc ... Je vous dis juste que Tads3 a déjà tout cela en place, donc c'est TRÈS facile de coder dans une aventure de texte dans cette langue. Mais si vous voulez le faire à partir de zéro, comme en Java (ci-dessus), alors je le gérerais de la même manière que Tads3 a été conçu. De cette façon, vous pouvez remplacer les actions par défaut gérant les routines sur différents objets eux-mêmes, donc par exemple si vous voulez "obtenir la lampe" et que le majordome la tient, cela pourrait déclencher une réponse dans la méthode d'action "get" par défaut pour Item ou Objet et vous dire que "Le majordome refuse de remettre la lampe en laiton." Je veux dire ... une fois que vous avez été un programmeur assez longtemps comme moi, alors tout cela est TRÈS facile. J'ai plus de 50 ans et je fais cela depuis l'âge de 7 ans. Mon père était instructeur Hewlett Packard dans les années 70, j'ai donc appris une tonne de lui au départ sur la programmation informatique. Je suis également dans les réserves de l'armée américaine en tant qu'administrateur de serveur. Hum ... ouais, alors n'abandonne pas. Ce n'est pas si difficile une fois que vous avez vraiment décomposé ce que vous voulez que votre programme fasse. Parfois, les essais et les erreurs sont la meilleure façon de procéder sur ce genre de choses. Il suffit de le tester et de voir et de ne jamais abandonner. D'accord? Le codage est un art. Cela peut se faire de différentes manières. Ne laissez pas d'une manière ou d'une autre vous bloquer dans un coin sur le design. m également dans les réserves de l'armée américaine en tant qu'administrateur de serveur maintenant. Hum ... ouais, alors n'abandonne pas. Ce n'est pas si difficile une fois que vous avez vraiment décomposé ce que vous voulez que votre programme fasse. Parfois, les essais et les erreurs sont la meilleure façon de procéder sur ce genre de choses. Il suffit de le tester et de voir et de ne jamais abandonner. D'accord? Le codage est un art. Cela peut se faire de différentes manières. Ne laissez pas d'une manière ou d'une autre vous bloquer dans un coin sur le design. m également dans les réserves de l'armée américaine en tant qu'administrateur de serveur maintenant. Hum ... ouais, alors n'abandonne pas. Ce n'est pas si difficile une fois que vous avez vraiment décomposé ce que vous voulez que votre programme fasse. Parfois, les essais et les erreurs sont la meilleure façon de procéder sur ce genre de choses. Il suffit de le tester et de voir et de ne jamais abandonner. D'accord? Le codage est un art. Cela peut se faire de différentes manières. Ne laissez pas d'une manière ou d'une autre vous bloquer dans un coin sur le design.