टर्न-आधारित गेम इंजन कैसे लागू करें?


17

चलो कल्पना कर सकते हैं जैसे कि हीरो और मैजिक, या मास्टर ऑफ ओरियन, या आपकी पसंद का खेल। अगली बारी बनाने के पीछे क्या खेल तर्क है? क्या विषय के बारे में पढ़ने के लिए कोई सामग्री या किताबें हैं? विशिष्ट होने के लिए, आइए गेम लूप की कल्पना करें:

void eventsHandler(); //something that responds to input
void gameLogic(); //something that decides whats going to be output on the screen
void render(); //this function outputs stuff on screen

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

जवाबों:


21

एक बारी आधारित खेल एक राज्य मशीन द्वारा शासित होने वाला है । मूल रूप से, आप उन राज्यों की एक श्रृंखला तैयार करेंगे जो तार्किक क्रम में हो सकते हैं।

उच्च स्तर पर, एक खिलाड़ी की बारी एक नए राज्य की शुरुआत हो सकती है, उसके बाद उस मोड़ के दौरान सभी संभावित कार्यों की अनुमति होती है।

उदाहरण के लिए

  • राज्य - खिलाड़ी बदलें
    • अब खिलाड़ी 1 की बारी है
  • कार्रवाई की अनुमति दी
    • हमला
      • हमला करने के लिए दुश्मन का चयन करें
    • बचाव
      • बचाव के लिए इकाई का चयन करें
    • इकाई ले जाएँ
      • स्थानांतरित करने के लिए इकाई का चयन करें
      • आंदोलन सुनिश्चित करने के लिए जाँच की अनुमति है
    • आदि

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


मेरा एक काफी पुराना स्कूल प्रोजेक्ट जो अंतिम काल्पनिक रणनीति पर एक 3 महीने का विकास प्रयास था :) जैसा कि ऊपर वर्णित एक राज्य मशीन (वास्तव में उन्हें कुछ) का उपयोग करता है। sourceforge.net/projects/bpfat
जेम्स

अरे, बारी-आधारित रणनीति के लिए गेम इंजन के बारे में क्या? क्या आप कुछ भी सलाह दे सकते हैं? हो सकता है कि अवास्तविक इंजन फिट हो सकता है?
रानतिवे

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

3

मैंने हाल ही में मास्टर ऑफ ओरियन के समान टर्न आधारित रणनीति गेम बनाया है (यह अभी केवल एकल खिलाड़ी है, मल्टी-प्लेयर थोड़ा अधिक जटिल होगा, लेकिन एक समान विचार), यहाँ मेरा अंतिम कार्य तर्क जैसा दिखता है (में मुख्य खेल नियंत्रक वर्ग):

//for all computer players:
computerTakeTurn(player)

//for all players
moveShips(player)

//for all players
endTurn(player)//see this function below

//for all planets
planet.repairFleet()

//for all players
resolvePlanetaryConflicts(player)

//check to see if any players were destroyed or if the game is over
checkPlayerDestroyedAndGameOver()

मेरा खिलाड़ी एंड टर्न फ़ंक्शन उस खिलाड़ी के लिए विशिष्ट कार्य करेगा जो खिलाड़ियों के बीच होने वाले क्रम से प्रभावित नहीं होता है:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

जहां उपयुक्त हो, ये फ़ंक्शन स्थिति संदेश और / या ट्रिगर घटनाओं को लौटाते हैं ताकि GUI दिखा सकें कि मोड़ के दौरान क्या हुआ था या खिलाड़ी को कंप्यूटर को नष्ट कर दिया गया था, आदि ...


क्या आप कृपया जाँच करने के लिए स्रोत कोड प्रदान कर सकते हैं? बहुत मदद मिलेगी। सिर्फ शैक्षिक उद्देश्यों के लिए।
18

@ मैं वर्तमान में HTML5 कैनवास टैग का उपयोग करके कोड को सिल्वरलाइट / C # से जावास्क्रिप्ट में परिवर्तित करने पर काम कर रहा हूं। एक बार जब मैं समाप्त कर लेता हूं तो मैं कोड को ओपन सोर्स करने की योजना बना रहा हूं और उस समय आपका स्वागत है। यदि यह संदर्भ प्राप्त करने में आपकी मदद करता है तो आप यहां मेरा स्पेस स्ट्रैटेजी गेम खेल सकते हैं: एस्ट्रिच - स्टार्स के शासक
मैट पामरली

2
@Dvole यह मुझे काफी समय लग गया है, लेकिन मैं अभी Astriarch का सिल्वरलाइट संस्करण खोली हूँ। यदि आप अभी भी रुचि रखते हैं, तो आप यहाँ github से स्रोत कोड डाउनलोड कर सकते हैं: github.com/mpalmerlee/Astriarch/tree/Silverlight
मैट पामर्ली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.