बीएस एक कार्ड गेम है जहां गेम का उद्देश्य आपके सभी कार्ड खोना है।
एक गेम में चार खिलाड़ी और 52 कार्ड डेक होते हैं। प्रत्येक खिलाड़ी को बेतरतीब ढंग से 13 कार्ड निपटाए जाते हैं। आम तौर पर, कार्ड को 2 - 10, ऐस, जैक, क्वीन, किंग के रूप में लेबल किया जाता है, लेकिन सादगी के लिए, कार्ड को 0 - 12 समावेशी के एक नंबर के साथ लेबल किया जाएगा। हालांकि एक खिलाड़ी के हाथ में कार्ड की संख्या सार्वजनिक जानकारी होती है, केवल खिलाड़ी को पता होता है कि उसके हाथ में कौन से विशिष्ट कार्ड हैं।
खेल निम्नानुसार है: पहला खिलाड़ी 0 लेबल वाले कई स्थानों को चिह्नित करता है क्योंकि वह डिसाइड पाइल में चाहता है (ध्यान दें कि उसे 0 लेबल वाले अपने सभी कार्ड खेलने की आवश्यकता नहीं है , हालांकि आमतौर पर ऐसा करना उसके लिए सबसे अच्छा हित है। )। उसे कम से कम एक कार्ड खेलना होगा। दूसरा खिलाड़ी जितने कार्ड खेलता है, वह 1 लेबल लगाना चाहता है , तीसरा खिलाड़ी 2 निभाता है , और इसी तरह। 12 के बाद, यह 0 पर रहता है।
यदि आपके पास ऐसा कोई कार्ड नहीं है जो आपको खेलना चाहिए तो क्या होगा? याद रखें, आपको कम से कम एक कार्ड खेलना होगा - वास्तव में, आप अपनी इच्छानुसार कोई भी कार्ड खेल सकते हैं! (वास्तव में, भले ही आपके पास सही कार्ड हो, आप झूठ बोल सकते हैं और एक अलग कार्ड खेल सकते हैं)। हालांकि, कोई आपको कॉल करके कह सकता है, "बीएस!" यदि वह कोई सही है और आपने झूठ बोला था, तो आपको सभी कार्डों को त्यागना होगा; एक इनाम के रूप में, जिस खिलाड़ी ने आपको बुलाया है, वह बेतरतीब ढंग से अपना एक कार्ड त्यागने के ढेर में रखता है। यदि अभियुक्त गलत है, तथापि, उसे सभी कार्डों को त्यागना होगा। ध्यान दें कि आप अपने द्वारा खेले जाने वाले कार्डों की संख्या के बारे में झूठ नहीं बोल सकते ।
अधिक विस्तृत जानकारी:
- खेल की शुरुआत में, चार यादृच्छिक खिलाड़ियों को खेलने के लिए चुना जाता है। चूंकि कम से कम 1000 गेम होंगे, प्रत्येक खिलाड़ी को खेलने का मौका मिलेगा। खेल की शुरुआत में टर्न ऑर्डर बेतरतीब ढंग से तय किया जाता है
- यदि आप एक सही कार्ड और एक गलत कार्ड लौटाते हैं, तो यह झूठ माना जाता है (यानी यदि आपको 2 एस देने वाले थे , और आपने एक 2 और एक 1 दिया था , तो वह झूठ है)
- यदि दो या अधिक खिलाड़ी दोनों एक ही समय में बीएस कहते हैं, तो एक को यादृच्छिक रूप से चुना जाता है।
- आपका स्कोर उन खेलों का प्रतिशत है जिन्हें आप जीतते हैं।
- अधिकतम 1000 राउंड होते हैं, जहां एक राउंड हर खिलाड़ी एक बार जाता है। आमतौर पर, इससे पहले कि कोई जीतता है। यदि कोई नहीं जीतता है, तो यह खेले जाने वाले कुल खेलों की ओर गिना जाता है, लेकिन कोई भी जीतता नहीं है।
युक्ति:
आपको एक वर्ग लिखना चाहिए जो विस्तारित हो Player
। ऐसा लगेगा:
package players;
import java.util.ArrayList;
import java.util.List;
import controller.*;
public class Player1 extends Player {
@Override
protected List<Card> requestCards(int card, Controller controller) {
Card[] hand = getHand();
List<Card> ret = new ArrayList<Card>();
for (Card c : hand) {
if (c.getNumber() == card) {
ret.add(c);
}
}
if (ret.size() == 0) ret.add(hand[0]);
return ret;
}
@Override
protected boolean bs(Player player, int card, int numberOfCards, Controller controller) {
return numberOfCards >= 3;
}
protected void update(Controller controller) {
// This method gets called once at the end of every round
}
protected void initialize(Controller controller) {
// This method gets called once at the beginning once all the cards are dealt
}
public String toString() {
return "Player 1";
}
}
requestCards
जब आपकी बारी है तो विधि को बुलाया जाता है। तर्क card
वह कार्ड नंबर है जिसे आप प्रदान करने वाले हैं। आप उन कार्डों की एक सूची लौटाते हैं जिन्हें आप त्यागने के ढेर में रखना चाहते हैं। उपरोक्त खिलाड़ी यह देखने के लिए जाँच करता है कि क्या उसके पास अनुरोधित कार्ड प्रकार के कोई कार्ड हैं; यदि नहीं, तो वह अपना पहला कार्ड खेलता है और उम्मीद करता है कि कोई भी चेक नहीं करेगा।
bs
जब भी कोई और कार्ड खेलता है तो विधि को कहा जाता है। पहला तर्क खिलाड़ी, दूसरा - वह कार्ड जिसे वह खेलने वाला था , और तीसरा - उस प्रकार के कार्ड की संख्या जो वह दावा करता है कि उसने खेला है। true
यदि आप "बीएस" कॉल करना चाहते हैं तो वापस लौटें । उपरोक्त कोड में, खिलाड़ी केवल "बीएस" कहता है जब अन्य खिलाड़ी अनुरोध किए गए प्रकार के 3 या अधिक कार्ड होने का दावा करता है।
दोनों विधियों के लिए अंतिम तर्क है controller
, जो खेल को नियंत्रित करने वाले नियंत्रक है। नियंत्रक से, आप अधिक सार्वजनिक जानकारी प्राप्त कर सकते हैं, जैसे कि त्यागने के ढेर में कार्ड की संख्या या खिलाड़ियों की सूची और टर्न ऑर्डर।
toString
विधि वैकल्पिक है।
गितहब पर कनोलटर: https://github.com/prakol16/bs
यदि आप एक गैर-जावा समाधान पोस्ट करना चाहते हैं, तो आप https://github.com/LegionMammal978/bs (LegionMammal978 पर क्रेडिट) में दिए गए इंटरफ़ेस का उपयोग कर सकते हैं और मैं इसे एकीकृत करने का प्रयास करूंगा।
अब तक का स्कोरबोर्ड:
class players.PlayerConMan: 2660/4446 = 59.82905982905983%
class players.CalculatingLiar: 2525/4426 = 57.049254405784005%
class players.PlayerTruthy: 1653/4497 = 36.75783855903936%
class players.Player4: 1446/4425 = 32.67796610169491%
class players.Player1: 536/4382 = 12.23185759926974%
class players.Player3: 493/4425 = 11.141242937853107%
class players.Player2: 370/4451 = 8.312738710402156%
class players.LiePlayer: 317/4432 = 7.152527075812275%
class players.Hoarder: 0/4516 = 0.0%
PlayerConMan जीत रहा है, लेकिन कैलकुलेटिंग लियर लगभग दूसरे स्थान पर है। ये स्कोर सुसंगत लगते हैं - वे हर बार समान रूप से होते हैं।
Controller.toString()
सार्वजनिक रूप से उजागर नहीं करने की सलाह दी जा सकती है , क्योंकि यह सभी खिलाड़ियों के हाथों को वापस करता है और ढेर को त्याग देता है।