मॉडलिंग बोर्ड गेम के लिए कोई पैटर्न? [बन्द है]


93

मज़े के लिए, मैं अपने बेटे के पसंदीदा बोर्ड गेम में से एक सॉफ्टवेयर के एक टुकड़े के रूप में लिखने की कोशिश कर रहा हूं। आखिरकार मैं इसके ऊपर एक WPF UI बनाने की उम्मीद करता हूं, लेकिन अभी मैं मशीन का निर्माण कर रहा हूं जो गेम और इसके नियमों को मॉडल करता है।

जैसा कि मैं ऐसा करता हूं, मैं उन समस्याओं को देखता रहता हूं जो मुझे लगता है कि कई बोर्ड गेमों के लिए आम हैं, और शायद दूसरों ने मुझे पहले से बेहतर हल कर दिया है।

(ध्यान दें कि एआई खेल खेलने के लिए, और उच्च प्रदर्शन के आसपास के पैटर्न मेरे लिए दिलचस्प नहीं हैं।)

अब तक मेरे पैटर्न हैं:

  • खेल बॉक्स में संस्थाओं का प्रतिनिधित्व करने वाले कई अपरिवर्तनीय प्रकार, जैसे पासा, चेकर्स, कार्ड, एक बोर्ड, बोर्ड पर स्थान, धन, आदि।

  • प्रत्येक खिलाड़ी के लिए एक वस्तु, जिसमें खिलाड़ियों के संसाधन (जैसे पैसा, स्कोर), उनका नाम, आदि होते हैं।

  • एक वस्तु जो खेल की स्थिति का प्रतिनिधित्व करती है: खिलाड़ी, यह किसकी बारी है, बोर्ड पर peices का लेआउट, आदि।

  • एक राज्य मशीन जो मोड़ अनुक्रम का प्रबंधन करती है। उदाहरण के लिए, कई खेलों में एक छोटा प्री-गेम होता है जहां प्रत्येक खिलाड़ी यह देखने के लिए रोल करता है कि कौन पहले जाता है; यह प्रारंभिक अवस्था है। जब एक खिलाड़ी की बारी शुरू होती है, तो पहले वे रोल करते हैं, फिर वे आगे बढ़ते हैं, फिर उन्हें जगह पर नाचना पड़ता है, फिर अन्य खिलाड़ी अनुमान लगाते हैं कि वे किस नस्ल के मुर्गे हैं, फिर उन्हें अंक मिलते हैं।

क्या कुछ पूर्व कलाएं हैं जिनका मैं लाभ उठा सकता हूं?

संपादित करें: हाल ही में मुझे पता चला है कि खेल राज्य को दो श्रेणियों में विभाजित किया जा सकता है:

  • खेल विरूपण साक्ष्य राज्य । "मेरे पास $ 10 है" या "मेरा बायाँ हाथ नीले रंग पर है"।

  • खेल अनुक्रम राज्य । "मैंने दो बार डबल्स का रोल किया है; अगला वाला मुझे जेल में डालता है"। एक राज्य मशीन यहाँ समझ में आ सकती है।

संपादित करें: मैं वास्तव में यहाँ क्या देख रहा हूँ , शतरंज या स्क्रैबल या एकाधिकार जैसे मल्टीप्लेयर टर्न-आधारित गेम को लागू करने का सबसे अच्छा तरीका है। मुझे यकीन है कि मैं इस तरह का गेम बना सकता हूं, इसके माध्यम से काम करने से यह खत्म होना शुरू हो जाएगा, लेकिन, अन्य डिज़ाइन पैटर्न की तरह, संभवतः कुछ ऐसे तरीके हैं जिनसे चीजें बहुत अधिक आसानी से हो सकती हैं जो कि सावधानीपूर्वक अध्ययन के बिना स्पष्ट नहीं हैं। यही मैं उम्मीद कर रहा हूं।


3
आप होकी पोके, एकाधिकार, चरस मैशप के कुछ प्रकार का निर्माण कर रहे हैं?
एंथनी मैस्ट्रन

आप किसी भी नियम के लिए एक स्टेट मशीन चाहते हैं जो मोनोपॉली के लिए तीन डबल्स नियम की तरह राज्य (इरेट ...) पर निर्भर हो। मैं एक पूर्ण उत्तर पोस्ट करूँगा, लेकिन मुझे ऐसा करने का कोई अनुभव नहीं है। मैं हालांकि इसके बारे में प्रमाण पत्र दे सकता था।
एमएसएन

