मैं कार्ड गेम कैसे डिजाइन कर सकता हूं?


10

मैं अपने कार्ड खेल के लिए एक अच्छी वास्तुकला के साथ नहीं आ सकता। मुझे यह समझने में मदद की जरूरत है कि खेल आमतौर पर कैसे डिजाइन किए जाते हैं।

सबसे पहले, मैं खेल के नियमों का वर्णन करूंगा।

खेल के नियमों

सेट अप
  • चार खिलाड़ी हैं, प्रत्येक दो खिलाड़ी एक टीम बनाते हैं।
  • प्रत्येक खिलाड़ी को 12 फेरबदल कार्ड दिए जाते हैं
  • टेबल (नदी) पर 4 अंधे कार्ड हैं
  • खिलाड़ियों का आदेश इस तरह है

यहां छवि विवरण दर्ज करें

शर्त
  • प्रत्येक खिलाड़ी 100 से 160 के बीच की वर्तमान शर्त से अधिक संख्या पास या चुन सकता है
  • बेटिंग पहले खिलाड़ी और सर्कल से शुरू होती है जब तक कि एक टीम पास नहीं होती
  • एक बार एक खिलाड़ी पास होने के बाद वे अब और शर्त नहीं लगा सकते
  • बेटिंग राउंड जीतने वाली टीम को गेम जीतने के लिए कम से कम अपनी बाजी के बराबर अंक जुटाने चाहिए
  • सट्टेबाजी का दौर हारने वाली टीम को अपनी टीम को अपना लक्ष्य हासिल करने की अनुमति नहीं देनी चाहिए

  • यदि वह टीम जिसने सट्टेबाजी का दौर जीता है, तो सभी बिंदुओं को दूसरी टीम को अपने दांव के बराबर नकारात्मक अंक मिलेंगे

  • यदि टीम जो सट्टेबाजी के दौर को खो देती है वह सभी बिंदुओं को एकत्र करती है तो दूसरी टीम को दोहरे नकारात्मक अंक मिलेंगे

खेल का प्रवाह और एकत्रित अंक

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

गिनती के अंक

  • प्रत्येक राउंड को जीतने पर 5 अंक होते हैं। इसका मतलब है कि हर 4 कार्ड में कम से कम 5 अंक हैं।
  • ऐस होने से 10 या 5 बैंक में प्रत्येक 5 अंक जोड़ता है

मेरी डिजाइन

कक्षाएं

class Card {
   string suit;
   string rank
}
class Deck {
  List cards = [];
  List suits = ['S', 'H', 'D', 'C'];
  List ranks = ['1', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'];
  private void init(){..}
  void shuffle(){...}
}

class Game{
  Deck deck = new Deck();
  Player player1;
  Player player2;
  Player player3;
  Player player4;
  int _isOn = 0;

  Game(this.player1, this.player2, this.player3, this.player4){
    deck.makeCards();
    deck.shuffle();
    start();
  }

  void start(){
    player1.cards.addAll( deck.cards.getRange(0, 12) );
    player2.cards.addAll( deck.cards.getRange(12, 24) );
    player3.cards.addAll( deck.cards.getRange(24, 36) );
    player4.cards.addAll( deck.cards.getRange(36, 48) );
    deck.cards.removeRange(0, 48);
  }

  String toJson(){
  }

  String toString(){
  }
}
class Player{
  String name;
  int points;
  List cards = [];

  Player(this.name, {this.points});

  String toJson(){}

  String toString(){}
}

मेरी समस्या

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

  • वह सब तर्क कहाँ जाना चाहिए?
  • मुझे सर्वर / क्लाइंट परिदृश्य में राज्य कैसे रखना चाहिए?

ध्यान दें:

मैं यह प्रोग्राम करने के लिए डार्ट का उपयोग कर रहा हूं, लेकिन मैं नहीं चाहता कि उत्तर डार्ट में लिखे जाएं।


यदि कोई आपके कोड को देख रहा है और इसे एक प्रारंभिक बिंदु के रूप में उपयोग कर रहा है, तो ध्यान दें कि आपको रैंक में ए या 1 चुनना चाहिए, लेकिन इसमें दोनों शामिल हैं।
बेन

जवाबों:


10

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

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

इसलिए मुझे उम्मीद है कि गेम में कई नए तरीके होंगे:

getPlayers()        // Get all player info
getCurrentPlayer()  // Get information about the active player in his turn (hand, money to bet with, etc.)
fold()              // Current player folds and current player changes
bet(float amount)   // Current player bets and current player changes

संक्षेप में, खेल को चलाने के लिए आपको जो कुछ भी जानना आवश्यक है, आप अपनी वस्तु का उपयोग करके ऐसा कर सकते हैं Gameकेवल एक बार आपके पास यह है कि आप चरण 2 पर आगे बढ़ें।

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

इस जानकारी को जारी रखने के लिए, आप एक अन्य वर्ग बना सकते हैं जो MongoDB को एक इंटरफ़ेस प्रदान करता है। इस वर्ग के अस्तित्व का पता नहीं होगा Gameऔर न ही Gameइस वर्ग के अस्तित्व का पता होगा ।

संक्षेप में, व्यक्तिगत घटकों पर ध्यान दें, और आप ठीक हो जाएंगे। जब आप अपने कार्यक्रम को लिखते समय बहुत से पहलुओं को ध्यान में रखना चाहते हैं तो आप गलत होने लगते हैं। एक बुद्धिमान प्रोफेसर के रूप में एक बार मुझसे कहा था, " इस तथ्य को जानो और गले लगाओ कि एक परियोजना के लिए आप जो पहला कार्यक्रम लिखेंगे, वह अंत तक अपनी संपूर्णता में फिर से लिखा जाएगा। "


एक तरफ, यह संख्या व्यक्ति के आधार पर 3 से 9 तक कहीं भी है - मैं 4 या 5 कर सकता हूं, मैं इस बात पर निर्भर करता हूं कि मैं कितना सतर्क हूं। सामान्य परीक्षण डॉट्स के एक समूह को देखना है और यह पता लगाना है कि आप उन्हें मानसिक रूप से समूहित किए बिना व्यक्तिगत रूप से कितने अनुभव कर सकते हैं - 6 पर, मैं स्वचालित रूप से उन्हें 3 + 3 में समूहित करना शुरू करता हूं, उदाहरण के लिए, और आसानी से उन्हें फिर से अलग नहीं कर सकता। ।
इजाकाता

@ इज़्काता दिलचस्प है। मुझे नहीं पता था कि इसके लिए एक परीक्षण था। क्या आपके पास एक लिंक है?
नील

1
en.wikipedia.org/wiki/… स्रोत है, मेरा मानना ​​है।
आकाशवाणी ०१३ ’ak:३३

1

वह सब तर्क कहाँ जाना चाहिए?

इसे अपनी Gameकक्षा में रखना शुरू करें ।

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

आखिरकार आप उस FSM को अलग-अलग वर्ग (तों) में निकालना चाहेंगे, लेकिन अब इसके बारे में चिंता न करें।

मुझे सर्वर / क्लाइंट परिदृश्य में राज्य कैसे रखना चाहिए?

आपके सेटअप के बारे में अधिक जानकारी के बिना उत्तर देना असंभव है। अपने गेम ऑब्जेक्ट को सीरियलाइज़ करके डेटाबेस को हर मोड़ पर बताता है।


यहाँ राज्य / FSM पर एक साथ एक टुकड़ा है, इस मामले में खेलों पर केंद्रित पुस्तक से: gameprogrammingpatterns.com/state.html
shmup
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.