2008-10-14 8 views
6

मैं अपने मस्तिष्क को थोड़ा सा व्यायाम करने के लिए घर पर एक साइड प्रोजेक्ट शुरू करने के बारे में सोच रहा हूं। Reversi एक साधारण गेम की तरह दिखता है, जहां गतिशीलता का खेल खेलने पर गहरा असर पड़ता है। यह टिक टैक पैर की अंगुली से कम से कम एक कदम है। यह किसी तरह के एआई के खिलाफ एक एकल खिलाड़ी होगा।आप खेल रिवर्सी को लागू करने के बारे में कैसे जाएंगे? (othello)

मैं एक पीसी पर C++ में यह प्रयास करने के लिए सोच रहा हूँ।

क्या मुद्दों मैं में चलाने की संभावना है?

आप क्या ग्राफिक्स पुस्तकालय की सिफारिश करेंगे?

क्या सवाल मैं बहुत चालाक अपने आप को पूछने के लिए नहीं कर रहा हूँ?

+1

क्या आप रिवर्सी के लिए रणनीति को लागू करने के बारे में बात कर रहे हैं या बस दो खिलाड़ियों को कंप्यूटर पर खेलने दें? – Barth

+0

एक रणनीति। अच्छा प्रश्न। – EvilTeach

उत्तर

2

कुल मिलाकर, आप जिस मुद्दे पर चलेंगे, वह आपके और आपके दृष्टिकोण पर निर्भर करेगा। मित्र कहता है कि जटिल विभिन्न परिप्रेक्ष्य से सरल है।

ग्राफिक्स लाइब्रेरी का विकल्प इस बात पर निर्भर करता है कि आप किस प्रकार का गेम लिखने जा रहे हैं? ओपनजीएल इस तरह की परियोजनाओं में आम पसंद है, लेकिन आप कुछ जीयूआई-लाइब्रेरी का उपयोग भी कर सकते हैं या सीधे विंडोज़ या एक्सर्ग के पुस्तकालयों का उपयोग कर सकते हैं। यदि आप फैंसी करने जा रहे हैं, तो ओपनजीएल का उपयोग करें।

प्रश्न आप से पूछना चाहिए:

इस परियोजना के लिए सी ++ समझदार पसंद है? सी और/या पायथन पर भी विचार करें।इसका मेरा जवाब यह होगा कि यदि आप सिर्फ रिवर्सी लिखना चाहते हैं, तो पाइथन जाओ। लेकिन यदि आप निम्न स्तर की भाषा सीखना चाहते हैं, तो पहले सी करें। सी ++ एक विस्तार सी से है, इसलिए वहां सी में और वहां से कहीं ज्यादा सीखने के लिए और कुछ है, जितना अधिक आपको सी ++ पर सीखना है, वह प्रयास के लायक नहीं है।

आप ग्राफिक्स लाइब्रेरी का उपयोग कैसे करते हैं? यदि आप फैंसी प्रभाव करने जा रहे हैं, तो दृश्य ग्राफ पर जाएं। इसके बजाय आप बस इसके साथ बटन के साथ रिवर्सी ग्रिड प्रस्तुत कर सकते हैं।

यूआई को कैसे लागू करना चाहिए, क्या आप सामान्य यूआई अवधारणाओं का उपयोग करना चाहिए? सामान्य यूआई अवधारणाओं (खिड़की, फ्रेम, बटन, मेनूबार, संवाद) इतने अच्छे नहीं हैं क्योंकि लोग सोचते हैं कि वे हैं, उन्हें ठीक से लागू करने में बहुत सारे काम हैं। इनपुट व्याख्या करने के लिए दृश्य ग्राफ को लागू करें और गेम को नियंत्रित करने के लिए विभिन्न चालाक तरीकों का प्रयास करें। परिचय मेनू से बचें (वे गूंगा और बेकार काम हैं), अधिकांश कॉन्फ़िगरेशन के लिए कमांड लाइन तर्क का उपयोग करें।

मैं अभी तक आप कुछ विचार आप आरंभ करने के लिए दे:

ओथेलो बोर्ड 8x8, समग्र में 64 कोशिकाओं है। आप प्रत्येक सेल प्रति बाइट असाइन कर सकते हैं, जो प्रत्येक बोर्ड राज्य के लिए 64 बाइट बनाता है। यह 8 लंबी चींटियां है, बिल्कुल नहीं! आप खेल की पूरी प्रगति को स्टोर कर सकते हैं और खिलाड़ी इसे भी नोटिस नहीं कर सकता है। इसलिए यह सलाह दी जाती है कि ओथेलो बोर्ड को एक अपरिवर्तनीय संरचना के रूप में लागू करने की सलाह दी जाती है जिसे आप हमेशा बदलते समय प्रतिलिपि बनाते हैं। यह बाद में आपकी एआई के साथ आपकी मदद करेगा और 'पूर्ववत' -फेचर को लागू करेगा।

