Bonjour à tous !
Avec un groupe d'amis nous sommes actuellement entrain de réaliser un casse brique en Java. Nous avons presque atteint notre bute, toutefois il nous reste quelques trucs à régler :
IMPORTANT :
- L'ajout de collision sur les briques et les faire disparaitre quand toucher.
- L'ajout de vie.
OPTIONNEL :
- Ajouter une image en fond.
Alors pour la collision des briques nous avons une petite idée mais on ne sait pas vraiment comment réaliser cela. On penser parcourir chaque élément du tableau avec une boucle mais pour ajouter la collision nous n'avons pas d'idée.
Pour ce qui est des vies, nous y sommes presque. Nous avons un menu qui nous permet de relancer le jeux ou de le quitter, pour quitter ça marche, pour relancer aussi sauf que cela garde l'ancienne fenêtre active (ce qui pause problème car elle comporte un son). J'ai déjà essayer d'ajouter un this.dispose(); mais cela refuse de compiler après coup.
Et pour l'image, celle-ci se positionne au dessus de tout nos JComponent ce qui est un peu gênant 
Je suis contient que je demande beaucoup d'aide, mais le temps joue contre nous alors si une tête de plus pouvez nous aider ce serait génial ! 
Les codes actuelles : (ne comprenant pas le son ni l'image car il rajouterait du code inutile au problème rencontré).
Classes APPLI (gérant le lancement de l'application).
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Appli extends JFrame implements KeyListener{
public Dessin d;
public Balle balle;
public Raquette raq;
public Appli(){
super("Casse Brick");
balle = new Balle();
raq = new Raquette();
balle.setRaquette(raq);
raq.setBalle(balle);
d = new Dessin(balle,raq);
this.addKeyListener(this);
this.setContentPane(d);
this.setSize(600,600);
this.setVisible(true);
this.setResizable(false);
}
public static void main (String[] args){
new Appli();
}
public void keyPressed(KeyEvent e){
int i=e.getKeyCode();
switch(i){
case KeyEvent.VK_SPACE:
d.go();
break;
case KeyEvent.VK_RIGHT:
raq.deplaceDroite();
break;
case KeyEvent.VK_LEFT:
raq.deplaceGauche();
break;
}
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e){
}
}
La classe Balle
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Balle extends JComponent implements Runnable{
public int x, y, taille;
private int dx,dy;
private Raquette raq;
private Balle balle;
Thread t=new Thread();
int raqx;
protected boolean enCours = false;
private int life;
public void setRaquette(Raquette raq){
this.raq = raq;
}
public Balle(){
super();
taille = 10;
this.x = 295;
this.y = 490;
this.dx = 7;//deplacement des x
this.dy = -5;//déplacement des y
//t = new Thread(this);
}
public boolean enCours(){return this.enCours;}
public void paintComponent(Graphics g){
g.fillOval(x,y,taille,taille);
}
public void demarre(){
this.enCours = true;
this.t=new Thread(this);
this.t.start();//lance le run!
}
public void run(){
while(y != -1 && enCours && life<3){
try{
Thread.sleep(20);
}catch(InterruptedException ie){}
x = x + dx;
y = y + dy;
if(y+dy<0){dy=-dy;}
if(x+dx <= 0 || x+dx >= 590){dx=-dx;}
raqx=raq.getValeur();
int raqx2=raqx+100;
if(y>=492 && y<=496 && x<=raqx2 && x+taille>=raqx){
dy=-dy;
}
if(y>600){
reset();
dy=-dy;
life=life+1;
}
if(life==3){
System.exit(0);
}
this.getParent().repaint();
}
}
public void reset(){
this.x=295;
this.y=490;
this.taille=10;
raq.setX(250);
enCours = false;
}
}
La classe Raquette :
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Raquette extends JComponent
{
public int x;
private boolean descend,droite;
private Balle balle;
public void setBalle(Balle b){
this.balle = b;
}
public Raquette(){
super();
x = 250;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(x,500,100,10);
}
public void deplaceGauche(){
if(x>0){
x = x-15;
}
else{
}
repaint();
}
public void deplaceDroite(){
if(x<500){
x = x+15;
}
else{
}
repaint();
}
protected int getValeur(){
return x;
}
protected void setX(int x){
this.x=x;
}
}
La classe Brique :
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Brick extends JComponent{
private int x, y;
private Color c;
public static final Color[] coul = {Color.YELLOW,Color.BLACK,Color.RED,Color.BLUE,Color.GREEN};
public Brick(int x, int y){
super();
this.x = x+2;
this.y = y+1;
this.c = c;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(this.c);
g.fillRect(x*70,y*30,50,10);
}
}
Et finalement la classe Dessin( car nous avons du "redessiner certains éléments pour les intégrer dans la classe appli).
import javax.swing.*;
import java.awt.*;
public class Dessin extends JPanel{
Balle b;
Raquette r;
Brick[][] bricks;
public Dessin(Balle b, Raquette r){
super();
bricks = new Brick[5][12];
for(int i = 0 ; i < 5 ; i++){
for(int j = 0 ; j < 12 ; j++){
bricks[i][j] = new Brick(i,j);
this.add(bricks[i][j]);
}
}
this.b = b;
this.r = r;
this.add(this.b);
this.add(this.r);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
this.b.paintComponent(g);
this.r.paintComponent(g);
for(int i = 0 ; i < 5 ; i++){
for(int j = 0 ; j < 12 ; j++){
bricks[i][j].paintComponent(g);
}
}
}
public void go(){
if(!this.b.enCours()){this.b.demarre();}
}
}
Voila, merci d'avance et bonne journée.