Хороший проект.
Я написал небольшой пример на главном, чтобы вы могли его опробовать. Конечно, есть место для улучшения.
Мой вывод:
3 XY 4
HAS RECT MOVES !
_______ PIECES
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2
_______ RES
0 0 0 0 0 0 0 5
6 0 0 0 0 0 6 0
0 7 0 0 0 7 0 0
0 0 8 0 8 0 0 0
0 0 0 9 0 0 0 0
0 0 8 0 8 0 0 0
0 7 0 0 0 7 0 0
6 0 0 0 0 0 6 0
My piece : 3 4
_______ legalmoves
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 7 0 0 0 7 0 0
0 0 8 0 8 0 0 0
0 0 0 9 0 0 0 0
0 0 8 0 8 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Позиция слона помечена 9. Я добавляю каждому полю рейтинг, начиная с 8, начиная с обратного отсчета, регулируя, насколько далеко Поле далеко от епископа. (Я надеюсь, что это Engli sh?)
Затем вы должны разделить прямоугольник на 4 подпрограммы. Для каждого сабвуфера вам нужно рассчитывать легальные ходы отдельно.
Пожалуйста, попробуйте. Если у вас есть вопрос, пожалуйста, дайте мне знать.
public static void main(String[] args) throws Exception{
int pieces[][] = new int[8][8];
int res[][] = new int[8][8];
int x = 3;
int y = 4;
System.out.println(x + " XY " + y);
System.out.println("HAS RECT MOVES !");
System.out.println("_______ PIECES");
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if(i<2){ pieces[i][j] = 1; }
if(i>5){ pieces[i][j] = 2; }
System.out.print(pieces[i][j] + " ");
}
System.out.println("");
}
System.out.println("_______ RES");
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
res[i][j] = checkField(i, j, x, y);
System.out.print(res[i][j] + " ");
}
System.out.println("");
}
System.out.println("My piece : " + (x) + " " + (y));
System.out.println("_______ legalmoves");
// 1. section:
System.out.println("1. section:");
calcSection(pieces, res, 0, 0, x, y);
// 2. section:
System.out.println("2. section:");
calcSection(pieces, res, 0, y, x, 7);
// 3. section:
System.out.println("3. section:");
calcSection(pieces, res, x, 0, 7, y);
// 4. section:
System.out.println("4. section:");
calcSection(pieces, res, x, y, 7, 7);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
System.out.print(res[i][j] + " ");
}
System.out.println("");
}
}
public static int[][] calcSection(int[][] pieces, int[][] res, int recStartX, int recStartY, int recEndX, int recEndY){
System.out.println(recStartX+ ":"+ recStartY + ":"+ recEndX +":" +recEndY);
System.out.println("res[i][j] = " + res[5][7]);
for (int k = 8; k > 0; k--) {
for (int i = recStartX; i <= recEndX; i++) {
for (int j = recStartY; j <= recEndY; j++) {
if(res[j][i] == k){
if(pieces[j][i] > 0){
for (int l = recStartX; l <= recEndX; l++) {
for (int m = recStartY; m <= recEndY; m++) {
if(res[m][l] <= k){
res[m][l] = 0;
}
}
}
return res;
}
}
}
}
}
return res;
}
public static int checkField(int fieldX, int fieldY, int x, int y){
//x = 3;
//y = 2;
if((fieldY == x )&(fieldX == y )){
return 9;
}
else{
for (int i = 0; i < 8; i++) {
if((fieldY == x+i )&(fieldX == y+i )){
return 9-i;
}
else if((fieldY == x+i )&(fieldX == y-i )){
return 9-i;
}
else if((fieldY == x-i )&(fieldX == y+i )){
return 9-i;
}
else if((fieldY == x-i )&(fieldX == y-i )){
return 9-i;
}
}
}
return 0;
}
}