Yazdığım bazı metin maceraları için Tads3 (www.tads3.org) motorunu kullandım. Bilgisayar programcıları için daha çok ama çok güçlü bir dil. Eğer bir programcıysanız Tads3, daha önce kullandığım Inform7'den daha hızlı kodlamak için tonlarca daha kolay olacaktır. Programcılar için Inform7 ile ilgili sorun, "fiil tahmin" kadar ünlüdür metin cümleleri oyuncular için ki eğer cümlelerinizi ÇOK dikkatli yazmazsanız oyunu kıracaksınız. Bunu yapmak için sabrınız varsa, Tokenizer sınıfını kullanarak Java'da kolayca bir ayrıştırıcı yazabilirsiniz. Örnek Bir küresel JTextArea ve bir global String [] dizisi kullanarak yazdım. AZ ve 0-9 yapraklarının yanı sıra soru işaretini ("yardım" komut kısayolu için) hariç istenmeyen karakterleri çıkarır:
// 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
... ana sınıf tanımını ve değişken initialize () yöntemini, vb. Bunun ana sınıfı muhtemelen JFrame'i genişletmeli ve genel statik void main () yönteminizde bunun bir örneğini oluşturmalıdır. Umarım bu kodlardan bazıları yardımcı olur.
DÜZENLENMİŞ - Tamam, şimdi yapacağınız şey bir İşlemler sınıfı oluşturmak ve bir eylem taraması yapmaktır (yani "lamba al" veya "kılıcı düşür"). Daha basit hale getirmek için, kapsamda görünen her şeyi taramak ve yalnızca o eylemdeki nesneleri taramak için bir RoomScan nesnesine veya yöntemine sahip olmanız gerekir. Nesnenin kendisi eylem işlemeyi gerçekleştirir ve varsayılan olarak, bilinen tüm eylemleri varsayılan bir şekilde işlemek için bir Item sınıfına sahip olmanız gerekir. Şimdi, örneğin, "almak" istediğiniz bir öğe oyuncu olmayan bir karakter tarafından tutuluyorsa, o öğenin sahibi tarafından tutulmasına ilişkin varsayılan yanıt "Bu öğeye sahip olmanıza izin vermeyecek" şeklinde olmalıdır. Şimdi Item veya Thing sınıfında buna bir ton varsayılan eylem yanıtı oluşturmanız gerekir. Bu temelde tüm tasarıma Tads3 perspektifinden geliyor. Tads3'te her öğenin üzerinde bir eylem başlatıldığında ayrıştırıcının çağırdığı kendi varsayılan eylem işleme yordamı vardır. Yani ... Sadece söylüyorum, Tads3 zaten bütün bunları yerinde, bu yüzden o dilde bir metin macerasında kodlamak ÇOK kolay. Ancak, Java (yukarıda) gibi sıfırdan yapmak istiyorsanız, o zaman şahsen Tads3'ün tasarlandığı gibi ele alacağım. Bu şekilde, farklı nesnelerdeki rutinleri işleyen varsayılan eylemleri geçersiz kılabilirsiniz, bu nedenle örneğin "lamba almak" ve uşak tutuyorsa, Öğe için varsayılan "get" eylem yönteminde bir yanıt tetikleyebilir veya Object ve size "uşak pirinç lambayı teslim etmeyi reddediyor." Demek istediğim ... bir kez benim kadar uzun bir programcı olduktan sonra, hepsi çok kolay. 50 yaşın üzerindeyim ve bunu 7 yaşımdan beri yapıyorum. Babam 70'li yıllarda bir Hewlett Packard eğitmeniydi, bu yüzden başlangıçta bilgisayar programlama konusunda ondan bir TON öğrendim. Ayrıca şu anda ABD Ordusu Yedekleri'nde sunucu yöneticisi olarak bulunuyorum. Um ... evet, pes etme. Programınızın yapmasını istediğiniz şeye gerçekten böldüğünüzde o kadar da zor değil. Bazen deneme yanılma bu tür şeylere devam etmenin en iyi yoludur. Sadece test edin ve görün ve asla vazgeçmeyin. Tamam? Kodlama bir sanattır. Birçok farklı şekilde yapılabilir. Bir şekilde ya da diğerinin sizi tasarım köşesinde engellemesine izin vermeyin. Ayrıca şimdi ABD Ordusu Rezervleri m bir sunucu yöneticisi olarak. Um ... evet, pes etme. Programınızın yapmasını istediğiniz şeye gerçekten böldüğünüzde o kadar da zor değil. Bazen deneme yanılma bu tür şeylere devam etmenin en iyi yoludur. Sadece test edin ve görün ve asla vazgeçmeyin. Tamam? Kodlama bir sanattır. Birçok farklı şekilde yapılabilir. Bir şekilde ya da diğerinin sizi tasarım köşesinde engellemesine izin vermeyin. Ayrıca şimdi ABD Ordusu Rezervleri m bir sunucu yöneticisi olarak. Um ... evet, pes etme. Programınızın yapmasını istediğiniz şeye gerçekten böldüğünüzde o kadar da zor değil. Bazen deneme yanılma bu tür şeylere devam etmenin en iyi yoludur. Sadece test edin ve görün ve asla vazgeçmeyin. Tamam? Kodlama bir sanattır. Birçok farklı şekilde yapılabilir. Bir şekilde ya da diğerinin sizi tasarım köşesinde engellemesine izin vermeyin.