Utilicé el motor Tads3 (www.tads3.org) para algunas de las aventuras de texto que escribí. Sin embargo, es más para programadores informáticos, pero es un lenguaje muy poderoso. Si eres un programador, Tads3 será mucho más fácil codificar cosas más rápido que Inform7, que también he usado antes. El problema con Inform7 para programadores es tan famoso como "adivina el verbo" es para los jugadores de aventuras de texto en el sentido de que si no escribes tus oraciones MUY cuidadosamente, vas a romper el juego. Si tiene paciencia para hacerlo, puede escribir fácilmente un analizador en Java utilizando la clase Tokenizer. Ejemplo que escribí usando un JTextArea global y una matriz global String []. Elimina los caracteres no deseados, excepto las hojas AZ y 0-9, así como el signo de interrogación (para un atajo de comando "ayuda"):
// 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
... Dejé de lado la definición de clase principal y el método initialize () de variable, etc. porque se supone que si conoces Java ya sabes cómo configurarlo. La clase principal para esto probablemente debería extender JFrame y en su método public main void main () simplemente cree una instancia de él. Esperemos que algo de este código ayude.
EDITADO - Bien, ahora lo que harías a continuación es crear una clase de Acciones y buscar una acción (es decir, "obtener lámpara" o "soltar espada"). Para hacerlo más simple, tendría que tener un objeto o método RoomScan para escanear todo lo visible en el alcance y escanear solo aquellos objetos en esa acción. El objeto en sí mismo maneja el manejo de la acción y, de manera predeterminada, debe tener una clase Item que maneje todas las acciones conocidas de manera predeterminada, lo que se puede anular. Ahora, si, por ejemplo, un elemento que quieres "obtener" está en manos de un personaje que no es jugador, la respuesta predeterminada para que su propietario tenga ese elemento debería ser algo así como "No te permitirá tenerlo". Ahora tendría que crear un montón de respuestas de acción predeterminadas para esto en la clase Item o Thing. Básicamente, esto proviene de una perspectiva de Tads3 sobre todo el diseño. Debido a que en Tads3 cada elemento tiene su propia rutina de manejo de acción predeterminada que llama el analizador si se inicializa una acción en él. Entonces ... solo te digo que Tads3 ya tiene todo esto en su lugar, por lo que es MUY fácil de codificar en una aventura de texto en ese idioma. Pero si quieres hacerlo desde cero, como en Java (arriba), personalmente lo manejaría de la misma manera que Tads3 fue diseñado. De esa forma, puede anular las acciones predeterminadas que manejan rutinas en diferentes objetos, por lo que, por ejemplo, si desea "obtener la lámpara" y el mayordomo la sostiene, podría desencadenar una respuesta en el método de acción "obtener" predeterminado para el Elemento u Objeto y decirte que "El mayordomo se niega a entregar la lámpara de bronce". Quiero decir ... una vez que has sido programador el tiempo suficiente como yo, entonces todo esto es MUY fácil. Tengo más de 50 años y he estado haciendo esto desde que tenía 7 años. Mi padre era instructor de Hewlett Packard en los años 70, así que aprendí un TON de él inicialmente en programación de computadoras. También estoy en las Reservas del Ejército de los EE. UU. Como básicamente un administrador del servidor ahora. Um ... sí, así que no te rindas. No es tan difícil una vez que realmente lo desglosas en lo que quieres que haga tu programa. A veces, la prueba y error es la mejor manera de hacer este tipo de cosas. Solo pruébalo y mira y nunca te rindas. ¿Bueno? La codificación es un arte. Se puede hacer de muchas maneras diferentes. No dejes que una forma u otra parezcan bloquearte en una esquina en el diseño. También estoy en las Reservas del Ejército de los Estados Unidos como básicamente un administrador de servidores ahora. Um ... sí, así que no te rindas. No es tan difícil una vez que realmente lo desglosas en lo que quieres que haga tu programa. A veces, la prueba y error es la mejor manera de hacer este tipo de cosas. Solo pruébalo y mira y nunca te rindas. ¿Bueno? La codificación es un arte. Se puede hacer de muchas maneras diferentes. No dejes que una forma u otra parezcan bloquearte en una esquina en el diseño. También estoy en las Reservas del Ejército de los Estados Unidos como básicamente un administrador de servidores ahora. Um ... sí, así que no te rindas. No es tan difícil una vez que realmente lo desglosas en lo que quieres que haga tu programa. A veces, la prueba y error es la mejor manera de hacer este tipo de cosas. Solo pruébalo y mira y nunca te rindas ¿Bueno? La codificación es un arte. Se puede hacer de muchas maneras diferentes. No dejes que una forma u otra parezcan bloquearte en una esquina en el diseño.