Я використовував двигун Tads3 (www.tads3.org) для деяких текстових пригод, які я написав. Це більше для комп'ютерних програмістів, але дуже потужна мова. Якщо ви програміст, Tads3 буде набагато простіше кодувати речі швидше, ніж Inform7, яким я користувався і раніше. Проблема з програмою Inform7 для програмістів така ж відома, як і «здогадайся дієслова» для гравців текстових пригод, тому що якщо ти не пишеш свої речення ДУЖЕ ретельно, ти збираєшся зламати гру. Якщо у вас є терпіння зробити це, ви можете легко записати аналізатор на Java, використовуючи клас Tokenizer. Приклад Я написав, використовуючи глобальний JTextArea та глобальний масив String []. Він викреслює небажані символи, за винятком листів AZ та 0-9, а також знака питання (для ярлика команди "help"):
// 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
... Я залишив основне визначення класу та метод змінної ініціалізації () тощо, тому що передбачається, що якщо ви знаєте Java, ви вже знаєте, як це налаштувати. Основний клас для цього, ймовірно, повинен поширити JFrame, і у вашому загальнодоступному методі static void main () просто створити його примірник. Сподіваємось, деякі з цього коду допомагають.
ЗРЕШЕНО - Гаразд, тож, що ви будете робити далі, це створити клас "Дії" та сканувати дії (тобто "дістати світильник" або "скинути меч"). Щоб зробити це більш простим, вам доведеться мати об'єкт або метод RoomScan, щоб сканувати все видиме в обсязі і сканувати лише ті об’єкти, які виконують цю дію. Сам об’єкт обробляє обробку дій і за замовчуванням у вас повинен бути клас Item, який обробляє всі відомі дії за замовчуванням, які можна переоцінити. Тепер, якщо, наприклад, елемент, який ви хочете "отримати", міститься символом, який не належить гравцеві, відповідь за замовчуванням для отримання цього предмета у власнику має бути чимось на зразок "Не дозволить вам мати його". Тепер вам доведеться створити тонну відповідей на дії за замовчуванням на це в класі предмет або річ. Це в основному виходить з точки зору Tads3 на весь дизайн. Тому що в Tads3 кожен елемент має свою процедуру обробки дій за замовчуванням на ньому, яку аналізує аналізатор, якщо ініціалізація дії на ньому. Отже ... Я тільки кажу вам, що в Tads3 вже все це на місці, тому ДУЖЕ легко кодувати в текстовій пригоді цією мовою. Але якщо ви хочете зробити це з нуля, як у Java (вище), то я особисто впорався б із цим так само, як і був розроблений Tads3. Таким чином, ви можете змінити дії за замовчуванням, обробляючи підпрограми на самих різних об'єктах, так, наприклад, якщо ви хочете "отримати лампу", а дворецький утримує її, це може викликати відповідь у методі дій "get" за замовчуванням для Item або Об'єкт і скажуть вам, що "дворецький відмовляється здати латунну лампу". Я маю на увазі ... як тільки ти був програмістом досить довго, як у мене, то це все ДУЖЕ легкі речі. Мені старше 50 років і цим займаюся ще з 7 років. Батько був у 70-х років інструктором Hewlett Packard, тому я спочатку навчився йому від TON на комп'ютерному програмуванні. Я також зараз в армії США, як в основному, адміністратор сервера. Гм ... так, так що не здавайся. Це не так важко, як тільки ви дійсно розбиєте його на те, що ви хочете, щоб ваша програма робила. Іноді спроби та помилки є найкращим способом продовжувати подібні речі. Просто випробуй це і побачи, і ніколи не здавайся. Добре? Кодування - це мистецтво. Це можна зробити різними способами. Не дозволяйте так чи інакше здавати вас кутом у дизайні. м також в армійських резервах США як в основному адміністратор сервера зараз. Гм ... так, так що не здавайся. Це не так важко, як тільки ви дійсно розбиєте його на те, що ви хочете, щоб ваша програма робила. Іноді спроби та помилки є найкращим способом продовжувати подібні речі. Просто випробуй це і побачи, і ніколи не здавайся. Добре? Кодування - це мистецтво. Це можна зробити різними способами. Не дозволяйте так чи інакше здавати вас кутом у дизайні. м також в армійських резервах США як в основному адміністратор сервера зараз. Гм ... так, так що не здавайся. Це не так важко, як тільки ви дійсно розбиєте його на те, що ви хочете, щоб ваша програма робила. Іноді спроби та помилки є найкращим способом продовжувати подібні речі. Просто випробуй це і побачи, і ніколи не здавайся. Добре? Кодування - це мистецтво. Це можна зробити різними способами. Не дозволяйте так чи інакше здавати вас кутом у дизайні.