Я создаю игру реверси для моего вступительного класса CS.
Я обнаружил ошибку в SearchN (), из-за которой он выдавал ложные флаги playableN, и создал isSame () как обходной путь.
Теперь игра вылетает, когда я пытаюсь сделать ход.
У меня ошибка изолирована от isPlayable (), из-за которой программа перестает работать без сообщения об ошибке.
Я думал, что это потому, что программа искала за пределами; однако, когда я запускаю .isPlayable (0,0), он возвращает исключение NullPointerException (также то, от чего я не совсем знаю, как избавиться).
Так что это должно быть какая-то ошибка с обработкой неиграемых пробелов.
У кого-нибудь есть мысли?
/**
* a method to return the color of a tile
*@params x y tile coordinates
*/
public Color getColor(int x, int y){
try{
return buttons[x][y].getBackground();
}
catch(ArrayIndexOutOfBoundsException e){
return null;
}
}
/**
* a method to determine whether a tile has been played
*@params x y tile coordinates
*/
public boolean isPlayed(int x, int y){
if(this.isBlack(x,y) || this.isWhite(x,y)){
return true;
}else{
return false;
}
}
/**
* a method to determine whether a tile has a color opposite to a given color
*@params x y c tile coordinates and color to compare
*/
public boolean isOpposite(int x, int y, Color c){
if(this.isPlayed(x,y)){
return(!(this.getColor(x,y).equals(c)));
} else
return false; // this was giving the false playableN flag
}
/**
* a method to determine weather a tile has the same color as the one given
*@params x y c tile coordinates and color to compare
*/
public boolean isSame(int x, int y, Color c){
if(this.isPlayed(x,y)){
return(this.getColor(x,y).equals(c));
}else{
return false;
}
}
/**
* a method used to check tiles north of an attempted play to verify legal moves
*@params x y c tile coordinates and comparing color
*/
public void searchN(int x, int y, int increment, Color c){
if(increment>1 && (this.isSame(x-increment,y, c))){
playableN = true;
leadN = false;
} else {
if(this.isOpposite(x-increment,y,c)){
leadN=true;
}
}
}
/**
* a method used to determine if a tile is playable
*@params x y tile coordinates
*/
public boolean isPlayable(int x, int y){
this.searchN(x,y,1,turnColor);
// search 7 other directions
while(leadN||leadNE||leadE||leadSE||leadS||leadSW||leadW||leadNW){
int i = 2;
if(leadN)
this.searchN(x,y,i,turnColor);
// search 7 other directions
i++;
}
if(playableN||playableNE||playableE||playableSE||playableS||playableSW||playableW||playableNW)
return true;
else
return false;
}
** все плитки имеют черный, белый или цвет плитки по умолчанию (зеленый) и в двумерном массиве кнопок J, отображаемых в gridLayout ().