लेकिन हम कहते हैं: यहाँ दुनिया के अंत में इस गुफा में, बौनों और ट्रोल्स ने डेथ के तहत हाथ में हाथ डालकर शांति कायम की।
और हम कहते हैं: हमारा दुश्मन ट्रोल नहीं है और बौना नहीं है, लेकिन क्रोध, निंदा, कायरता, घृणा के बर्तन, जो लोग अच्छे की आड़ में बुराई करते हैं। यही है कि हम आज के साथ लड़े, लेकिन मूर्खों की जिद हमेशा के लिए है और वे कहते हैं ... कि यह झूठ है
सर टेरी प्रैटचेटपिछले
लेख में , मैंने ट्रेवर त्रुरान द्वारा विकसित मूल बोर्ड
गेम के बारे में बात की थी, जो प्रसिद्ध अंग्रेजी लेखक टेरी प्रताप के कामों पर आधारित था। 2005 में, ट्रूरान ने उसी बोर्ड पर समान टुकड़ों के सेट का उपयोग करके एक नया
गेम विकसित किया। इस गेम का नाम है "
कोम वैली थुड " और, आज, मैं इसे लागू करने की कोशिश करूंगा, संयोग से ZRF भाषा की उन विशेषताओं के बारे में बता रहा हूं, जिनके बारे में पहले बताने के लिए मेरे पास समय नहीं था।
आपको याद दिला दें कि ZRF एक गेम रूल्स डिस्क्रिप्शन लैंग्वेज (लिस्पिनेंट की याद दिलाता) है, जिसका इस्तेमाल
Zillions of Games द्वारा किया जाता है। इस तथ्य के बावजूद कि इसके कुछ कठिन बिंदु हैं, सामान्य तौर पर, यह काफी सरल है और किसी के द्वारा भी मास्टर किया जा सकता है, यहां तक कि प्रोग्रामिंग से बहुत दूर। ZoG गेम कोर का मुख्य लाभ इसकी बहुमुखी प्रतिभा है। नियमों का वर्णन करने के बाद, हम, लगभग तुरंत, एक नया खेल प्राप्त करते हैं। यद्यपि AI ZoG विशेष गेम इंजन से नीच है, यह आश्चर्यजनक रूप से, शक्तिशाली रूप से खेलता है। दुर्भाग्य से, एप्लिकेशन का मुफ्त डेमो संस्करण आपको केवल सीमित गेम चलाने की अनुमति देता है और आपको अपने स्वयं के डिज़ाइन के ZRF विवरण डाउनलोड करने की अनुमति नहीं देता है।
हमेशा की तरह, मैं खेल के नियमों के साथ शुरू करूँगा।
कोम वैली थुड के बोर्ड में मूल
थूड बोर्ड से एकमात्र अंतर है - केंद्रीय क्षेत्र टुकड़ा चाल के लिए उपलब्ध है। खेल की शुरुआत में उस पर स्थित "रॉक" क्षेत्र के चारों ओर घूम सकता है। बौने खेल का लक्ष्य बोर्ड के अंतिम क्षैतिज पर "रॉक" को खींचना है। जीतने के लिए, ट्रोल को कम से कम तीन आंकड़ों के साथ "रॉक" को घेरने की जरूरत है, और उन्हें अपने दम पर ऐसा करना होगा।
आंकड़ों की चाल में और अधिक गंभीर बदलाव आए हैं। ट्रॉल्स, इस खेल में, किसी भी दिशा में (दो, तीन या तीन कोशिकाओं को ले जा सकते हैं (लंबवत, क्षैतिज या तिरछे)। प्रतिद्वंद्वी के टुकड़ों को चेकर्स के नियमों के अनुसार लिया जाता है - ट्रोल कूदता है जो गनोम (अगली सेल पर स्थित) पर कूदता है और अगले सेल पर रुकते हुए बोर्ड से इसका आंकड़ा निकालता है। चेकर्स में, कैद की श्रृंखला को जारी रखा जा सकता है, लेकिन, उनके विपरीत, खिलाड़ी के अनुरोध पर कब्जा कर लिया जाता है। साथ ही आंदोलनों, कब्जा किसी भी दिशा में किया जा सकता है। ट्रोल अपने आंकड़े और "रॉक" पर कूद नहीं सकते।
बौने, पहले की तरह, लंबवत या तिरछे किसी भी संख्या में कोशिकाओं में जा सकते हैं (जैसे कि शतरंज में रानी)। क्षेत्र से ट्रोल के आंकड़े को हटाने के लिए, दोनों तरफ gnomes को "घेरना" चाहिए (इस संबंध में, खेल
टफल जैसा दिखता है, इस अंतर के साथ कि विकर्णों के साथ "घेरना" संभव है)। पाठ्यक्रम के दौरान, कई ट्रॉल्स को बोर्ड से हटाया जा सकता है (यदि उनमें से सभी बौनों द्वारा "घिरे" थे)। एक टुकड़े के साथ आगे बढ़ने के बजाय, बौने किसी भी दिशा में रॉक एक सेल को स्थानांतरित कर सकते हैं। इस तरह के आंदोलन के लिए एक शर्त यह है कि आंदोलन के प्रारंभिक और अंतिम दोनों बिंदु पर सूक्ति के आंकड़े की निकटता (पड़ोसी को एक ही सूक्ति होना जरूरी नहीं है)। बौने आकार पर नहीं कूद सकते।
एक बार जब आप नियमों को समझ जाते हैं, तो आप ZRF पर उनका वर्णन करना शुरू कर सकते हैं। मैं यहाँ बोर्ड और खेल का वर्णन करने वाले मैक्रोज़ नहीं दूंगा।
थुड से उनके मतभेद न्यूनतम हैं, इसके अलावा, गेम का पूरा विवरण हमेशा
गिटहब पर पाया जा सकता
है । आइए कम स्पष्ट चीजों पर ध्यान दें। ट्रॉल्स की तरफ से, हमें दो मौलिक अलग-अलग चाल (कब्जा के साथ और बिना) की संभावनाओं का वर्णन करने की आवश्यकता है। इसके अलावा, अगर एक टुकड़ा लिया जाता है, तो अगले कदम को केवल कैप्चर किया जा सकता है। यह निम्नानुसार किया जाता है:
सबसे पहले, सामान्य ट्रोल चाल का वर्णन करें।( define kv-troll ( $1 (verify empty?) add $1 (verify empty?) add $1 (verify empty?) add ) )
यह कहा जाता है कि एक आकृति संकेतित दिशा में एक, दो या तीन कोशिकाओं के लिए खाली कोशिकाओं के साथ चल सकती है।
अगला, हम ले जाने के साथ कदम का वर्णन करते हैं ( define kv-troll-capturing ( $1 (verify (piece? Dwarf) ) capture $1 (verify empty?) (add-partial capturing-type) ) )
हम संकेतित दिशा में आगे बढ़ते हैं और, यदि सूक्ति पिंजरे पर स्थित है, तो इसे बोर्ड से हटा दें। हम अगले सेल खाली होने पर आगे बढ़ते हैं और नए निर्देश
ऐड-आंशिक के पाठ्यक्रम को समाप्त करते हैं।
ऐड के विपरीत, यह आपको एक आंशिक चाल करने की अनुमति देता है। एक पैरामीटर के रूप में,
ऐड-आंशिक निर्देश को उस प्रकार का पास दिया जाता है जिसमें निरंतरता होनी चाहिए। टुकड़े के विवरण में चाल के प्रकार परिभाषित किए गए हैं:
चाल के प्रकार (piece (name Troll) (image Trolls "images\gluk\T.bmp") (description "Troll") (moves (move-type capturing-type) (kv-troll-capturing n) (kv-troll-capturing ne) (kv-troll-capturing e) (kv-troll-capturing nw) (kv-troll-capturing s) (kv-troll-capturing se) (kv-troll-capturing w) (kv-troll-capturing sw) (move-type non-capturing-type) (kv-troll n) (kv-troll ne) (kv-troll e) (kv-troll nw) (kv-troll s) (kv-troll se) (kv-troll w) (kv-troll sw) ) )
गेम (
गेम ) के विवरण के स्तर पर,
चाल-प्राथमिकताओं के निर्देश चालों के प्रकारों के लिए प्राथमिकताएं निर्धारित कर सकते हैं, कैप्चर को अनिवार्य बना सकते हैं (जैसा कि चेकर्स में), लेकिन हम ऐसा नहीं करेंगे, खिलाड़ी को विकल्प देगा। सूक्ति की चाल को सरल रूप से वर्णित किया गया है:
सूक्ति की चाल ( define check-troll ( if (enemy? $1) mark $1 ( if (piece? Dwarf $1) capture ) back ) ) ( define kv-dwarf ( $1 ( while empty? ( if on-board? (check-troll n) (check-troll nw) (check-troll s) (check-troll sw) (check-troll w) (check-troll ne) (check-troll e) (check-troll se) add ) $1 ) ) )
इस कदम को समाप्त करते हुए, हम विपरीत दिशा में सूक्ति द्वारा "घिरे" ट्रोल की उपस्थिति के लिए सभी दिशाओं की जांच करते हैं और बोर्ड से पाए गए आंकड़े हटाते हैं। यह ध्यान देने योग्य है कि विधेय
टुकड़ा? यह दो पैरामीटर ले सकता है - आकार और दिशा का प्रकार (जो आपको पड़ोसी सेल में जाने के बिना चेक प्रदर्शन करने की अनुमति देता है)। यह "रॉक" के आंदोलन का वर्णन करने के लिए बनी हुई है:
"रॉक" ले जाएँ ( define rock ( (verify (or (piece? Dwarf n) (piece? Dwarf nw) (piece? Dwarf s) (piece? Dwarf sw) (piece? Dwarf w) (piece? Dwarf ne) (piece? Dwarf e) (piece? Dwarf se) ) ) $1 (verify empty?) (verify (or (piece? Dwarf n) (piece? Dwarf nw) (piece? Dwarf s) (piece? Dwarf sw) (piece? Dwarf w) (piece? Dwarf ne) (piece? Dwarf e) (piece? Dwarf se) ) ) add ) )
मुख्य कठिनाई, हमेशा की तरह, गिनती से संबंधित है। हमें ट्रॉल्स की जीत के लिए स्थिति निर्धारित करने की आवश्यकता है, क्योंकि उनके तीन आंकड़ों के साथ "रॉक" का पड़ोस है। यह
सापेक्ष-विन्यास निर्देश का उपयोग करके प्राप्त किया जा सकता है, यह
टिक-टैक-टो के कार्यान्वयन में कैसे किया गया था, इसके समान है, लेकिन हमें आसन्न आंकड़ों के सभी रिश्तेदार पदों का वर्णन करने की आवश्यकता होगी (जो अपने आप में एक दिलचस्प द्विवार्षिक समस्या है) और, सबसे क्या है सबसे महत्वपूर्ण बात यह है कि ऐसी स्थिति ट्रोल्स और ग्नोम्स (जो खेल की स्थितियों के विपरीत है) के दौरान काम करेगी।
एक और तरीका है ( define check-proximity ( if (on-board? $1) ( if (friend? $1) ( if (flag? is-second) change-owner else ( set-flag is-second true ) ) ) ) ) ( define check-rock-direction ( set-flag is-second false ) ( if (on-board? $1) $1 ( if (and enemy? (piece? Rock) ) ( check-proximity $2 ) ( check-proximity $3 ) ( check-proximity $4 ) ( check-proximity $5 ) ( check-proximity $6 ) ( check-proximity $7 ) ( check-proximity $8 ) ) $5 ) ) ( define check-rock ( check-rock-direction n ne e se s sw w nw) ( check-rock-direction ne e se s sw w nw n) ( check-rock-direction e se s sw w nw n ne) ( check-rock-direction se s sw w nw n ne e) ( check-rock-direction s sw w nw n ne e se) ( check-rock-direction sw w nw n ne e se s) ( check-rock-direction w nw n ne e se s sw) ( check-rock-direction nw n ne e se s sw w) )
यह मैक्रो आपको यह जांचने के लिए ट्रोल चालन करने की अनुमति देता है कि क्या "रॉक", दो अन्य ट्रोल्स के समीप है, इस कदम के अंतिम बिंदु के समीप है। इसका उपयोग इस प्रकार किया जाता है:
बदली हुई चाल ( define kv-troll ( $1 (verify empty?) (check-rock) add $1 (verify empty?) (check-rock) add $1 (verify empty?) (check-rock) add ) ) ( define kv-troll-capturing ( $1 (verify (piece? Dwarf) ) capture $1 (verify empty?) (check-rock) (add-partial capturing-type) ) )
यदि तीन ट्रॉल्स के साथ पड़ोस की स्थिति पूरी हो जाती है, तो हम
परिवर्तन-स्वामी कमांड द्वारा रॉक के मालिक को
बदलते हैं । अब हम बौनों की हार के लिए स्थिति को आसानी से तैयार कर सकते हैं, क्योंकि "रॉक" जैसे सभी आंकड़े खो गए हैं:
(loss-condition (Dwarfs) (pieces-remaining 0 Rock))
मैक्रो के कार्यान्वयन में, यह ध्वज ध्वज कमांड के साथ काम करने पर भी ध्यान देने योग्य है
? और
सेट-ध्वज । झंडे आपको राज्य को पाठ्यक्रम पीढ़ी के दौरान संग्रहीत करने की अनुमति देते हैं। वैश्विक झंडे के अलावा, बूलियन मूल्यों को बोर्ड के पदों (
सेट-पोजिशन-फ्लैग कमांड के साथ) के साथ-साथ आकृतियों (
सेट-एट्रिब्यूट कमांड के साथ) के साथ जोड़ना संभव है। मुझे तुरंत ध्यान आएगा कि वैश्विक राज्यों को संग्रहीत करने के लिए झंडे के उपयोग के किसी भी प्रयास को विफल करने के लिए बर्बाद किया गया है।
सबसे पहले, यह इस तथ्य के कारण है कि प्रत्येक चाल की शुरुआत में झंडे और स्थिति के झंडे रीसेट किए जाते हैं, लेकिन मुख्य कारण यह है कि उनका उपयोग केवल चाल की गणना की प्रक्रिया में किया जा सकता है, और इस स्तर पर मैक्रोज़ को कॉल करने के क्रम को परिभाषित नहीं किया गया है (जो कि परिभाषित किया गया है) अवांछित दुष्प्रभावों की ओर जाता है)। इसके अलावा, ZoG डेवलपर्स स्थिति-संबंधी झंडे का दुरुपयोग नहीं करने की सलाह देते हैं, क्योंकि उनका उपयोग प्रदर्शन को नकारात्मक रूप से प्रभावित करता है। सिद्धांत रूप में, चाल के बीच की स्थिति को संग्रहीत करने के लिए, आप आंकड़ों की विशेषताओं का उपयोग कर सकते हैं, लेकिन यह विधि बहुत समय लेने वाली है।
यह खेल का वर्णन करने के लिए बनी हुई है। जैसा कि हम मौजूदा ZRF विवरण में गेम का नया संस्करण जोड़ते हैं,
वैरिएंट कीवर्ड का उपयोग किया जाता है:
कोम घाटी थुड (variant (title "Koom Valley Thud") (description "...") (history "...") (strategy "") (players Dwarfs Trolls) (turn-order Dwarfs Trolls) (kv-game-defs) (piece (name Rock) (image Dwarfs "images\gluk\R.bmp" Trolls "images\gluk\R.bmp" ) (description "Rock") (moves (rock w) (rock sw) (rock e) (rock se) (rock n) (rock nw) (rock s) (rock ne) ) ) (piece (name Dwarf) (image Dwarfs "images\gluk\d.bmp") (description "Dwarf") (moves (kv-dwarf ne) (kv-dwarf n) (kv-dwarf nw) (kv-dwarf s) (kv-dwarf se) (kv-dwarf e) (kv-dwarf sw) (kv-dwarf w) ) ) (piece (name Troll) (image Trolls "images\gluk\T.bmp") (description "Troll") (moves (move-type capturing-type) (kv-troll-capturing n) (kv-troll-capturing ne) (kv-troll-capturing e) (kv-troll-capturing nw) (kv-troll-capturing s) (kv-troll-capturing se) (kv-troll-capturing w) (kv-troll-capturing sw) (move-type non-capturing-type) (kv-troll n) (kv-troll ne) (kv-troll e) (kv-troll nw) (kv-troll s) (kv-troll se) (kv-troll w) (kv-troll sw) ) ) )
हम निम्नलिखित निर्माण का उपयोग करके विकल्प मेनू में विभाजक जोड़ सकते हैं:
(variant (title "-") )
निष्पादन के लिए इस खेल को चलाने पर, आप देख सकते हैं कि सूक्ति मुख्य रूप से ट्रॉल्स से चल रही है (पिछले खेल की तरह, ट्रॉल्स बहुत मजबूत निकले) और उनके पास "रॉक" को स्थानांतरित करने का समय नहीं है। चूंकि मैं पुराने
मोर्कौ की तरह बौनों और
ट्रोल्स के बीच एक दुनिया की वकालत करता हूं, इसलिए मैंने
ZoG के लचीलेपन का फायदा उठाया और नियमों में मामूली बदलाव किया:
मैंने दुश्मन के टुकड़ों पर कब्जा करने पर प्रतिबंध लगा दिया है ( define shift ( $1 ( while empty? add $1 ) ) ) ( define kvb-troll ( $1 (verify empty?) (verify (on-board? $1) ) (check-rock) add $1 (verify empty?) (verify (on-board? $1) ) (check-rock) add $1 (verify empty?) (verify (on-board? $1) ) (check-rock) add ) )
और गेंद को स्थानांतरित करने की अनुमति दी (गेंद को रहने दो) एक से अधिक वर्ग ( define ball ( ( verify (or (piece? Dwarf n) (piece? Dwarf nw) (piece? Dwarf s) (piece? Dwarf sw) (piece? Dwarf w) (piece? Dwarf ne) (piece? Dwarf e) (piece? Dwarf se) ) ) $1 ( while empty? ( if (or (piece? Dwarf n) (piece? Dwarf nw) (piece? Dwarf s) (piece? Dwarf sw) (piece? Dwarf w) (piece? Dwarf ne) (piece? Dwarf e) (piece? Dwarf se) ) add ) $1 ) ) )
इसके अलावा, जैसा कि आप देख सकते हैं, मैं ट्रॉल्स को बोर्ड के किनारे पर पहुंचने से मना करता हूं। यदि ऐसा नहीं किया जाता है, तो ट्रॉल्स की जीत-जीत की रणनीति होती है - गेंद को शिकार करने के लिए अंतिम ट्रॉल्स को भरने के लिए, शेष ट्रॉल्स (उनमें से सिर्फ तीन होंगे) की व्यवस्था करना।
कोम वैली थुड में, यह भी संभव है, लेकिन आप वहां ट्रोल खा सकते हैं (वैसे, ZoG चलाने वाले एक कंप्यूटर ने इस तरह की रणनीति के बारे में कभी नहीं सोचा है)।
नतीजा, मेरी राय में, बुरा नहीं था। खेल अधिक जटिल और स्थितिपूर्ण बना हुआ है, और अधिक गतिशील बन गया है। Gnomes (कंप्यूटर नियंत्रण में) अब आसानी से कार्य के साथ सामना कर सकता है (जिसका अर्थ है कि मैंने उनके लिए जीवन आसान बना दिया है) और, कई चक्कर आने के बाद पूरे क्षेत्र से गुजरने के बाद, गोल में गेंद को रोल करें। रुचि रखने वाले देख सकते हैं कि यह वीडियो पर कैसा दिखता है: