Есть ли более простой способ добавить черные / белые квадраты для моей игры в шашки на Java, чем то, что я уже использую? - PullRequest
0 голосов
/ 21 марта 2019

В основном название. Я создаю игру в шашки, и там должно быть два набора пустых квадратов - черный и белый. На данный момент я просто вписываю местоположение каждого квадрата вручную (каждый квадрат должен быть черным, а не белым), но это довольно долго, когда это доска 8х8 ... Есть ли более простой способ? Я попробовал какую-то математическую формулу, но это раздражает, потому что черный квадрат идет через каждый второй квадрат, вплоть до четвертого, когда он не пропускается, например, черный квадрат будет каждый 0-й - 2-й - 4-й, 6-й, а затем 9-й квадрат, а затем 9 - 11 - 13 - 15 - 16 и т. д. (просто посмотрите на доску шашек, если я не объяснил это должным образом). Я мог бы просто добавить возможные местоположения в массив, чтобы упростить его, но это все еще не кажется хорошей идеей.

Я делаю это на Java, сейчас это выглядит примерно так:

  for(int i = 0; i < 64; i++) {
        if (i == 0 || i == 2 || i == 4 || i == 6 || i == 9 || i == 11 || i == 13 || i == 15 || i == 16 || i == 18 || i == 20 || i == 22) {
            s = new Square("EMPTY-TWO", i);
        }
        else {
            s = new Square("EMPTY-ONE", i);
        }

Что явно не идеально

Ответы [ 2 ]

1 голос
/ 21 марта 2019

В одном цикле, но с предоставлением информации о строках и столбцах, которая может потребоваться для отображения квадратов:

for (int i = 0; i < 64; i++) 
{
    int row = i / 8;
    int col = i % 8;
    boolean isBlack = ((row + col) % 2 == 0);
    System.out.println("row = " + row + ", col = " + col + ": " + (isBlack ? "black" : "white"));
}

С более видимым выводом:

for (int i = 0; i < 64; i++)
{
    int row = i / 8;
    int col = i % 8;
    boolean isBlack = ((row + col) % 2 == 0);
    if(col==0)
    {
        System.out.println("\n+-------+-------+-------+-------+-------+-------+-------+-------+");
        System.out.print("| ");
    }
    System.out.print((isBlack?"black":"white")+" | ");      
}
System.out.println("\n+-------+-------+-------+-------+-------+-------+-------+-------+");

Это приводит к:

+-------+-------+-------+-------+-------+-------+-------+-------+
| black | white | black | white | black | white | black | white | 
+-------+-------+-------+-------+-------+-------+-------+-------+
| white | black | white | black | white | black | white | black | 
+-------+-------+-------+-------+-------+-------+-------+-------+
| black | white | black | white | black | white | black | white | 
+-------+-------+-------+-------+-------+-------+-------+-------+
| white | black | white | black | white | black | white | black | 
+-------+-------+-------+-------+-------+-------+-------+-------+
| black | white | black | white | black | white | black | white | 
+-------+-------+-------+-------+-------+-------+-------+-------+
| white | black | white | black | white | black | white | black | 
+-------+-------+-------+-------+-------+-------+-------+-------+
| black | white | black | white | black | white | black | white | 
+-------+-------+-------+-------+-------+-------+-------+-------+
| white | black | white | black | white | black | white | black | 
+-------+-------+-------+-------+-------+-------+-------+-------+
0 голосов
/ 21 марта 2019

Попробуйте использовать вложенные циклы:

for(int i = 0; i < 8; i++) {
        for(int j = 0; j < 8; j++) {
            if ((i % 2 == 0 && j % 2 == 0) || (i % 2 != 0 && j % 2 != 0)) {
                // your code here the value you had for i will now be (i * 8 + j)
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...