Я пытаюсь создать настольную игру, где все части могут перемещаться так же, как ладья в шахматы. (то есть по горизонтали или по вертикали как можно больше пробелов)Программирование Chess Rook Movement
Моя доска представляет собой простой массив из 2-х целых чисел со значениями 0,1,2 в зависимости от того, пустое ли пространство, красная часть или черная часть.
Мой код для движения до сих пор показано ниже, это создает истинное или ложное значение, если движение разрешено или нет:
int[][] board;
public boolean validMove(int fromRow, int fromCol, int toRow, int toCol) {
if(pieceAt(toRow, toCol) != EMPTY) {
return false;
}
else if(fromRow - toRow == 0 && fromCol - toCol != 0) {
return true;
}
else if(fromCol - toCol == 0 && fromRow - toRow != 0) {
for(int i = fromRow; i < toRow; i++) { // Trying to add piece collision code
if(pieceAt(toCol, i) != EMPTY) return false; // Trying to add piece collision code
}
return true;
}
else return false;
}
Моя проблема пытается создать обнаружение столкновений, если другой кусок в способе, которым он не сможет пройти мимо него, однако с моим кодом в настоящее время он может. Может ли кто-нибудь помочь мне сделать это?
В условиях вашего 'for' Loops': Я думаю, вы должны заменить' х = (токол-ах) 'с' х = toCol'!. То же самое относится ко второму циклу. '! =' уже отменяет проверку для ячейки назначения. Выполнение таких вещей, как 'x! = (ToCol-dx)', является ошибкой: он будет пропускать одну ячейку из проверки. –
Непонятно, можете ли вы взять любую деталь. Кроме того, вопрос заключался в том, как определить, есть ли части между ними, поэтому я пропустил ячейку назначения. –
Выполнение 'x! = (ToCol-dx)' вы пропускаете не только ячейку назначения, но и ячейку рядом с ней. Чтобы пропустить ячейку назначения, вы должны сделать 'x! = ToCol'. Например, этот код: 'for (i = 1; i! = 5 - 1; i ++)' будет проверять только 1-й, 2-й и 3-й элементы. Кроме того, вы не пропустили ячейку назначения, она проверяется этой строкой в вашем коде: 'if (pieceAt (toRow, toCol)! = EMPTY) возвращает false;' –