В целях изучения программирования я делаю на java игру 2048. В игре есть класс, в котором есть много повторяющихся фрагментов - циклы перебора поля. Вопрос заключается в том, можно ли создать такой метод, который будет принимать значения границ перебора и исполняемый код?
Что-то типо такого:
public void fun(int borderX, int borderY, ??? code){
for (int x = 0; x < borderX; x++)
for (int y = 0; y < borderY; y++)
do code
}
Если же нет, можете порекомендовать как сделать код лучше? Спасибо за ваше внимание.
Собственно, код
public class Field {
private int[][] field; // игровое поле
private int width, heigth; // размеры поля
public Field(int sizeX, int sizeY) { // инициализатор
this.width = sizeX;
this.heigth = sizeY;
this.field = new int[sizeX][sizeY];
}
public int getCell(int x, int y) { // показать значение ячейки
return this.field[x][y];
}
public void setCell(int val, int x, int y) { // присвоить ячейке значение
this.field[x][y] = val;
}
public void reset() { // сбросить поле (новая игра, рестарт)
for (int x = 0; x < width; x++)
for (int y = 0; y < heigth; y++)
this.field[x][y] = 0;
}
public void copyOf(Field f) { // копировать значения клеток поля (для функции отмена хода)
for (int x = 0; x < width; x++)
for (int y = 0; y < heigth; y++)
this.field[x][y] = f.getCell(x, y);
}
public boolean isEqualTo(Field f) { // для проверки: привело ли нажатие на клавишу к смещению плиток?
for (int x = 0; x < width; x++)
for (int y = 0; y < heigth; y++)
if (field[x][y] != f.getCell(x, y))
return false;
return true;
}
private boolean canMergeY() { // можно ли сдвинуть плитки по вертикали?
for (int x = 0; x < width; x++)
for (int y = 0; y < heigth - 1; y++)
if (field[x][y] == field[x][y + 1])
return true;
return false;
}
private boolean canMergeX() { // можно ли сдвинуть плитки по горизонтали?
for (int x = 0; x < width - 1; x++)
for (int y = 0; y < heigth; y++)
if (field[x][y] == field[x + 1][y])
return true;
return false;
}
public boolean canMerge() { // проверка на возможность продолжения игры
return canMergeX() && canMergeY();
}
public boolean contains(int i) { // для поиска плиток 0 и 2048 для разных задач
for (int x = 0; x < width; x++)
for (int y = 0; y < heigth; y++)
if (field[x][y] == i)
return true;
return false;
}
}