क्योंकि एक बाइट सिर्फ तीन राज्यों (खाली, काले, सफेद) की तुलना में अधिक जानकारी स्टोर कर सकते हैं, मैं सलाह आप भी दो अतिरिक्त राज्यों (BLACK_ALLOWED, WHITE_ALLOWED, BOTH_ALLOWED) प्रदान करेगा। जब आप नई स्थिति की प्रतिलिपि बनाते हैं तो आप इन मानों की गणना कर सकते हैं।

एल्गोरिदम यह जांचने के लिए कि आप कहां ब्लॉक डाल सकते हैं, बोर्ड को एक-एक करके जा सकते हैं, फिर खाली कोशिकाओं से रेगेक्स-पैटर्न के लिए हर दिशा में ट्रेस करें: बी + डब्ल्यू => डब्ल्यू ^, डब्ल्यू + बी => बी^इस तरह आप एक साधारण इंटरफ़ेस के अंदर गेम नियमों को समाहित कर सकते हैं जो इसका ख्याल रखता है।

+1

खराब सलाह। सी ++ सिर्फ एक विस्तार नहीं है, यह एक अलग दृष्टिकोण है। एकमात्र चीज जो वे वास्तव में साझा करते हैं वह कुछ वाक्यविन्यास है, जावास्क्रिप्ट के साथ सी ++ शेयरों से अधिक नहीं। सी ++ आपको लाभ का एक टन देगा, जैसे बेहतर स्मृति प्रबंधन (यहां तक ​​कि बढ़ावा के माध्यम से), टेम्पलेट्स, ऑब्जेक्ट्स, और इससे भी मदद मिलेगी। किसी ऑब्जेक्ट के बिना किसी प्रोग्राम स्थिति को ट्रैक करना कठिन होता है, क्योंकि आपके पास स्वतंत्र डेटा नहीं हो सकता है, यह या तो वैश्विक या सी –

3

मुद्दे ...

ठीक है, बस सुनिश्चित करें कि जब खेल की रणनीति हिस्सा लेखन हो, नहीं तो बस इस कदम है कि आप सबसे अधिक टुकड़े देता है क्या करना है। आपको बोर्ड की स्थिति में भी वज़न देना चाहिए। उदाहरण के लिए, किसी बोर्ड कोने में एक टुकड़ा लगाने का मौका दिया गया है, किसी भी अन्य कदम (खेल जीतने के अलावा) पर प्राथमिकता लेनी चाहिए क्योंकि उस टुकड़े को कभी भी वापस नहीं किया जा सकता है। और, कोने स्पॉट के नजदीक एक टुकड़ा रखना केवल सबसे खराब कदम है जिसे आप कभी भी बना सकते हैं (यदि कोने की जगह खुली है)।

आशा है कि इससे मदद मिलती है!

2

के रूप में दूसरों के द्वारा उल्लेख किया है, मैं गेमप्ले और रणनीतियों, और एल्गोरिदम शामिल की गहरी समझ हो रही द्वारा शुरू होगा। इस कड़ी में आप के लिए उपयोगी हो सकता है, यह बुनियादी ओथेलो रणनीति और एल्गोरिदम का वर्णन करता है:

http://www.site-constructor.com/othello/Present/Basic_Strategy.html

2

लोग एल्गोरिदम और खेल तर्क के लिए पहले सोच के लिए आपको बता के लिए मेरा विचार का सुझाव दे रहे थे के रूप में। मेरे लिए अगला जवाब ग्राफिक्स लाइब्रेरी था, यह आपके लक्षित प्लेटफ़ॉर्म, प्रोग्रामिंग भाषा, ढांचे इत्यादि पर निर्भर करता है, लेकिन जैसा कि मेरा सुझाव है कि सी # 2 काहिरा 2 डी ग्राफिक्स लाइब्रेरी के साथ उपयोग कर रहा है जिसे आप मोनो फ्रेमवर्क का उपयोग करके प्राप्त कर सकते हैं (जिसे आप तीनों को लक्षित कर सकते हैं आपके गेम के लिए काम करने के लिए प्रमुख ऑपरेटिंग सिस्टम) -> www.mono-project.org। इस बीच मैंने पाया कि मुझे लगता है कि इस तरह का संसाधन आपकी मदद करेगा: http://home.datacomm.ch/t_wolf/tw/misc/reversi/html/index.html। लेकिन अगर आप इसे खत्म करते हैं, तो आप सुडोकू को लागू करने का प्रयास कर सकते हैं।

