Хотя было много других вопросов о клонировании, я читал их ответы, и насколько мне известно, я, похоже, сделал большую часть того, что люди говорили.Java Cloning Checkers Game Board
В игре Java Checkers состояние платы представлено в виде 2D-массива, содержащего объекты класса Checker. Чтобы реализовать MiniMax AI, вам нужно создать дерево поиска, чтобы пройти по возможным состояниям игры & оценить их. По какой-то причине моя техника клонирования не сработала.
В настоящее время происходит то, что алгоритм MiniMax продолжает перемещать шашки вокруг основного игрового массива, поэтому, когда он решает о лучшем перемещении, Checker больше не перемещается, и возникает ошибка с нулевым указателем.
мне было интересно, если любой из вас могли бы взглянуть на мое клонирование и скажите мне, где я буду неправильно:
Game Board Конструктора:
public PlaySpace(Chequer[][] chequerBoard)
{
setState(chequerBoard);
}
Набор государственного метода:
public void setState(Chequer[][] state)
{
Chequer[][] newBoard = new Chequer[8][8];
for(int i = 0; i < state.length; i++){
newBoard[i] = state[i];
}
chequerBoard = newBoard;
}
Создание новой настольной игры & клонировать значение текущего состояния к нему:
PlaySpace child = new PlaySpace(board.returnState());
child.setState(board.returnState());
child.moveChequer(move.returnCurrentX(),move.returnCurrentY(),move.returnDestX(),move.returnDestY());
Благодарим вас за это заранее! Пожалуйста, дайте мне знать, если я могу дать больше информации.
Cheers, Louis
вы могли eleborate где you'd думает, что это будет «клон» что-то? – SomeJavaGuy
В вашем конструкторе вы переопределяете значение параметра; вы можете вообще не передавать параметр. В вашем методе 'setState' вы копируете ссылки в' state' в локальную переменную, которая затем отбрасывается. –
Также я думаю, что [прочитать это] (http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value) может потенциально сделать вас способным исправить ошибки самостоятельно. – SomeJavaGuy