https://en.wikipedia.org/wiki/Losing_chess
यह मूल रूप से शतरंज टूर्नामेंट है , लेकिन पुरातन के लिए;)
Antichess कई शतरंज वेरिएंट में से एक है जिसका आविष्कार किया गया है। लक्ष्य अपने सभी टुकड़ों को खोना है (यह थोड़ा अजीब लग सकता है, लेकिन इसे एक कारण के लिए एंटीचेस कहा जाता है)।
नियम
पुरातनता के नियम मानक शतरंज के समान हैं - लेकिन कुछ काफी मामूली अंतरों के साथ। जैसा कि मैंने ऊपर बताया लक्ष्य आपके सभी टुकड़ों को खोना है। ऐसा करने के लिए, यदि आपके प्रतिद्वंद्वी के पास आपके किसी एक टुकड़े को पकड़ने का अवसर है, तो वह एकमात्र चाल है जो वह कर सकता है। यदि आप उसे एक बारी में कई मौके देते हैं, तो दूसरा खिलाड़ी अपनी बारी चुन सकता है। एक और बात जो बदली है वह यह है कि राजा के पास कोई विशेष शक्तियां नहीं हैं - जैसे कि आप अपने प्रतिद्वंद्वी की जांच नहीं कर सकते हैं, और आप उसे जांच में शामिल नहीं कर सकते।
मानक खेल में निम्नलिखित परिवर्तन भी लागू होंगे (वे खेल को सरल बनाने में मदद करते हैं):
- एन पास करने वाले की अनदेखी की जाएगी।
- Castling संभव नहीं है।
- पचास-चाल नियम स्वचालित रूप से (एक ड्रॉ में खेल समाप्त होता है जिसका अर्थ है) लागू होता है।
- प्यादे यह चुनने में सक्षम होंगे कि वे किस चीज को बढ़ावा देते हैं।
- यदि किसी खिलाड़ी को स्थानांतरित होने के लिए 2 सेकंड से अधिक की आवश्यकता होती है, तो वह खेल खो देगा।
- अमान्य कदम वापस करने से खेल को खोना पड़ेगा।
- जीतने के लिए, आपके विरोधियों को आपके सभी टुकड़ों पर कब्जा करना चाहिए ।
- सफेद खेल शुरू होता है।
- सफेद को क्षेत्र के "नीचे" (y = 0) पर रखा गया है, काला शीर्ष पर स्थित है (y = 7)।
- आपके बॉट (इंटरनेट, फाइलें, अन्य बॉट्स, ...) की तुलना में अन्य संसाधनों तक पहुंच निषिद्ध है।
स्कोरिंग
- आपको 3 अंक जीतना, 1 अंक ड्रा करना और 0 अंक गंवाना।
- प्रत्येक प्रस्तुत एक दूसरे के खिलाफ 10 बार प्रस्तुत करेगा (5 बार सफेद के रूप में, 5 काले के रूप में)।
अपना बॉट लिखना
कंट्रोलर कोड यहाँ है: https://github.com/JJ-Atkinson/SimpleAntichessKOTH
आप अपने बॉट को जावा या ग्रूवी में लिख सकते हैं। बॉट लिखने के लिए आपको Player
कक्षा का विस्तार करना चाहिए । खिलाड़ी वर्ग में एक सार पद्धति है Move getMove(Board board, Player enemy, Set<Move> validMoves)
।
यहाँ उपयोगी तरीकों पर एक त्वरित ठहरनेवाला है:
Player
:
List<Piece> getPieces(Board board)
: अपने सभी टुकड़ों को लौटाएं जो बोर्ड पर हैं।PieceUpgradeType pieceUpgradeType
: यदि / जब आपका एक पाव बोर्ड के अंत तक पहुंचता है, तो आपको इसे उस प्रकार को परिभाषित करना होगा, जिसे आप अपग्रेड करना चाहते हैं। आप का विकल्प हैROOK
,KNIGHT
,QUEEN
,BISHOP
, औरKING
।
Board
:
Field getFieldAtLoc(Location loc)
:Field
स्थान पर लौटें । इसकी एक मिलानgetAt
विधि है ताकि यदि आप groovy का उपयोग कर रहे हैं तो आप लिख सकते हैंboard[loc]
।Field getFieldAtLoc(int x, int y)
:Field
स्थान पर लौटें । इसकी एक मिलानgetAt
विधि है ताकि यदि आप groovy का उपयोग कर रहे हैं तो आप लिख सकते हैंboard[x, y]
।Board movePiece(Player player, Move move)
: बोर्ड पर एक कदम रखें ताकि आप देख सकें कि यह कैसे खेलता है। यह नया बोर्ड लौटाता है।
यदि आप अपने विरोधियों के टुकड़े देखना चाहते हैं, तो बस लिखें enemy.getPieces(board)
। अपने बॉट को लाइनअप में जोड़ने के लिए निम्न लाइन को इसमें जोड़ें PlayerFactory
:
put(YourBot.class, { new YourBot() } )
अपने बॉट को डिबग करना:
मैंने आपके बॉट्स को डिबग करने में सहायता के लिए कुछ उपकरणों को शामिल किया है। अपने खेल को लाइव देखने के लिए आप Game#DEBUG
ध्वज को सही पर सेट कर सकते हैं । आपको कुछ इस तरह का आउटपुट मिलेगा:
Game started. Players: [OnePlayBot(WHITE), SacrificeBot(BLACK)]
...
BLACKs turn.
validMoves: [Move(Piece(BLACK, PAWN, Loc(0, 6)), Loc(0, 5)), ...]
board:
RKBQIBKR
PPPPPPPP
--------
--------
--------
p-------
-ppppppp
rkbqibkr
captureless turns: 1
chosen move: Move(Piece(BLACK, PAWN, Loc(7, 6)), Loc(7, 4))
Game over? false
==============================
WHITEs turn.
validMoves: [Move(Piece(WHITE, ROOK, Loc(0, 0)), Loc(0, 1)), ...]
board:
RKBQIBKR
PPPPPPP-
--------
-------P
--------
p-------
-ppppppp
rkbqibkr
...
(सफेद ऊपरी मामला है, राजा के साथ दिखाया गया है i
)
यदि आपका कंसोल utf-8 विशेष वर्णों का समर्थन करता है, तो आप बोर्ड का उपयोग करके शतरंज वर्णों के साथ दिखा सकते हैं Board#USE_UTF8_TO_STRING
:
♜♞♝♛♚♝—♜
♟—♟♟♟♟♟♟
————————
—♟——————
————————
♙———————
—♙♙♙♙♔♙♙
♖♘♗♕—♗♘♖
(यह मोनो स्पेसल फ़ॉन्ट के साथ बेहतर दिखता है)
अवांछित आउटपुट की बाढ़ को रोकने के लिए, आपको Main#main
फ़ंक्शन को कुछ इस तरह बदलना चाहिए :
new Game(new MyBot(), new SacrificeBot()).run()
अपने बॉट को सफेद के रूप में खेलने के लिए बाईं ओर रखें, इसे ब्लैक के रूप में खेलने के लिए दाईं ओर रखें।
नियंत्रक का निर्माण:
नियंत्रक ग्रूवी में लिखा गया है, इसलिए आपके पास जावा और ग्रूवी स्थापित होना चाहिए। यदि आप ग्रूवी स्थापित नहीं करना चाहते हैं तो आप नियंत्रक के साथ आने वाली ग्रेडल बिल्ड फ़ाइल का उपयोग कर सकते हैं (यह परीक्षण नहीं किया गया है)। यदि आप groovy या gradle का उपयोग नहीं करना चाहते हैं तो आप नवीनतम रिलीज़ जार ( https://github.com/JJ-Atkinson/SimpleAntichessKOTH/releases ) का उपयोग कर सकते हैं । यदि आप ऐसा करते हैं, तो आपको अपना खुद का main
तरीका बनाने और अपने बॉट को प्लेयर फैक्ट्री में जोड़ने की आवश्यकता है । उदाहरण:
PlayerFactory.players.put(YourBot.class, { new YourBot() } )
new Runner().runGames();
(ध्यान दें कि आप अभी भी डिबग फ़्लैग और सामान सेट कर सकते हैं)
किसी भी और सभी बग खोज की सराहना की है!
स्कोर:
SearchBot -> 101
SacrificeBot -> 81
MeasureBot -> 37
RandomBot -> 28
OnePlayBot -> 24
कृपया ध्यान दें कि मैं हमेशा नई प्रस्तुतियाँ करने को तैयार हूँ!