2

आप अगर आप एक ऐ के खिलाफ खेलने के बारे में अल्फा बीटा छंटाई के साथ अल्पमहिष्ठ में देखना चाहते हैं। आपके पसंदीदा खोज इंजन के विषय पर बहुत कुछ कहना होगा।

2

जब आप खेल तर्क में खुद को झटका लगाते हैं, तो पीटर नॉरविग की उत्कृष्ट पुस्तक Paradigms of AI Programming के अध्याय 18 को पढ़ें। (स्रोत कोड here।) इसमें एक छोटा सा और बेहद पठनीय कार्यक्रम है जो किसी भी मानव के बट के बारे में सोच सकता है; आपको इसके समाधान की तुलना करके बहुत कुछ सीखना चाहिए।

0

रिवर्सी लागू करने के लिए एक बहुत ही सरल खेल होना चाहिए। एआई के कार्यान्वयन के दौरान गेम सिद्धांत (विशेष रूप से न्यूनतम-अधिकतम) के कुछ बुनियादी एल्गोरिदम सीखना सही है।

एआई पर ध्यान देने योग्य एक बात यह है कि रिवर्सी के लिए एक आदर्श एआई बनाना संभव है (जो हमेशा अपने प्रतिद्वंद्वी की चाल से कोई फर्क नहीं पड़ता)। तो रणनीति पक्ष पर, यदि आपकी एआई हार जाती है, तो आपके पास अभी भी काम करने के लिए काम है :)

+0

में स्टैक पर है। मुझे यकीन नहीं है कि यह पूरी तरह से सच है या नहीं यदि प्रतिद्वंद्वी भी एआई है । विकिपीडिया का कहना है कि इस खेल के साथ सही खेल ड्रॉ तक खत्म होता है। – Cheery

+0

मुझे बिल्कुल याद नहीं है, लेकिन मुझे लगता है कि दो एआई खिलाड़ियों के साथ, रंगों में से एक हमेशा जीतता है (मुझे नहीं पता कि यह सफेद या काला है), बिल्कुल एक बिंदु से। –

+0

यह सच नहीं है। रिवर्सी अनसुलझा है। –

0

मैंने कई साल पहले एक रिवर्सी गेम लिखा था, जब मैं अभी भी स्कूल में था। इसकी रणनीति बहुत सरल थी, यह सिर्फ अधिकतम संख्या में टुकड़ों के लिए गई थी, लेकिन भारित इसलिए यह किनारों और विशेष रूप से कोनों को पसंद करता था और कोनों को दूर करने वाले जोखिमों को पसंद नहीं करता था।

यह उन लोगों के खिलाफ काफी अच्छा काम करता है जिन्होंने अभी तक यह नहीं किया था कि यह क्या कर रहा था, लेकिन एक बार जब आप इसके खिलाफ अपनी रणनीति का उपयोग करना बहुत आसान था। मुझे यह कहते हुए गर्व नहीं है कि, हालांकि, मैंने इसे पहले कुछ बार हराया, भले ही मैंने इसे लिखा था!

लुकहेड की कुछ चाल के साथ एक उचित एआई कहीं अधिक जटिल है। एक दिलचस्प समस्या होनी चाहिए, लेकिन उस समय मैं उपयोगकर्ता इंटरफ़ेस में अधिक रूचि रखता था।

+0

अधिकतमकरण सीधे प्रारंभिक हानि की ओर जाता है। – EvilTeach

1

वहां कई पुस्तकालय हैं लेकिन जहां तक ​​मुझे लगता है कि आपके गेम को ईवेंट और ग्राफिक्स पुस्तकालयों की आवश्यकता होगी .... और अधिक मज़ेदार के लिए एक ध्वनि लाइब्रेरी! एलेग्रो 5 सबसे अच्छा विकल्प है ... यह सब एक पुस्तकालय में है। http://liballeg.org/ हालांकि यह सी भाषा में लिखा गया है, आप ऑब्जेक्ट ओरिएंटेड प्रोग्राम बना सकते हैं।

और इस के लिए एक ट्यूटोरियल ...

http://fixbyproximity.com/2d-game-development-course/

या आप ग्राफिक्स के लिए .. ओपन की तरह निम्न स्तर APIs का उपयोग कर सकते हैं। ध्वनि के लिए ओपनल। घटनाओं के लिए glfw।

लेकिन ओपनजीएल एक बड़ा सौदा है क्योंकि आपको अपना खुद का स्प्राइट शीट हैंडलर और सभी 2 डी सामान बनाना है।

आरोपपत्र के साथ जाएं ... अपना गेम पूरा करें और फिर ओपनजीएल के लिए जाएं!

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

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