2009-07-01 9 views
10

मैं सी # में एक महजोंग गेम लिख रहा हूं (चीनी पारंपरिक खेल, सॉलिटेयर प्रकार नहीं)। बॉट प्लेयर एआई के लिए कोड लिखते समय, मैं सोच रहा हूं कि एफ # जैसी एक कार्यात्मक भाषा जो मैं वर्तमान में उपयोग करता हूं उससे अधिक उपयुक्त भाषा होगी जो कि बहुत सारे लिंक के साथ सी # है। मुझे एफ # के बारे में बहुत कुछ पता नहीं है, इसलिए मैं यहां पूछता हूं।क्या एफ # कार्ड गेम एआई के लिए एक अच्छी भाषा है?

महजोंग जिन रमी की तरह एक सा खेलता है:

इसे समझने के लिए कि मैं क्या हल करने का प्रयास है, यहाँ महजोंग की एक त्वरित सारांश है। आपके हाथ में 13 टाइल्स हैं, और प्रत्येक मोड़, आप एक टाइल खींचते हैं और एक और को छोड़ देते हैं, जो जीतने वाले महजोंग हाथ की ओर अपना हाथ सुधारने की कोशिश करते हैं, जिसमें 4 सेट और एक जोड़ी होती है। सेट एक प्रकार (पंग्स), एक प्रकार का 4 (कॉंग) या लगातार 3 टाइल्स (चो) का अनुक्रम हो सकता है। यदि आप अपने सेटों में से एक पूरा कर सकते हैं तो आप किसी अन्य खिलाड़ी के विवाद को भी चुरा सकते हैं।

मुझे यह पता लगाने के लिए कोड लिखना पड़ा कि क्या बॉट लगातार 3 टाइल्स सेट (चो) घोषित कर सकता है, यह बहुत कठिन है। मुझे हाथ में सभी अनोखी टाइल्स मिलनी है, और उसके बाद यह जांचना शुरू करें कि 3 टाइल्स का अनुक्रम है जिसमें हाथ में एक है। यह पता लगाने के लिए कि क्या बॉट महजोंग जा सकता है, यह और भी जटिल है क्योंकि यह 4 सेट और उसके हाथ में एक जोड़ी है या नहीं, यह पता लगाने का एक संयोजन है। और यह सिर्फ एक मानक महजोंग हाथ है। ऐसे कई "विशेष" हाथ भी हैं जो उन नियमों को तोड़ते हैं लेकिन अभी भी एक महजोंग हाथ हैं। उदाहरण के लिए, "13 अद्वितीय चमत्कार" में 13 विशिष्ट टाइल्स होते हैं, "जेड साम्राज्य" में केवल टाइल्स रंगीन हरे रंग होते हैं, आदि

एक परिपूर्ण दुनिया में, मुझे केवल 'नियम' बता सकते हैं महजोंग का, और भाषा उन नियमों के खिलाफ 13 टाइल्स के एक सेट से मेल करने में सक्षम हो सकती है, जो यह सुनिश्चित करने के लिए कि कौन से नियम पूरा करते हैं, उदाहरण के लिए, यह जांच कर रहा है कि यह एक महजोंग हाथ है या यदि इसमें 4 प्रकार शामिल हैं। क्या यह कुछ एफ # की पैटर्न मिलान सुविधा हल करने में मदद कर सकता है?

उत्तर

7

यदि आप कार्यात्मक भाषाओं से परिचित हैं, तो वे खेल एआई लिखने का एक शानदार तरीका हैं - और यदि आप नहीं हैं, तो सीखने की चुनौती आपको बढ़ने में मदद करेगी, और आपको अपने से बेहतर प्रोग्रामर छोड़ देगी थे। (मैं सचमुच घोषणात्मक प्रोलॉग जैसी भाषाओं, और गतिशील स्क्रिप्टिंग/ओओ/रूबी या पायथन जैसे बहु-प्रतिमान भाषाओं के लिए भी कह सकता हूं!)।

आपका कार्य जैसा कि आप वर्णन करते हैं, इन भाषाओं में से किसी भी समूह में आसान होना चाहिए - इसलिए एक चुनें और इसके लिए जाएं! हम इन प्रयासों से वसंत होने वाले किसी भी प्रश्न के साथ सामूहिक रूप से खुश रहेंगे (मैं व्यक्तिगत रूप से एफ # या स्कैला से अपरिचित हूं, लेकिन किसी भी एमएल-पारिवारिक भाषा, योजना या एरलांग के साथ हास्केल के साथ मदद करने में प्रसन्नता होगी - और इसी तरह अन्य समूहों के लिए ;-)।

गंभीरता से: - अलग महजोंग (प्रत्येक व्यापक श्रेणी (प्रक्रियात्मक, कार्यात्मक, घोषणात्मक/खंड एकीकरण, संबंधपरक, गतिशील/बहु प्रतिमान, आदि) में कम से कम एक भाषा से भरा आदेश आप एक गंभीरता से बेहतर प्रोग्रामर बनाता है और यह इटली के रोमाग्ना क्षेत्र में एक शास्त्रीय रूप से लोकप्रिय गेम है, जो मेरे गृह नगर बोलोग्ना के करीब है ;-), इस संबंध में आपके रोस्टर में जो भी कार्य जोड़ सकता है वह अच्छी तरह से उपक्रम के लायक है !!!

1

कुछ भी नहीं है जो आप स्वयं को किसी अन्य भाषा में प्रकट नहीं कर सकते हैं।

मैंने प्रोल में किए गए कार्यों के आधार पर एआई को जावा का उपयोग करने की कोशिश की है। मैंने सोचा कि यह कोड के लिए एक कुतिया होगा। हालांकि, मेरे पास बस कुछ विधियां थीं जो बहुत सारे कामों को करती थीं, इसे मुख्य तरीकों से बाहर ले जाती थीं, और यह आश्चर्यजनक ढंग से काम करती थी।

आपको पहिया को फिर से शुरू करने की आवश्यकता हो सकती है, लेकिन सी # में आप इतना नहीं कर सकते हैं कि आप F # में कर सकते हैं।

नोट: मैंने पहले कभी एफ # के बारे में नहीं सुना है, लेकिन यह बुरा नहीं हो सकता है। मैं अपने गधे से बाहर नहीं जा सकता/सकती हूं।

संबंधित मुद्दे