Popular um Array 2D com numeros randomicos

1 resposta
M

Pessoal, sou iniciante em Java e ja sei alguns conceitos… porem ainda estou com dificuldades em aplicá-los. No caso, estou seguindo um tutorial para um joguinho bem simples, parecido com o famoso Space Invaders, onde a tela é estática, ou seja, apenas a navezinha e os inimigos se movem na tela.

Pois bem, neste caso, a janela possui a dimensão de 800x470, e a classe criada para popular os inimigos na tela foi feita com um 2D array com as coordenadas definidas para que os inimigos venham em direção à nave, ou seja, eles foram introduzidos desta forma:

private int[][] coordenadas = {{2380, 29}, {2600, 59}, {1380, 89},
{780, 109}, {580, 139}, {880, 239}, {790, 259},
{760, 50}, {790, 150}, {1980, 209}, {560, 45}, {510, 70},
{930, 159}, {590, 80}, {530, 60}, {940, 59}, {990, 30},
{920, 200}, {900, 259}, {660, 50}, {540, 90}, {810, 220},
{860, 20}, {740, 180}, {820, 128}, {490, 170}, {700, 30},
{920, 300}, {856, 328}, {456, 320}}

Essas coordenadas sao as posicoes que os inimigos vao aparecer (a maioria fora da tela, ja que ela possui 800 de largura, e a maioria estao com um valor maior) e continuarao a andar para a esquerda para que apareçam na tela em algum momento (o jogo é horizontal).

O metodo que inicializa os inimigos ficou assim:

public void initializeEnemies() {
enemies = new ArrayList();

for (int i = 0; i < coordenadas.length; i++) {
        enemies.add(new Enemy(coordenadas[i][0], coordenadas[i][1]));

    }

}

Pois entao, eu acho que seria interessante fazer com que os inimigos, aparecessem randomicamente, em vez de ter que bolar 30 diferentes coordenadas para 30 inimigos! Tentei fazer atraves do util.Random, mas nao consegui! Mas a ideia era fazer com que eles tivessem valores aleatórios para Y entre 0 e a altura da tela e para X entre 0 e duas vezes a largura da tela(para inimigos que estejam fora da tela, mas que irão andar para frente e surgir nela). Alguem consegue me ajudar?

Valeu galera!

1 Resposta

D

Sem um ponto de origem desconsiderando o tamanho do enemy

x = (int)(Math.random() * largura * 2);
y = (int)(Math.random() * altura);

Supondo que o ponto de origem seja {0, 0}

x = (int)(Math.random() * ((largura * 2) - larguraDoEnemy));
y = (int)(Math.random() * (altura - alturaDoEnemy));

Supondo que o ponto de origem seja o centro {larguraDoEnemy / 2, alturaDoEnemy / 2}

x = (int)(Math.random() * ((largura * 2) - larguraDoEnemy)) + larguraDoEnemy / 2;
y = (int)(Math.random() * (altura - alturaDoEnemy)) + alturaDoEnemy / 2;
Criado 10 de março de 2016
Ultima resposta 12 de mar. de 2016
Respostas 1
Participantes 2