जवाबों:


115

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

आपका खेल संभवतः राज्यों की अनंत राशि (क्योंकि के करीब) में हो सकता है क्योंकि चीजों की क्रमबद्धता जैसे कि कितने पैसे वाले खिलाड़ी के पास ए, कितने पैसे के खिलाड़ी बी हैं, और आदि ... इसलिए, मुझे पूरा यकीन है कि आप चाहते हैं राज्य मशीनों से दूर रहना।

हमारे ढांचे के पीछे का विचार सभी डेटा फ़ील्ड्स के साथ संरचना के रूप में गेम स्टेट का प्रतिनिधित्व करना था, एक साथ पूरा गेम स्टेट प्रदान करता है (यानी: यदि आप गेम को डिस्क पर सहेजना चाहते थे, तो आप उस संरचना को लिखते हैं)।

एक खिलाड़ी द्वारा किए जा सकने वाले सभी मान्य खेल कार्यों का प्रतिनिधित्व करने के लिए हमने कमांड पैटर्न का उपयोग किया । यहां एक उदाहरण कार्रवाई होगी:

class RollDice : public Action
{
  public:
  RollDice(int player);

  virtual void Apply(GameState& gameState) const; // Apply the action to the gamestate, modifying the gamestate
  virtual bool IsLegal(const GameState& gameState) const; // Returns true if this is a legal action
};

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

इस प्रणाली के साथ एक गोत्र समाप्त हो गया जो कि एक बहुत ही सुंदर समाधान निकला। कभी-कभी क्रियाओं के दो या अधिक चरण होते हैं। उदाहरण के लिए, खिलाड़ी एकाधिकार की संपत्ति पर उतर सकता है और उसे अब एक नया निर्णय लेना चाहिए। जब खिलाड़ी पासा पलटता है, और इससे पहले कि वे एक संपत्ति खरीदने का फैसला करते हैं या नहीं, तो खेल राज्य क्या है? हमने अपने गेम स्टेट के "एक्शन कॉन्टेक्स्ट" सदस्य की तरह स्थितियों को प्रबंधित किया। कार्रवाई का संदर्भ सामान्य रूप से अशक्त होगा, यह दर्शाता है कि खेल वर्तमान में किसी विशेष स्थिति में नहीं है। जब खिलाड़ी पासा को रोल करता है और खेल राज्य में पासा रोलिंग कार्रवाई लागू होती है, तो यह महसूस होगा कि खिलाड़ी एक गैर-स्वामित्व वाली संपत्ति पर उतरा है, और एक नया "प्लेयरडेकटाइडपॉर्चेसेप्रोपरेटी" बना सकता है कार्रवाई का संदर्भ जिसमें उस खिलाड़ी का सूचकांक होता है जिसका हम निर्णय लेने की प्रतीक्षा कर रहे हैं। जब तक रोलडाइस कार्रवाई पूरी हो जाती है, तब तक हमारा खेल राज्य यह दर्शाता है कि वर्तमान में यह निर्दिष्ट खिलाड़ी के लिए इंतजार कर रहा है कि वह एक संपत्ति खरीद सकता है या नहीं। "BuyProperty" और "PassPropertyPurchaseOkutunity" कार्रवाइयों को छोड़कर, अन्य सभी कार्यों के लिए 'IsLegal' विधि अब झूठी है, जो कि खेल राज्य में "PlayerececideToPurchaseProperty" क्रिया प्रसंग होने पर केवल कानूनी हैं।

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

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

मुझे आशा है कि यह संक्षिप्त और सहायक था।


4
मुझे नहीं लगता कि यह संक्षिप्त है, लेकिन यह मददगार है! Upvoted।
Jay Bazuzi

खुशी है कि यह मददगार था ... कौन से हिस्से संक्षिप्त नहीं थे? मुझे एक स्पष्टीकरण संपादित करने में खुशी होगी।
एंड्रयू टॉप

मैं अभी एक टर्न-आधारित खेल का निर्माण कर रहा हूँ और यह पोस्ट वास्तव में उपयोगी है!
किव

मैंने पढ़ा है कि मेमेंटो पूर्ववत करने के लिए उपयोग करने के लिए पैटर्न है ... पूर्ववत करने के लिए मेमेंटो बनाम कमांड पैटर्न, आपके विचार plz ..
zotherstupidguy

यह सबसे अच्छा जवाब है जो मैंने अब तक स्टाकेवरफ्लो में पढ़ा है। धन्यवाद!
पैपीपो जू २

18

आपके गेम इंजन की मूल संरचना स्टेट पैटर्न का उपयोग करती है । आपके गेम बॉक्स के आइटम विभिन्न वर्गों के एकल हैं। प्रत्येक राज्य की संरचना रणनीति पैटर्न या टेम्पलेट विधि का उपयोग कर सकती है ।

एक फ़ैक्टरी का उपयोग उन खिलाड़ियों को बनाने के लिए किया जाता है जिन्हें खिलाड़ियों की सूची में डाला जाता है, एक और सिंगलटन। GUI ऑब्जर्वर पैटर्न का उपयोग करके गेम इंजन पर नजर रखेगा और कमांड पैटर्न का उपयोग करके बनाई गई कई कमांड ऑब्जेक्ट में से एक का उपयोग करके इसके साथ बातचीत करेगा । ऑब्जर्वर और कमांड का उपयोग पैसिव व्यू के संदर्भ में किया जा सकता है लेकिन आपकी पसंद के आधार पर किसी भी एमवीपी / एमवीसी पैटर्न का इस्तेमाल किया जा सकता है। आप खेल को बचाने जब आप किसी को आकर्षित करने की जरूरत है स्मृति चिन्ह की यह वर्तमान स्थिति है

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


15

मैंने बहुरूपता का उपयोग करते हुए एक राज्य आधारित खेल को डिजाइन और कार्यान्वित किया।

एक आधार सार वर्ग का उपयोग करना जिसे GamePhaseएक महत्वपूर्ण विधि कहा जाता है

abstract public GamePhase turn();

इसका मतलब यह है कि प्रत्येक GamePhaseवस्तु खेल की वर्तमान स्थिति रखती है, और turn()इसकी वर्तमान स्थिति को देखने के लिए एक कॉल और अगले रिटर्न देता है GamePhase

प्रत्येक कंक्रीट GamePhaseमें कंस्ट्रक्टर होते हैं जो पूरे गेम स्टेट को पकड़ते हैं । प्रत्येक turn()विधि में उनके अंदर खेल के नियमों का एक छोटा सा है। जबकि यह नियमों को चारों ओर फैलाता है, यह संबंधित नियमों को एक साथ बंद रखता है। प्रत्येक turn()का अंतिम परिणाम केवल अगला बना GamePhaseरहा है और अगले चरण में पूरे राज्य में गुजर रहा है।

यह turn()बहुत लचीला होने की अनुमति देता है। आपके खेल के आधार पर एक दिया गया राज्य कई अलग-अलग चरणों में शाखा कर सकता है। यह सभी गेम चरणों का ग्राफ बनाता है।

उच्चतम स्तर पर इसे चलाने के लिए कोड बहुत सरल है:

GamePhase state = ...initial phase
while(true) {
    // read the state, do some ui work
    state = state.turn();
}

यह अत्यंत उपयोगी है क्योंकि मैं अब परीक्षण के लिए खेल के किसी भी राज्य / चरण को आसानी से बना सकता हूं

अब आपके प्रश्न के दूसरे भाग का उत्तर देने के लिए, यह मल्टीप्लेयर में कैसे काम करता है? कुछ के भीतर GamePhaseरों कि उपयोगकर्ता इनपुट की आवश्यकता है, से एक फोन turn()वर्तमान पूछना होगा Playerउनके Strategyदिए गए वर्तमान स्थिति / चरण। Strategyसभी संभावित निर्णयों का एक अंतरफलक है जो Playerकर सकते हैं। यह सेटअप StrategyAI के साथ भी लागू होने की अनुमति देता है!

एंड्रयू टॉप ने भी कहा:

आपका खेल संभवतः राज्यों की अनंत राशि (क्योंकि के करीब) में हो सकता है क्योंकि चीजों की क्रमबद्धता जैसे कि कितने पैसे वाले खिलाड़ी के पास ए, कितने पैसे के खिलाड़ी बी हैं, और आदि ... इसलिए, मुझे पूरा यकीन है कि आप चाहते हैं राज्य मशीनों से दूर रहना।

मुझे लगता है कि यह कथन बहुत ही भ्रामक है, जबकि यह सच है कि बहुत सारे गेम स्टेट हैं, कुछ ही गेम के चरण हैं। उनके उदाहरण को संभालने के लिए, यह सब मेरे कंक्रीट के निर्माणकर्ताओं के लिए एक पूर्णांक पैरामीटर होगा GamePhase

एकाधिकार

कुछ GamePhaseएस का उदाहरण होगा:

  • GameStarts
  • PlayerRolls
  • PlayerLandsOnProperty (FreeParking, GoToJail, Go, आदि)
  • PlayerTrades
  • PlayerPurchasesProperty
  • PlayerPurchasesHouses
  • PlayerPurchasesHotels
  • PlayerPaysRent
  • PlayerBankrupts
  • (सभी संभावना और सामुदायिक छाती कार्ड)

और आधार में कुछ राज्य GamePhaseहैं:

  • खिलाड़ियों की सूची
  • वर्तमान खिलाड़ी (जो बारी है)
  • खिलाड़ी का पैसा / संपत्ति
  • गुण पर मकान / होटल
  • खिलाड़ी की स्थिति

और फिर कुछ चरणों में आवश्यकतानुसार अपने स्वयं के राज्य को रिकॉर्ड किया जाएगा, उदाहरण के लिए प्लेयररॉल एक खिलाड़ी के दो बार रोल करने की संख्या को रिकॉर्ड करेगा। एक बार जब हम PlayerRolls चरण को छोड़ देते हैं, तो हम अब लगातार रोल के बारे में परवाह नहीं करते हैं।

बहुत सारे चरणों का पुन: उपयोग और लिंक एक साथ किया जा सकता है। उदाहरण के लिए, वर्तमान GamePhase CommunityChestAdvanceToGoअवस्था के PlayerLandsOnGoसाथ अगला चरण बनाएगा और उसे लौटाएगा। PlayerLandsOnGoवर्तमान खिलाड़ी के निर्माण में गो को स्थानांतरित कर दिया जाएगा और उनके धन को $ 200 से बढ़ाया जाएगा।


8

बेशक, इस विषय के बारे में कई, कई, कई, कई, कई, कई, संसाधन हैं। लेकिन मुझे लगता है कि आप वस्तुओं को विभाजित करने के सही रास्ते पर हैं और उन्हें अपनी स्वयं की घटनाओं / डेटा आदि को संभालने दें।

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

1  2  3  
4 (5) 6  BoardArray 5 = row 2, col 2
7  8  9  

Nostalgy। ;)

वैसे भी, http://www.gamedev.net/ जानकारी के लिए एक अच्छी जगह है। http://www.gamedev.net/reference/


आप केवल 2-आयामी सरणी का उपयोग क्यों नहीं करते हैं? तब कंपाइलर आपके लिए इसे संभाल सकता है।
Jay Bazuzi

मेरा बहाना यह है कि यह बहुत पहले था। ;)
स्टेफन

1
अगर सामान है, तो gamedev का एक टन है, लेकिन मुझे वह नहीं दिखाई दिया जिसकी मुझे तलाश थी।
Jay Bazuzi

आप किस भाषा का उपयोग कर रहे थे?
zotherstupidguy

बेसिक, बेसिक, क्यूबी, क्विकबेसिक इत्यादि। ;)
स्टीफन

5

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


3

थ्री रिंग्स LGPL'd Java लाइब्रेरी ऑफर करती है। Nenya और Vilya खेल से संबंधित सामान के लिए पुस्तकालय हैं।

निश्चित रूप से, यह मदद करेगा यदि आपके प्रश्न ने प्लेटफ़ॉर्म और / या भाषा प्रतिबंधों का उल्लेख किया है जो आपके पास हो सकता है।


"अंततः मुझे WPF UI बनाने की उम्मीद है" - इसका मतलब है कि .NET। कम से कम, जहां तक ​​मैं बता सकता हूं।
मार्क एलन

वर्णमाला का सूप जिसकी मुझे जानकारी नहीं है।
jmucchiello

हाँ, मैं .NET कर रहा हूँ, लेकिन मेरा प्रश्न भाषा-या प्लेटफ़ॉर्म-विशिष्ट नहीं है।
Jay Bazuzi

2

मैं प्योरोलॉजिकल के उत्तर से सहमत हूं और मैं चीजों को करने के उनके तरीके को पसंद करता हूं (हालांकि मैंने अन्य उत्तरों को स्किम्ड किया है)।

संयोगवश मैंने उसका "गेमपेज़" नामकरण भी किया। मूल रूप से मैं एक बारी-आधारित बोर्ड गेम के मामले में क्या करता हूं, आपके गेमस्टेट वर्ग में सार गेमप्ले की एक वस्तु है, जैसा कि पाइरोलॉजिकल द्वारा उल्लेख किया गया है।

कहते हैं कि खेल राज्य हैं:

  1. घूमना
  2. चाल
  3. खरीदें / न खरीदें
  4. जेल

आपके पास प्रत्येक राज्य के लिए ठोस व्युत्पन्न वर्ग हो सकते हैं। कम से कम इसके लिए आभासी कार्य करें:

StartPhase();
EndPhase();
Action();

StartPhase () फ़ंक्शन में आप किसी अन्य खिलाड़ी के इनपुट को अक्षम करने के लिए एक राज्य के लिए सभी प्रारंभिक मान सेट कर सकते हैं और इसके बाद।

जब रोल.एंडपेज़ () कहा जाता है, तो सुनिश्चित करें कि गेमपेज़ पॉइंटर अगले राज्य में सेट हो जाता है।

phase = new MovePhase();
phase.StartPhase();

इस MovePhase में: StartPhase () आप उदाहरण के लिए पिछले चरण में रोल की गई राशि के लिए सक्रिय खिलाड़ी की शेष चाल सेट करेंगे।

अब इस डिज़ाइन के साथ आप रोल चरण के अंदर अपनी "3 x डबल = जेल" समस्या को हल कर सकते हैं। रोलपेज़ क्लास अपनी स्थिति को संभाल सकती है। उदाहरण के लिए

GameState state; //Set in constructor.
Die die;         // Only relevant to the roll phase.
int doublesRemainingBeforeJail;
StartPhase()
{
    die = new Die();
    doublesRemainingBeforeJail = 3;
}

Action()
{
    if(doublesRemainingBeforeJail<=0)
    {
       state.phase = new JailPhase(); // JailPhase::StartPhase(){set moves to 0};            
       state.phase.StartPhase();
       return;
    }

    int die1 = die.Roll();
    int die2 = die.Roll();

    if(die1 == die2)
    {
       --doublesRemainingBeforeJail;
       state.activePlayer.AddMovesRemaining(die1 + die2);
       Action(); //Roll again.
    }

    state.activePlayer.AddMovesRemaining(die1 + die2);
    this.EndPhase(); // Continue to moving phase. Player has X moves remaining.
}

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

अंत में गेमबोर्ड को संबोधित करते हैं। हालांकि एक 2 डी सरणी ठीक है, मैं एक टाइल ग्राफ (जहां एक टाइल बोर्ड पर एक स्थिति है) रखने की सलाह दूंगा। मोनोपॉली के मामले में यह एक डबल-लिंक्ड सूची होगी। फिर हर टाइल में एक होगा:

  1. previousTile
  2. nextTile

इसलिए कुछ करना बहुत आसान होगा:

While(movesRemaining>0)
  AdvanceTo(currentTile.nextTile);

AdvanceTo फ़ंक्शन आपके कदम को कदम एनिमेशन या आप जो भी पसंद करते हैं उसे संभाल सकते हैं। और पाठ्यक्रम की शेष चालों को भी घटाया।

GUI के लिए ऑब्जर्वर पैटर्न पर RS कॉनले की सलाह अच्छी है।

मैंने बहुत पहले पोस्ट नहीं किया है। आशा है कि यह किसी की मदद करता है।


1

क्या कुछ पूर्व कलाएं हैं जिनका मैं लाभ उठा सकता हूं?

यदि आपका प्रश्न भाषा-या मंच-विशिष्ट नहीं है। फिर मैं सलाह दूंगा कि आप राज्य, मेमेंटो, कमांड आदि के लिए एओपी पैटर्न पर विचार करें।

AOP को .NET उत्तर दें ???

इसके अलावा कुछ कूल वेबसाइट्स जैसे http://www.chessbin.com खोजने की कोशिश करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.