Użyłem silnika Tads3 (www.tads3.org) do niektórych tekstowych przygód, które napisałem. Jest to jednak bardziej dla programistów komputerowych, ale bardzo mocny język. Jeśli jesteś programistą, Tads3 będzie o wiele łatwiej kodować rzeczy szybciej niż Inform7, z którego również wcześniej korzystałem. Problem z Inform7 dla programistów jest tak znany, jak „odgadnięcie czasownika” dla graczy tekstowych, ponieważ jeśli nie napiszesz zdań BARDZO ostrożnie, zepsujesz grę. Jeśli masz na to cierpliwość, możesz łatwo napisać analizator składni w Javie, używając klasy Tokenizer. Przykład napisałem przy użyciu globalnego JTextArea i globalnej tablicy String []. Usuwa niechciane znaki oprócz liści AZ i 0-9, a także znak zapytania (skrót „pomocy”):
// 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
... Pominąłem definicję głównej klasy i metodę initialize () itd., Ponieważ zakłada się, że jeśli znasz Javę, wiesz już, jak to skonfigurować. Główna klasa do tego powinna prawdopodobnie rozszerzyć JFrame, a publiczna metoda static (void main () po prostu stwórz jego instancję. Mam nadzieję, że część tego kodu pomaga.
EDYTOWANE - OK, więc teraz powinieneś stworzyć klasę akcji i skanować w poszukiwaniu akcji (tj. „Zdobądź lampę” lub „upuść miecz”). Aby to uprościć, musisz mieć obiekt lub metodę RoomScan, aby skanować wszystko widoczne w zakresie i skanować tylko te obiekty w tej akcji. Sam obiekt obsługuje obsługę akcji i domyślnie powinieneś mieć klasę Item obsługującą wszystkie znane akcje w domyślny sposób, który można obejść. Teraz, na przykład, jeśli przedmiot, który chcesz „zdobyć”, znajduje się w posiadaniu postaci niebędącej graczem, domyślną odpowiedzią na zdobycie tego przedmiotu przez właściciela powinien być coś w rodzaju „Nie pozwoli ci go mieć”. Teraz musisz stworzyć mnóstwo domyślnych odpowiedzi na akcję w klasie Przedmiot lub Rzecz. Zasadniczo pochodzi to z perspektywy Tads3 w całym projekcie. Ponieważ w Tads3 każdy element ma własną domyślną procedurę obsługi akcji, którą wywołuje parser, jeśli akcja na nim zostanie zainicjowana. Więc ... Mówię tylko, Tads3 ma to wszystko na swoim miejscu, więc BARDZO łatwo jest napisać tekstową przygodę w tym języku. Ale jeśli chcesz to zrobić od zera, tak jak w Javie (powyżej), osobiście poradziłbym sobie z nim w ten sam sposób, w jaki zaprojektowano Tads3. W ten sposób można zastąpić domyślne procedury obsługi akcji na różnych obiektach, więc na przykład, jeśli chcesz „dostać lampę”, a kamerdyner ją trzyma, może wywołać odpowiedź w domyślnej metodzie akcji „get” dla przedmiotu lub Object i powiedzą ci, że „kamerdyner odmawia przekazania mosiężnej lampy”. Mam na myśli ... kiedy jesteś programistą wystarczająco długo, jak ja, to wszystko jest BARDZO łatwe. Mam ponad 50 lat i robię to, odkąd skończyłem 7 lat. Mój ojciec był instruktorem Hewlett Packard w latach 70., więc nauczyłem się od niego TON na temat programowania komputerowego. Jestem teraz w rezerwach armii amerykańskiej jako administrator serwera. Um ... tak, więc nie poddawaj się. Nie jest to takie trudne, kiedy naprawdę rozbijesz to, co chcesz, aby twój program zrobił. Czasami metoda prób i błędów jest najlepszym sposobem na zrobienie czegoś takiego. Po prostu przetestuj i zobacz i nigdy się nie poddawaj. W porządku? Kodowanie to sztuka. Można to zrobić na wiele różnych sposobów. Nie pozwól, aby jeden lub drugi sposób blokował cię w kącie projektowania. m również w rezerwach armii amerykańskiej jako administrator serwera. Um ... tak, więc nie poddawaj się. Nie jest to takie trudne, kiedy naprawdę rozbijesz to, co chcesz, aby twój program zrobił. Czasami metoda prób i błędów jest najlepszym sposobem na zrobienie czegoś takiego. Po prostu przetestuj i zobacz i nigdy się nie poddawaj. W porządku? Kodowanie to sztuka. Można to zrobić na wiele różnych sposobów. Nie pozwól, aby jeden lub drugi sposób blokował cię w kącie projektowania. m również w rezerwach armii amerykańskiej jako administrator serwera. Um ... tak, więc nie poddawaj się. Nie jest to takie trudne, kiedy naprawdę rozbijesz to, co chcesz, aby twój program zrobił. Czasami metoda prób i błędów jest najlepszym sposobem na zrobienie czegoś takiego. Po prostu przetestuj i zobacz i nigdy się nie poddawaj. W porządku? Kodowanie to sztuka. Można to zrobić na wiele różnych sposobów. Nie pozwól, aby jeden lub drugi sposób blokował cię w kącie projektowania.