void doMakeMove(CheckersMove move) {
// This is called when the current player has chosen the specified
// move. Make the move, and then either end or continue the game
// appropriately.
board.makeMove(move);
/* If the move was a jump, it's possible that the player has another
jump. Check for legal jumps starting from the square that the player
just moved to. If there are any, the player must jump. The same
player continues moving.
*/
if (move.isJump()) {
legalMoves = board.getLegalJumpsFrom(currentPlayer,move.toRow,move.toCol);
if (legalMoves != null) {
if (currentPlayer == CheckersData.RED)
message.setText("RED: You must continue jumping.");
else
message.setText("BLACK: You must continue jumping.");
selectedRow = move.toRow; // Since only one piece can be moved, select it.
selectedCol = move.toCol;
repaint();
return;
}
}
/* The current player's turn is ended, so change to the other player.
Get that player's legal moves. If the player has no legal moves,
then the game ends. */
if (currentPlayer == CheckersData.RED) {
currentPlayer = CheckersData.BLACK;
legalMoves = board.getLegalMoves(currentPlayer);
if (legalMoves == null)
gameOver("BLACK has no moves. RED wins.");
//==ALL CHANGES WERE MADE HERE====================
else/* if (legalMoves[0].isJump())
message.setText("BLACK: Make your move. You must jump.");
else*/
{
//message.setText("BLACK: Make your move.");
doMakeMove(legalMoves[0]);
}
//==============================================
}
else {
currentPlayer = CheckersData.RED;
legalMoves = board.getLegalMoves(currentPlayer);
if (legalMoves == null)
gameOver("RED has no moves. BLACK wins.");
else if (legalMoves[0].isJump())
message.setText("RED: Make your move. You must jump.");
else
message.setText("RED: Make your move.");
}
/* Set selectedRow = -1 to record that the player has not yet selected
a piece to move. */
selectedRow = -1;
/* As a courtesy to the user, if all legal moves use the same piece, then
select that piece automatically so the use won't have to click on it
to select it. */
if (legalMoves != null) {
boolean sameStartSquare = true;
for (int i = 1; i < legalMoves.length; i++)
if (legalMoves.fromRow != legalMoves[0].fromRow
|| legalMoves.fromCol != legalMoves[0].fromCol) {
sameStartSquare = false;
break;
}
if (sameStartSquare) {
selectedRow = legalMoves[0].fromRow;
selectedCol = legalMoves[0].fromCol;
}
}
/* Make sure the board is redrawn in its new state. */
repaint();
} // end doMakeMove();
Реализация алгоритма alpha-beta для шашек на Ява.
http://math.hws.edu/javanotes/c8/s5.htm, код аплета приведен здесь:
http://math.hws.edu/javanotes/source/Checkers.java. Сейчас возможно играть друг с другом, мне нужно реализовать возможность игры с компьютером. Компьютер, по идее, должен получить искусстенный интеллект, выбор вариантов хода происходит по алгоритму альфа-бэта:
http://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html. Может ли кто-нибудь оказать помощь в написании кода выбора хода для компьютера? А так же недрение возможности игры компьютера в этот аплет? Заранее спасибо.
Может быть кто-нибудь мог бы помочь хотя бы в том, чтобы сделать на основе этого кода возможность игры с компьютером? Убрать лишнее и добавить буквально один, абослютно любой ход компьютера в ответ на первый ход человека, при условии, что начинают красные?:rolleyes:
здесь компьютер отвечает на ход игрока первым попавшимся под руку допустимым ходом. снала даже прикольно смотриться, но потом оно ведёт себя жутко тупо :)
А если думать над интеллектом для этого зверя, то как бы вы стали делать? Скажем, какой бы оценивали ходы? Тоесть чтобы выбрать какой лучше?
Нам предложили оценивать как -1, 0, 1 но, я не представляю как 3-мя цифрами можно уловить столько ньюансов.
message.setText("BLACK: You must continue jumping.");
и замените на
doMakeMove(legalMoves[0]);
это в той же функции, только немного выше. тогда он не будет останавливаться после первой же срубленой шашки
а по поводу оценки ходов, то альфа-бетта алгоритм, как я понял из Вашей же ссылки, как раз для этого и предназначен
Я, наверно, неправильно выразился. Я имею ввиду не то, каким алгоритмом будет проходить выбор (из уже имеющихся) лучшего хода, а то каким образом, скажем, в самом начале игры, заполнится массив ходов? Тоесть на каком основании должно приниматься решение, стоит ли та или иная шашка в лучшем положении, чем другая.
:) поставлю вопрос по-другому. кто может написать (дописать) аплет, чтобы компьютер мог играть (основываясь на алгоритме альфа-бета отсечений)...скажем не супер-мега-круто, но процентов эдак на 50%...хотя бы не делал невероятно глупых ходов. В распоряжение дам исходный код (который уже давал), а так же могу дать пару исходных кодов для шашек (тоже с альфой-бетой, но немного старых весий). Тоесть нужно слепить из двух кодов один. Разумеется не бесплатно. Просьба заинтересовавшихся отметиться здесь и оставить свои контактные данные:) :(