[quote=killerkill]Oi pessoal, Então tentei organizar melhor meu código. Se tiverem mais alguma dica eu aceito.
[code]public class Navio {
Random random = new Random();//usada em criarNavioAleatoriamente
public void criarNavioManualmente(Mapa n, int direcao, int tamanho, int x, int y) {
this.inserindoNavio(n, direcao, tamanho, x, y);
}
public void criarNavioAleatoriamente(Mapa n){…}
public void criarNavioDois(Mapa n,int direcao, int x, int y){…}
public void criarNavioTres(Mapa n,int direcao, int x, int y){…}
public void criarNavioQuatro(Mapa n,int direcao, int x, int y){…}
public void criarNavioCinco(Mapa n, int direcao, int x, int y){…}
public void inserindoNavio(Mapa n, int direcao, int tamanho, int x,int y){
switch (direcao) {
case 1: //lembrando que 1 é horizontal
for (int a = 0; a < tamanho; a++) {
Mapa.mapa[x][y] = tamanho;
y++;
}
break;
case 2:
for (int a = 0; a < tamanho; a++) {
Mapa.mapa[x][y] = tamanho;
x++;
}
break;
}
}
}
[/code]
[code]public class Menu {
int i, j;
boolean vf = false;
boolean vf3 = false;
int numeroDeLinhas;
Menssagens msg = new Menssagens();
Mapa map = new Mapa();
Navio criarNavios = new Navio();
public void Opcoes() {
int escolha;
escolha = msg.menuPrincipal(); //funcao apresenta menu principal
switch (escolha) {
case 1:
int size = msg.mapaSize();// funcao retorna tamanho do mapa
map.criarMapa(size);
break;
case 2:
JOptionPane.showMessageDialog(null, map.apresentarMapa());
break;
case 3:
do {
int menu3_1 = msg.menuCriacaoNavios();
switch (menu3_1) {// aqui é um sub menu do menu principal, aonde eu crio os navios da maneira como desejada
case 1:
int x = msg.recebeLinha();
int y = msg.recebeColuna();
int tamanho = msg.tamanhoDoNavio(); // recebe tamanho do navio
int direcao1 = msg.recebeDirecao(); //recebe 1 para horizontal ou 2 para vertical
criarNavios.criarNavioManualmente(map, direcao1, tamanho, x, y);
break;
case 2:
criarNavios.criarNavioAleatoriamente(map);
break;
case 3:
int x2 = msg.recebeLinha();
int y2 = msg.recebeColuna();
int direcao2 = msg.recebeDirecao();
criarNavios.criarNavioDois(map, direcao2, x2, y2);
break;
case 4:
int x3 = msg.recebeLinha();
int y3 = msg.recebeColuna();
int direcao3 = msg.recebeDirecao();
criarNavios.criarNavioTres(map, direcao3, x3, y3);
break;
case 5:
int x4 = msg.recebeLinha();
int y4 = msg.recebeColuna();
int direcao4 = msg.recebeDirecao();
criarNavios.criarNavioDois(map, direcao4, x4, y4);
break;
case 6:
int x5 = msg.recebeLinha();
int y5 = msg.recebeColuna();
int direcao5 = msg.recebeDirecao();
criarNavios.criarNavioDois(map, direcao5, x5, y5);
case 0:
this.vf3 = true;
break;
}
} while (vf3 = false);
break;
case 0:
this.vf = true;
break;
}
}
}
[/code]
public class Menssagens { // aqui sao as mensagens pra receber os valores...
public int menuPrincipal() {...}
public int mapaSize(){...}
public int menuCriacaoNavios(){...}
public int recebeLinha(){...}
public int recebeColuna(){...}
public int tamanhoDoNavio(){...}
public int recebeDirecao(){...}
[code]public class Mapa {
static public int i;//numero de linhas
static public int j;//numero de colunas
static int[][] mapa;
public void criarMapa(int x){
Mapa.i=x;
Mapa.j=x;
Mapa.mapa=new int[x][x];
}
public String apresentarMapa() {
String map = "";
for (int x = 0; x < Mapa.i; x++) {
for (int y = 0; y < Mapa.j; y++) {
map = map + Mapa.mapa[x][y]+" ";
if (y == Mapa.j-1) {
map = map + "\n";
}
}
}
return map;
}[/code]
Obrigado pela ajuda de vocês[/quote]
Oi amigo, na minha opinião ficou 99% mas acho que a culpa foi minha pois falei
para colocar tudo referente a Menu na classe Menu e não expliquei o restante que faltava, por isso aqui vai a dica.
Os switchs dentro da classe Menu ficaram um pouco estranhos no bom sentido de OO.
Para ficar 100% o que eu identifiquei que poderia melhorar seria o seguinte:
1- Como sua classe Menu controla o desenrolar do jogo, então dentro dela você poderia instanciar
os objetos para o jogo “correr”.
Para começar a fazer isso, pegue os dois switchs e faça a abstração de objeto, ou seja
para começar pode fazer um método responsável por pegar a entrada do usuário e ver se ela deve
chamar o Menu parte 1, ou o Menu parte 2 que é o submenu.
A partir daí…
2 - Faça um método para controlar as opções da primeira parte do menu
3 - Faça um método para controlar as opções da segunda parte do menu ou seja o submenu
Agindo dessa forma vai começar a entender um pouco de OO mas no sentido figurado, pois ainda falta algo.
4- Finalmente poderá ver que pode pegar esses 2 métodos e abstrair eles para outra classe ou seja
dentro dessa outra classe você terá dois métodos com funções distintas mas dentro de um mesmo contexto.
Para ficar mais claro, você pode experimentar mudar o nome da classe Menu para Start(ou IniciaJogo)
Depois criar uma outra classe escrito Menus e dentro dela colocar esses dois métodos.
Assim vai entender o que eu queria dizer
e creio que fique mais legal também para aplicar OO e futuramente para você começar a mexer com os padrões de projeto.
Faz um backup antes ok?
Se tiver dúvidas posta aí.
Se alguém quiser acrescentar algo na minha dica fica à vontade
desde que não avacalhe o post, pois analisei o caso mais superficialmente
e falei o que identifiquei.
Abraço.