मैं एक शतरंज गेम लिखने की कोशिश कर रहा हूं और पाया कि मुझे स्टेलेमेट स्थिति खोजने के लिए समाधान नहीं मिल रहे हैं। मैं गूगल करने की कोशिश कर रहा हूं, लेकिन कुछ भी नहीं मिला। क्या कोई प्रसिद्ध एल्गोरिदम या कुछ है?शतरंज स्टेलेमेट नियम को कैसे कोड करें?
उत्तर
आपका चाल जनरेटर दो अलग-अलग डिज़ाइनों में से एक होगा;
- या तो इसे वैधता के लिए जाँच करता चलता रहता है
- पैदा करने या आप सभी संभावित चाल पैदा करते हैं और उन है कि बाद में अवैध हैं को दूर करते हुए।
पूर्व बेहतर है क्योंकि इसे पोस्ट-प्रोसेसिंग की आवश्यकता नहीं है।
एक स्टेलेमेट स्थिति केवल एक है जहां कोई कानूनी चाल नहीं है और चलती-पक्ष का राजा चेक में नहीं है। एक चेकमेट शर्त वह जगह है जहां कोई कानूनी चाल नहीं है लेकिन चलती-पक्ष के राजा चेक में है।
दूसरे शब्दों में यदि आपने यह पता लगाया है कि चेक और चेकमैट का पता लगाने के लिए, आपको पहले से ही स्टेलेमेट का पता लगाने के लिए आवश्यक सब कुछ मिल गया है।
यहाँ क्लासिक शतरंज खेल के लिए सभी नियमों के साथ एक ओपन-सोर्स कोड है: https://github.com/cjortegon/basic-chess
आप सही परियोजना (Android, iOS, डेस्कटॉप और वेब) क्लोनिंग के बाद परियोजना चला सकते हैं, या आप कर सकते हैं मुख्य तर्क का उपयोग करें, जो यहां है: https://github.com/cjortegon/basic-chess/tree/master/libgdx/core/src/com/mountainreacher/chess/model
मैंने 3-क्षणों के एल्गोरिदम पर अपना समाधान आधारित किया, पहला पल तब होता है जब खिलाड़ी बोर्ड से एक टुकड़ा चुनता है, तब जब इस टुकड़े का गंतव्य चुना गया है और अंत में जब टुकड़ा उस स्थिति तक पहुंच जाता है (यह मानते हुए कि यह एनिमेटेड गेम है, यदि नहीं, तो आप चरण 2 और 3 मर्ज कर सकते हैं)।
जावा में निम्नलिखित कोड लागू किया गया है। मॉडल वर्ग के गुणों से:
boolean turn;
GenericPiece selected, conquest;
ClassicBoard board;
List<int[]> possibleMovements;
int checkType;
पहली विधि क्षणों 1, 2 और विशेष 'विजय' पल संभाल लेंगे (टुकड़ा मोहरा के लिए लागू केवल):
public boolean onCellClick(int row, int column) {
if (row == -1 && conquest != null) {
checkType = 0;
conquest.changeFigure(column);
return true;
} else if (selected != null) {
if (possibleMovements != null) {
for (int[] move : possibleMovements) {
if (move[0] == row && move[1] == column) {
// Move the PieceActor to the desired position
if (selected.moveTo(row, column)) {
turn = !turn;
}
break;
}
}
}
selected = null;
possibleMovements = null;
return true;
} else {
selected = board.getSelected(turn ? Piece.WHITE_TEAM : Piece.BLACK_TEAM, row, column);
if (selected != null) {
possibleMovements = new ArrayList<>();
possibleMovements.addAll(((GenericPiece) selected).getMoves(board, false));
// Checking the movements
board.checkPossibleMovements(selected, possibleMovements);
if (possibleMovements.size() == 0) {
possibleMovements = null;
selected = null;
return false;
} else {
return true;
}
}
}
return false;
}
और निम्न विधि जाँच के साथी और का विजय अभियान नियमित टुकड़ा आंदोलनों, कैसलिंग, चेक,: 3rd पल संभाल लेंगे (जब एनीमेशन खत्म):
public void movedPiece(Piece piece) {
Gdx.app.log(TAG, "movedPiece(" + piece.getType() + ")");
// Killing the enemy
Piece killed = board.getSelectedNotInTeam(piece.getTeam(),
piece.getRow(), piece.getColumn());
if (killed != null) {
killed.setAvailable(false);
}
// Checking hacks
GenericPiece[] threat = board.kingIsInDanger();
if (threat != null) {
checkType = board.hasAvailableMoves(threat[0].getTeam()) ? CHECK : CHECK_MATE;
} else {
checkType = NO_CHECK;
}
// Checking castling
if (piece.getFigure() == Piece.ROOK && ((GenericPiece) piece).getMovesCount() == 1) {
Piece king = board.getSelected(piece.getTeam(),
piece.getRow(), piece.getColumn() + 1);
if (king != null && king.getFigure() == Piece.KING && ((GenericPiece) king).getMovesCount() == 0) {
// Left Rook
if (board.getSelected(piece.getRow(), piece.getColumn() - 1) == null) {
king.moveTo(piece.getRow(), piece.getColumn() - 1);
}
} else {
king = board.getSelected(piece.getTeam(),
piece.getRow(), piece.getColumn() - 1);
if (king != null && king.getFigure() == Piece.KING && ((GenericPiece) king).getMovesCount() == 0) {
// Right Rook
if (board.getSelected(piece.getRow(), piece.getColumn() + 1) == null) {
king.moveTo(piece.getRow(), piece.getColumn() + 1);
}
}
}
}
// Conquest
else if (piece.getFigure() == Piece.PAWN && (piece.getRow() == 0 || piece.getRow() == board.getRows() - 1)) {
conquest = (GenericPiece) piece;
checkType = CONQUEST;
}
}
कि कोड सहित क्लासिक शतरंज, से सभी नियमों को शामिल किया गया प्यादे।
पर एक नज़र डालें, ये अच्छे लिंक हैं, लेकिन एक नियम के रूप में, एक उत्तर उचित रूप से स्वयं निहित होना चाहिए। लिंक स्थानांतरित हो जाते हैं और समाप्त हो जाते हैं, लेकिन ये उत्तर यहां हैं ... अच्छा, वास्तव में लंबा समय। –
@ डेविड लाइवली मैंने गिटूब रिपोजिटरी से कोड के आवश्यक हिस्सों को शामिल किया है। –
- 1. शतरंज
- 2. कोड संस्करण परिवर्तन "नियम"
- 3. एक नियम कोड फ़ाइल
- 4. एकीकरण नियम को कैसे कार्यान्वित करें?
- 5. नि: शुल्क जावास्क्रिप्ट शतरंज
- 6. FxCop और कोड विश्लेषण नियम
- 7. शतरंज के लिए एक तंत्रिका नेटवर्क कैसे प्रोग्राम करें?
- 8. नियम इंजन कैसे डिज़ाइन करें?
- 9. शतरंज स्थान सत्यापन पुस्तकालय
- 10. जावास्क्रिप्ट में शतरंज खेल
- 11. एक शतरंज एआई
- 12. शतरंज प्रोग्रामिंग (कोई एआई) - मान्यता
- 13. बनाना कस्टम कोड विश्लेषण नियम XAML
- 14. मेवेन के साथ पीएमडी - एक नियम के भीतर एक नियम को कैसे अक्षम करें?
- 15. ड्राइवरों को कैसे कोड करें?
- 16. सरल शतरंज कार्यक्रम (टीएससीपी) से फ़ैले इतनी तेज क्यों है? (शतरंज इंजन अनुकूलन)
- 17. मेक: नियम कॉल नियम
- 18. पंक्तियों को एक नियम के
- 19. शतरंज प्रोग्रामिंग में रिकर्सन का अच्छा उपयोग?
- 20. फ़ाइल एक्सेस नियम सेट करें
- 21. नियम
- 22. एचटीएसीएएस नियम डोमेन को index.html
- 23. कस्टम नियम
- 24. नियम
- 25. नियम
- 26. सीएसएस नियम/नियम क्रोम में शून्य हैं
- 27. किसी को भी अच्छा पता है .Net शतरंज इंजन
- 28. जावा स्रोत कोड को अंतर्राष्ट्रीयकृत कैसे करें?
- 29. कोड में हैंडलर को कैसे रद्द करें?
- 30. डुप्लिकेट कोड को कैसे खत्म करें?
[chessprogramming] (http://chessprogramming.wikispaces.com/Stalemate) wikispace – Bart