Sobre o jogo arkanoid

pessoal estou tentado criar o arkanoid, só que chegeui numa parte que nao sei como implementar!!

criei uma classe Colisao para detectar as colisoes, nela o metodo run fica constantemente chamando pelos metodos que verificam se houve colisao. Tenho um List que possue todos os tijolos do jogo entao no metodo private void verificaSeBateuNosTijolos() , por exemplo, o retangulo da bola intersecta o retangulo de um dado tijolo, entao este tijolo deve ser eliminado da lista.

O problema é… como saber qual dos tijolos do List é que foi acertado pela bola???

Segue o codigo:

[code]
import java.awt.Rectangle;
import java.util.List;
import java.util.TimerTask;

import Tijolo.Tijolo;

public class GerenciadorDeColisoes extends TimerTask
{
Bola bola = new Bola();
Barra barra = new Barra();
List listaDeTijolos = Tijolo.listaDeTijolos;

@Override
public void run()
{		
	verificaSeBateuNosTijolos();
	verificaSeBateuNaBarra();
	//verificaSeBateuNaParede();
}

private void verificaSeBateuNosTijolos()
{
	for (Tijolo tijolo : listaDeTijolos)
	{ 
		if (retanguloBola.intersects((Rectangle) listaDeTijolos))
		{
			tijolo.destrua(/*tijolo que foi acertado*/);
		}
	}
}

private void verificaSeBateuNaBarra()
{
	if (retanguloBola.intersects(retanguloBarra))
	{
		// verificar de onde a bola veiu e lança-la para
		// lado oposto!
	}
}

}[/code]

La na classe Tijolo (parte dela)o metodo que remove este tijolo

public class Tijolo extends ComponentesDoCenario 
{

        public void destrua(Tijolo tijoloASerEliminado)
	{
		listaDeTijolos.remove(tijoloASerEliminado);
	} 

}[/code]


La na classe Bola(parte dela) o metodo construtor
[code]
public class Bola extends ComponentesDoCenario
{
	public Integer velocidadeDaBolaEmX;
        public Integer velocidadeDaBolaEmY;
	private Integer tamanho;
	private Rectangle retanguloBola;
            
        public Bola()
  	{ 
    	        retanguloBola = new Rectangle(10,10);
    	        velocidadeDaBolaEmX = 200;
  		velocidadeDaBolaEmY = 150;
  		tamanho = 10;
  		Timer tempo = new Timer();
		tempo.schedule(new DeslocamentoDaBola(), 0, 50);
		coloqueNoCentroDaBarra();
	}
}
[/code]

Aida tenho outros dois grandes problemas!!! A implementaçao do metodo[b] private void verificaSeBateuNaBarra()[/b], como fazer o lançamento da bola após ela colidir com a barra??

E o outro é sobre a Classe [b]DeslocamentoDaBola[/b] que representa o deslocamento da bola na tela do jogo!

[code]public class DeslocamentoDaBola extends TimerTask
{
	Barra barra = new Barra();
	Bola bola = new Bola();
	
	
	@Override
	public void run() 
	{
	    andarPara(bola.obetenhaCordenadaX() + bola.velocidadeDaBolaEmX, bola.obetenhaCordenadaY()
				+ bola.velocidadeDaBolaEmY);
	}
	
	protected void andarPara(double posiçãoEmX, double posiçãoEmY)
	{
		// TODO Auto-generated method stub
		
	}

no metodo andarPara a bola se deslocará em X e Y, mas como representar este deslocamento?

Obrigado!!!

Cara… espera pelo ViniGodoy, ou fala diretamente com ele.
Eu lembro que ele criou o Vikanoid (ou algo do tipo), em Java.

E até disponibilizou o fonte.

Para lançar a bola pro lado oposto, tu tem que mudar a velocidade da bola pro inverso, eu acho. Não sei como tu implementou o movimento, mas acredito que você mude a posição da bola de acordo com o tmepo passado e com a velocidade da bola, X e Y. Então, quando a bola acertar algum lugar, você faz algo do tipo (não sei direito seus métodos e classes, mas use a imaginação… :wink: ):


private void bolaAcertouAlgoSolido(Bola bola){

bola.setVelocidadeY( -bola.getVelocidadeY() );
bola.setVelocidade( -bola.getVelocidadeX() );

}

Assim, se a bola estava subindo ( velocidade Y positiva ), ela vai começar a descer ( velocidade Y negativa ).

Eu vi isso num outro jogo em Java, o JMario, nunca mais me esqueci… :lol:

Sim, basta inverter a velocidade em y.

Você também pode calcular a distância da bola em relação ao centro, para modificar um pouco o x. Não fiz isso no Vikanoid, mas é bem divertido.

Para entender direito movimentação em 2D (e 3D tb), dá uma lida nesse artigo (acompanha classes úteis):
http://www.vinigodoy.com.br/pontov/files/vetores.zip

Aliás, foi vc que esses dias pois uns tópicos sobre os fontes do Vikanoid, né?