मैंने लिखे गए कुछ टेक्स्ट एडवेंचर के लिए Tads3 (www.tads3.org) इंजन का इस्तेमाल किया। यह कंप्यूटर प्रोग्रामर के लिए अधिक है, लेकिन बहुत शक्तिशाली भाषा है। यदि आप एक प्रोग्रामर हैं तो Tads3 को Inform7 की तुलना में चीजों को तेजी से कोड करना आसान होगा, जिसे मैंने पहले भी इस्तेमाल किया है। प्रोग्रामर के लिए Inform7 की समस्या उतनी ही प्रसिद्ध है जितनी "अंदाज क्रिया" पाठ रोमांच के खिलाड़ियों के लिए है कि यदि आप अपने वाक्य नहीं लिखते हैं तो बहुत सावधानी से आप खेल को तोड़ने जा रहे हैं। यदि आपके पास ऐसा करने का धैर्य है, तो आप टोकनर क्लास का उपयोग करके आसानी से जावा में एक पार्सर लिख सकते हैं। उदाहरण मैंने एक वैश्विक JTextArea और एक वैश्विक स्ट्रिंग [] सरणी का उपयोग करके लिखा है। यह AZ और 0-9 के साथ-साथ प्रश्न चिह्न ("मदद" कमांड शॉर्टकट के लिए) को छोड़कर अवांछित वर्णों को अलग करता है:
// 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
... मैंने मुख्य वर्ग की परिभाषा और चर आरंभीकरण () विधि, आदि को छोड़ दिया क्योंकि यह माना जाता है कि यदि आप जावा को जानते हैं तो आप पहले से ही जानते हैं कि इसे कैसे सेट किया जाए। इसके लिए मुख्य वर्ग शायद JFrame का विस्तार करना चाहिए और आपके सार्वजनिक स्थैतिक शून्य मुख्य () विधि में इसका एक उदाहरण बनाना चाहिए। उम्मीद है कि इस कोड में से कुछ मदद करता है।
आदर्श - ठीक है, तो अब आप आगे क्या करेंगे एक एक्शन क्लास बनाएं और एक एक्शन के लिए स्कैन करें (यानी "दीपक प्राप्त करें" या "ड्रॉप तलवार")। इसे सरल बनाने के लिए आपको गुंजाइश में दिखाई देने वाली हर चीज को स्कैन करने के लिए एक रूमस्कैन ऑब्जेक्ट या तरीका होना चाहिए और उस एक्शन पर केवल उन ऑब्जेक्ट्स के लिए स्कैन करना होगा। ऑब्जेक्ट स्वयं एक्शन हैंडलिंग को संभालता है और डिफ़ॉल्ट रूप से आपके पास एक आइटम क्लास होना चाहिए जो सभी ज्ञात क्रियाओं को डिफ़ॉल्ट रूप से संभालता है, जिसे ओवर-राइड किया जा सकता है। अब, यदि उदाहरण के लिए, एक आइटम जिसे आप "प्राप्त करना चाहते हैं" एक गैर-खिलाड़ी चरित्र द्वारा आयोजित किया जाता है, तो उस आइटम को उसके मालिक द्वारा प्राप्त करने के लिए डिफ़ॉल्ट प्रतिक्रिया कुछ इस तरह होनी चाहिए "जैसे कि आपके पास यह नहीं होगा।" अब आपको आइटम या थिंग क्लास में इस पर डिफ़ॉल्ट कार्रवाई प्रतिक्रियाओं का एक टन बनाना होगा। यह मूल रूप से सभी डिजाइन पर एक Tads3 परिप्रेक्ष्य से आ रहा है। क्योंकि Tads3 में प्रत्येक आइटम का अपना डिफॉल्ट एक्शन हैंडलिंग रूटीन होता है, जिस पर पार्सर कॉल करता है यदि उस पर कोई कार्रवाई शुरू होती है। तो ... मैं आपको बता रहा हूं, Tads3 में पहले से ही यह सब है, इसलिए यह बहुत ही आसान है कि उस भाषा में एक टेक्स्ट एडवेंचर में कोड करें। लेकिन अगर आप इसे स्क्रैच से करना चाहते हैं, जैसे कि जावा (ऊपर) में, तो मैं व्यक्तिगत रूप से इसे उसी तरह से संभालूंगा जिस तरह से टैडस 3 को डिजाइन किया गया था। इस तरह, आप विभिन्न ऑब्जेक्ट्स पर रूटीन को संभालने वाली डिफ़ॉल्ट क्रियाओं को स्वयं ओवरराइड कर सकते हैं, इसलिए उदाहरण के लिए यदि आप "दीपक प्राप्त करना चाहते हैं" और बटलर इसे पकड़ रहा है, तो यह आइटम के लिए डिफ़ॉल्ट के "प्राप्त" एक्शन विधि में एक प्रतिक्रिया को ट्रिगर कर सकता है। या ऑब्जेक्ट और आपको बता दें कि "बटलर पीतल के दीपक को सौंपने से इनकार करता है।" मेरा मतलब है ... एक बार जब आप एक प्रोग्रामर की तरह लंबे समय तक मेरे पास हैं, तो यह सब बहुत आसान सामान है। मैं 50 साल से अधिक उम्र का हूं और जब मैं 7 साल का था तब से ऐसा कर रहा हूं। मेरे पिता 70 के दशक में हेवलेट पैकर्ड इंस्ट्रक्टर थे इसलिए मैंने शुरू में उनसे कंप्यूटर प्रोग्रामिंग पर एक TON सीखा। मैं यूएस आर्मी रिज़र्व में भी मूल रूप से सर्वर प्रशासक के रूप में हूँ। बेनाम: उम ... बेनाम: हाँ, तो हार मत करो। यह कठिन नहीं है कि एक बार आप वास्तव में इसे तोड़ दें जो आप अपने कार्यक्रम को करना चाहते हैं। कभी-कभी परीक्षण और त्रुटि इस तरह के सामान पर जाने का सबसे अच्छा तरीका है। बस इसे परखें और देखें और कभी हार न मानें। ठीक है? कोडिंग एक कला है। यह कई अलग-अलग तरीकों से किया जा सकता है। एक तरह से या दूसरे को डिजाइन पर एक कोने में ब्लॉक करने न दें। अमेरिकी सेना में भी मी मूल रूप से एक सर्वर प्रशासक के रूप में आरक्षित है। बेनाम: उम ... बेनाम: हाँ, तो हार मत करो। यह कठिन नहीं है कि एक बार आप वास्तव में इसे तोड़ दें जो आप अपने कार्यक्रम को करना चाहते हैं। कभी-कभी परीक्षण और त्रुटि इस तरह के सामान पर जाने का सबसे अच्छा तरीका है। बस इसे परखें और देखें और कभी हार न मानें। ठीक है? कोडिंग एक कला है। यह कई अलग-अलग तरीकों से किया जा सकता है। एक तरह से या दूसरे को डिजाइन पर एक कोने में ब्लॉक करने न दें। अमेरिकी सेना में भी मी मूल रूप से एक सर्वर प्रशासक के रूप में आरक्षित है। बेनाम: उम ... बेनाम: हाँ, तो हार मत करो। यह कठिन नहीं है कि एक बार आप वास्तव में इसे तोड़ दें जो आप अपने कार्यक्रम को करना चाहते हैं। कभी-कभी परीक्षण और त्रुटि इस तरह के सामान पर जाने का सबसे अच्छा तरीका है। बस इसे परखें और देखें और कभी हार न मानें। ठीक है? कोडिंग एक कला है। यह कई अलग-अलग तरीकों से किया जा सकता है। एक तरह से या दूसरे को डिजाइन पर एक कोने में ब्लॉक करने न दें।