public class OitoRainhas {
public static void main(String[] args) {
boolean ataque;
int numLinhas = 4;
int numColunas = 4;
int i;
int j;
int iQ;
int jQ;
char[][] tabuleiro = new char[numLinhas][numColunas];
int numDeRainhas = 1;
int numMaxRainhas = 4;
for (i = 0; i < numLinhas; i++) {
for (j = 0; j < numColunas; j++) {
tabuleiro[i][j] = '0';
}
}
tabuleiro[0][0] = 'Q';
iQ = 0;
jQ = 0;
while (numDeRainhas <= numMaxRainhas) {
ataque = ataqueNW(tabuleiro, iQ, jQ, numLinhas, numColunas);
System.out.printf("Ataque NW: %b\n", ataque);
ataqueNE(tabuleiro, iQ, jQ, numLinhas, numColunas);
System.out.printf("Ataque NE: %b\n", ataque);
ataqueSW(tabuleiro, iQ, jQ, numLinhas, numColunas);
System.out.printf("Ataque SW: %b\n", ataque);
ataqueSE(tabuleiro, iQ, jQ, numLinhas, numColunas);
System.out.printf("Ataque SE: %b\n", ataque);
ataqueN(tabuleiro, iQ, jQ, numLinhas, numColunas);
System.out.printf("Ataque N: %b\n", ataque);
ataqueS(tabuleiro, iQ, jQ, numLinhas, numColunas);
System.out.printf("Ataque S: %b\n", ataque);
ataqueW(tabuleiro, iQ, jQ, numLinhas, numColunas);
System.out.printf("Ataque W: %b\n", ataque);
ataqueE(tabuleiro, iQ, jQ, numLinhas, numColunas);
System.out.printf("Ataque E: %b\n", ataque);
if (ataque == false) {
desenhaTabuleiro(tabuleiro, numLinhas, numColunas);
numDeRainhas++;
}
}
}
public static void desenhaTabuleiro(char[][] tabuleiro, int numLinhas, int numColunas) {
for (int i = 0; i < numLinhas; i++) {
for (int j = 0; j < numColunas; j++) {
System.out.printf("%c ", tabuleiro[i][j]);
}
System.out.println(" "); // muda de linha
}
}
public boolean ataqueNW(char[][] tabuleiro, int iQ, int jQ, int numLinhas, int numColunas) {
int i = iQ;
int j = jQ;
boolean ataque = false;
while (i != 0 && j != 0 && tabuleiro[i][j] != 'Q') {
ataque = false;
i--;
j--;
}
if (tabuleiro[i][j] == 'Q') {
ataque = true;
}
return ataque;
}
public boolean ataqueNE(char[][] tabuleiro, int iQ, int jQ, int numLinhas, int numColunas) {
int i = iQ;
int j = jQ;
boolean ataque = false;
while (i != 0 && j != 0 && tabuleiro[i][j] != 'Q') {
ataque = false;
i--;
j++;
}
if (tabuleiro[i][j] == 'Q') {
ataque = true;
}
return ataque;
}
public boolean ataqueSW(char[][] tabuleiro, int iQ, int jQ, int numLinhas, int numColunas) {
int i = iQ;
int j = jQ;
boolean ataque = false;
while (i != numLinhas && j != 0 && tabuleiro[i][j] != 'Q') {
ataque = false;
i++;
j--;
}
if (tabuleiro[i][j] == 'Q') {
ataque = true;
}
return ataque;
}
public boolean ataqueSE(char[][] tabuleiro, int iQ, int jQ, int numLinhas, int numColunas) {
int i = iQ;
int j = jQ;
boolean ataque = false;
while (i != numLinhas && j != 0 && tabuleiro[i][j] != 'Q') {
ataque = false;
i++;
j++;
}
if (tabuleiro[i][j] == 'Q') {
ataque = true;
}
return ataque;
}
public boolean ataqueN(char[][] tabuleiro, int iQ, int jQ, int numLinhas, int numColunas) {
int i = iQ;
int j = jQ;
boolean ataque = false;
while (i != 0 && tabuleiro[i][j] != 'Q') {
ataque = false;
i--;
}
if (tabuleiro[i][j] == 'Q') {
ataque = true;
}
return ataque;
}
public boolean ataqueS(char[][] tabuleiro, int iQ, int jQ, int numLinhas, int numColunas) {
int i = iQ;
int j = jQ;
boolean ataque = false;
while (i != numLinhas && tabuleiro[i][j] != 'Q') {
ataque = false;
i++;
}
if (tabuleiro[i][j] == 'Q') {
ataque = true;
}
return ataque;
}
public boolean ataqueW(char[][] tabuleiro, int iQ, int jQ, int numLinhas, int numColunas) {
int i = iQ;
int j = jQ;
boolean ataque = false;
while (j != 0 && tabuleiro[i][j] != 'Q') {
ataque = false;
j--;
}
if (tabuleiro[i][j] == 'Q') {
ataque = true;
}
return ataque;
}
public boolean ataqueE(char[][] tabuleiro, int iQ, int jQ, int numLinhas, int numColunas) {
int i = iQ;
int j = jQ;
boolean ataque = false;
while (j != numColunas && tabuleiro[i][j] != 'Q') {
ataque = false;
j++;
}
if (tabuleiro[i][j] == 'Q') {
ataque = true;
}
return ataque;
}
}