Boa tarde Senhores,
Estou desenvolvendo um jogo de campo minado 100% texto (System.out.printf)
Estou usando uma martriz de tamanho variavel.
Consegui desenvolver o jogo quase completamente, mas estou com dificuldades em fazer a expansão do campos quando for vazio, sem bombas em volta até que feche uma linha, como na imagem do campo minado abaixo do windows…

no meu caso, o retorno -1 é bomba, > 0 é a quantidade de bombas em volta daquele vazio -2 é coordenada inválida ou campo já jogado.
matriz é a matriz do jogo.
matrizadj é a matriz que armazena a fila, sendo matrizadj[0][x] = linha e matrizadj[1][x] = coluna
o meu código de validação é este:
private int bombasValida(int x, int y){ //retorna: -2 caso x,y seja coord inválida / -1 caso x,y seja bomba / qtde de bombas ao redor de x,y caso seja válido e não bomba
if (coordValida(x,y) == false)
return -2;
if (matriz[x][y] >= 0)
return -2;
else if(matriz[x][y] == -1){
bomba = 1;
return -1;
}
else{
int cont = 0, cancela = 0;
for (int a = -1; a < 2; a++){
for (int b = -1; b < 2; b++){
if (x == 0){
if (y == 0){
if((a != -1) && (b != -1)){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
else if (y == cols-1){
if((a != -1) && (b != 1)){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
else{
if(a != -1){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
}
else if(x == lins - 1){
if (y == 0){
if((a != 1) && (b != -1)){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
else if (y == cols-1){
if((a != 1) && (b != 1)){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
else{
if(a != 1){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
}
else if(y == 0){
if (x == 0){
if((a != -1) && (b != -1)){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
else if (x == lins-1){
if((a != 1) && (b != -1)){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
else{
if(b != -1){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
}
else if(y == cols - 1){
if (x == 0){
if((a != -1) && (b != 1)){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
else if (x == lins-1){
if((a != 1) && (b != 1)){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
else{
if(b != 1){
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
}
else{
if (matriz[x+a][y+b] == -1){
cont++;
}
else{
for (int f = 0; f <= fim; f++){
if ((matrizadj[0][f] == x+a) && (matrizadj[1][f] == y+b)){
cancela = 1;
}
}
if (cancela == 0){
fim++;
matrizadj[0][fim] = x+a;
matrizadj[1][fim] = y+b;
}
}
}
}
}
matriz[x][y] = cont;
return cont;
}
}
e a chamada dentro do programa esta assim:
ret recebe o retorno da função acima:
if (ret == 0){
for (int f = 0; f <= fim; f++){
bombasValida(matrizadj[0][f],matrizadj[1][f]);
}
}
ini = 0;
fim = 0;
:lol: :roll: