Jump to content

batalha naval - colocar barcos aleatoriamente


zezepee
 Share

Recommended Posts

Neste programa a ideia é introduzir de uma maneira aleatória barcos, para o jogo da batalha naval, 1 de 4, 2 de 3, 3 de 2 canos e 1 de 1 cano.

No momento ainda só tenho o de 4 mas este não aparece numa posição aleatória mas sim sempre na mesma.

Nota: o porta-aviões (5) já é dado inicialmente o que quer dizer que os outros barcos terão que aparecer em posições diferentes à do porta-aviões, o que ainda não acontece...

Por enquanto o que me aperece é isto,

por exemplo:

~ ~ ~ ~ ~ ~ ~ ~ ~ ~

5 4 5 ~ ~ ~ ~ ~ ~ ~

~ 4 ~ ~ ~ ~ ~ ~ ~ ~

~ 4 ~ ~ ~ ~ ~ ~ ~ ~

~ 4 ~ ~ ~ ~ ~ ~ ~ ~

~ ~ ~ ~ ~ ~ ~ ~ ~ ~

~ ~ ~ ~ ~ ~ ~ ~ ~ ~

~ ~ ~ ~ ~ ~ ~ ~ ~ ~

~ ~ ~ ~ ~ ~ ~ ~ ~ ~

~ ~ ~ ~ ~ ~ ~ ~ ~ ~

~ ~ ~ ~ ~ ~ ~ ~ ~ ~

~ 4 ~ ~ ~ ~ ~ ~ ~ ~

~ 4 ~ ~ ~ ~ ~ ~ ~ ~

~ 4 ~ ~ ~ ~ ~ ~ ~ ~

~ 4 ~ ~ ~ ~ ~ ~ ~ ~

~ ~ ~ ~ ~ ~ ~ ~ ~ ~

~ ~ ~ ~ ~ ~ ~ ~ ~ ~

~ ~ ~ ~ ~ ~ ~ ~ 5 ~

~ ~ ~ ~ ~ ~ 5 5 5 ~

~ ~ ~ ~ ~ ~ ~ ~ 5 ~

ps: este é a class principal,

public class Board 
{ 
private final char[][] board; 
public Board(final char[][] board) 
{ 
this.board = board; 
} 

public int linha = 1; 
public int coluna = 1; 

Coordinate randomCoordinate = new Coordinate(linha, coluna); 

public int cont = 0;
public char b4 = '4'; //b4 = barco de 4 canos
public char b3 = '3'; //b3 = barco de 3 canos
public char b2 = '2'; //b2 = barco de 2 canos
public char b1 = '1'; //b1 = barco de 1 canos


public void completarBarco4Canos() 
{ 
for(int x = 0; x < board.length - 1; x++) 
{ 
for(int y = 0; y < board[x].length - 1; y++) 
{ 
if(board[x][y] == b4 && cont < 3) 
{ 
board[x + 1][y] = b4; 
cont++; 
} 
} 
} 
} 

public void randomlyDeployBoats(final int[] numberOfBoatsPerSize) 
{ 
randomCoordinate = CoordinateRandomizer.randomCoordinate(li… coluna); 
board[linha][coluna] = b4;

completarBarco4Canos();
} 
}

este e que é o codigo da class que gera numeros aleatorios:


import java.util.Random; 

public class CoordinateRandomizer { 

private static Random randomizer = new Random(); 

public static Coordinate randomCoordinate(final int numberOfLines, 
final int numberOfColumns) { 
int line = randomizer.nextInt(numberOfLines); 
int column = randomizer.nextInt(numberOfColumns); 

return new Coordinate(line, column); 
} 

public static Coordinate nextCoordinate(final int numberOfLines, 
final int numberOfColumns, 
final Coordinate coordinate) { 
int line = coordinate.getLine(); 
int column = coordinate.getColumn() + 1; 

if (column == numberOfColumns) { 
column = 0; 
line++; 
if (line == numberOfLines) { 
line = 0; 
} 
} 

return new Coordinate(line, column); 
} 
}
Link to comment
Share on other sites

O teu problema é que tu confias, às cegas, no que o Random devolve como as coordenadas correctas para o próximo barco. Isso não pode acontecer se queres evitar erros.

O que tu deves fazer é:

Depois de um Random devias verificar se o que ele indica é válido. Se n o for tentas outra vez.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.