Проблема с упражнением шахмат в java

Цель программы состоит в том, чтобы печатать индикаторное табло шахмат, с будками B (белые) и N (черные), просить линию и колонну и устанавливать слона там.

До сих пор все добро, но проблема приходит, когда нужно изменять индикаторное табло со звездочками в будках, где было возможно двигать слона (в диагонали):

        B * B N B * B N
        N B * B * B N B
        B N B A B N B N
        N B * B * B N B
        B * B N B * B N
        * B N B N B * B
        B N B N B N B *
        N B N B N B N B

Преподаватель отпустил эту проблему, тогда я прибегаю к этому форуму. Как вы бы это выдвинули? Код:

int posicion=8*(fila-1)+columna;

  for(int i=1;i<=64;i++) {

        if(i%2!=0){
           if(i==posicion){
              System.out.print("A ");
              continue;
           }
           System.out.print("B ");
        }else{
           if(i==posicion){
              System.out.print("A ");
              continue;
           }
           System.out.print("N ");
        }

     if(i%8==0){
        System.out.println();
     }

  }

Я не дал массивы все еще. Спасибо

[EDIT] Только стоят действительные движения, в соответствии с реальным движением слона.

2
задан 08.11.2016, 21:02
3 ответа

Если ты хочешь, чтобы твой слон разместил себе в ней posiciГіn [x1 ; y1], тогда ты должен завершать со звездочками все положения [x2 ; y2], которые истекали бы с нею condiciГіn, которого:

  1. X1 != X2 y Y1 != Y2
  2. | X1 - X2 | = | Y1 - Y2 |

Я Думаю, что следующий cГіdigo может помогать тебе:

public static int mod(int x) { return (x < 0)?-x:x; } 

int x, y; //Posicion del alfil

for(int i=1;i<=8;i++) {
    for(int j=1;j<=8;j++)
        if(i == x && j == y)
            System.out.print("A ");
        else if(mod(i - x) == mod(j - y))
            System.out.print("* ");
        else if((i + j) % 2 == 0)
            System.out.println("B ");
        else
            System.out.println("N ");
    System.out.println();
}
2
ответ дан 24.11.2019, 12:41
class Ok {
    public static void main(String[] args) {
        dbjt(2, 3);
    }

    public static void dbjt(int f, int c) {
        int a = f - c;
        int b = f + c;
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                System.out.print(" ");
                if (i == f && j == c) {
                    System.out.print("A");
                } else if (i - j == a || i + j == b) {
                    System.out.print("*");
                } else {
                    System.out.print((i + j) % 2 == 0 ? "B" : "N");
                }
            }
            System.out.println();
        }
    }
}

/*

Он напомнил мне проблему 8 королев, и как слон двигается частично как королева, формула, которую ты занимаешь, - сходная с необходимой, чтобы представлять первую проблему. Ты можешь видеть секцию "Планирование Проблемы" в ссылке в wiki, который оставил тебя; главным образом положение находится в диагонали с другой, если результат линии меньше колонна или линия больше колонна - та же самая в обоих. Привет с Мексики. ссылка

*/

1
ответ дан 24.11.2019, 12:41
  • 1
    Пожалуйста объясни c и # 243; я говорю, что ты написал. Ты можешь делать это добавляя informaci и # 243; n в ответе или в форме комментариев в самом c и # 243; я говорю. –   08.11.2016, 22:08
  • 2
    Индикаторное табло, которое ты представляешь, не правильно: черные квадраты и белые est и # 225; n вставленные, ты производил линии, не меняясь между ними, следовательно колонны - или половинные ноты или негритянки. Из-за dem и # 225; s я верю в то, что est и # 225; хорошо, спасибо. –  MigherdCas 08.11.2016, 22:11

ВЎHola!

я Смог делать это, cГіdigo он простой. Я объясняю ее тебе lГіgica:

, Когда posicionamos слон (ej. 2,2), мы можем помечать главную точку диагонали складывая в счастье posiciГіn "один", это мы quedarГ - в как 3,3.

B N B N
B A B N
B N * N
B N B N

AsГ - которые, если мы делаем FOR (pos1 + i pos2 + i), диагональ сформируют automГЎticamente, имея в виду, что сумма ее posiciГіn 1 и 2 не может быть превосходящей длину массива (костлявая, если массив - 4 x 4, pos1 + i < 4 && pos2 + i < 4).

Это у нас осталось бы таким, что asГ - сейчас:

B N B N
B A B N
B N * N
B N B *

Однажды уже мы обратили внимание на это только договорись о том, чтобы "сыграть": Если мы делаем обратную, из которого мы сделали (pos1 - i >= 0 && pos2 - i >= 0) мы quedarГ - в asГ-:

* N B N
B A B N
B N B N
B N B N

, Если мы делаем спичку... (pos1 - i >= 0 && pos2 + i < 8 и pos1 + i< 8 && pos2 - i >= 0), мы darГ - в другие две диагонали.

AsГ - что, если внутри for мы помещаем 4 IF с объясненными условиями... ВЎEl упражнение estГЎ решенный!

оставил Вам я cГіdigo, println и комментарии estГЎn написанные в catalГЎn, не вы rallГ©is: ')

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int op = 0, op1 = 0, k = 0, p =  0;
    String[][] a = new String[8][8];
    // BLANC NEGRE
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) {
            if (i % 2 == 0 && j % 2 == 0) {
                a[i][j] = "B";
            } else if (i % 2 != 0 && j % 2 == 0) {
                a[i][j] = "B";
            } else {
                a[i][j] = "N";
            }

        }
    }

    // MOSTRAR
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) {
            System.out.printf(a[i][j] + "       ");
        }
        System.out.println("");
    }

    // PREGUNTAR
    System.out.printf("En quina fila vols posar l'alfil: ");
    op = sc.nextInt();
    System.out.printf("En quina columna vols posar l'alfil: ");
    op1 = sc.nextInt();

    op = op - 1;
    op1 = op1 - 1;

    //SUBSTITUIR
    a[op][op1] = "A";

    //MOSTRAR
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) {
            System.out.printf(a[i][j] + "       ");
        }
        System.out.println("");
    }
    System.out.println("");
    System.out.println("");
    System.out.println("");

    //DIAGONALS
    for (int i = 1; i < 9; i++) {

        if (op+i < 8 && op1+i <8) {
            a[op+i][op1+i] = "*";
        }

        if (op-i >= 0 && op1-i >= 0) {
            a[op-i][op1-i]="*";
        }

        if (op+i < 8 && op1-i >= 0) {
            a[op+i][op1-i] = "*";
        }

        if (op-i >= 0 && op1+i <8) {
            a[op-i][op1+i] = "*";
        }

    }

    //MOSTRAR
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) {
            System.out.printf(a[i][j] + "       ");
        }
        System.out.println("");
    }
}
1
ответ дан 24.11.2019, 12:41

Теги

Похожие вопросы