• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

zezepee

batalha naval - colocar barcos aleatoriamente

2 mensagens neste tópico

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); 
} 
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora