CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Casse Brique

dzkille
dzkille
Niveau 10
31 mai 2017 à 14:23:16

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 :hap:

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.

dark_drow
dark_drow
Niveau 15
31 mai 2017 à 18:13:47

c'est quoi la question en fait ?

dzkille
dzkille
Niveau 10
31 mai 2017 à 18:31:48

Oui effectivement si j'oublie de préciser :noel: en somme suggérer des pistes pour les problèmes qu'il nous reste à résoudre

Bartoniz
Bartoniz
Niveau 9
01 juin 2017 à 09:19:22

Collision entre la balle et une brique, ça revient à faire une collision entre un cercle et un rectangle.
Lien : https://openclassrooms.com/courses/theorie-des-collisions/formes-simples

dark_drow
dark_drow
Niveau 15
01 juin 2017 à 11:49:43

Oui et réfléchir à ce genre de cas : Frame1 pas de collision, Frame2 tu es déjà rentré dans la brique, Frame3: ta balle va rebondir du mauvais côté

dzkille
dzkille
Niveau 10
01 juin 2017 à 19:05:28

J'ai regardé pour les collisions je ne suis pas sur de tout comprendre, et qu'est ce qu'une frame exactement ? Je n'ai pas encore vue cette notion en cours :hap:

J'ai parcouru quelques sites et chacun propose plein de solution du coup je suis un perdu.
J'ai demandé de l'aide à mon prof tout à l'heure, il nous a donné comme conseil de récupérer la position des briques pour la comparer à la position de la balle qu'il faut aussi récupérer puis faire en sorte qu'il y ai les collisions. Sur le coup ça me semble clair, toutefois je n'ai absolument aucune idée de la façon dont récupérer la position de chaque brique sachant que c'est un tableau.

Hamsterloulo
Hamsterloulo
Niveau 9
01 juin 2017 à 20:41:31

Alors j'avais fait un cass brick en java.
C'était y'a plus d'1 ans donc je pourrais pas t'aider en précision mais effectivement y'avais utiliser un tableau ou je rangeais toutes les bricks comme ça je tcheckais en permanence si la boule est rentré en collision avec une brick.
Pour les collisions je te conseille de regarder du coder overlaps() (en gros ça regarde si quelque chose rentre en contact avec le rectangle)

Hamsterloulo
Hamsterloulo
Niveau 9
01 juin 2017 à 20:46:59

J'ai pas regardé le code mais pour l'image assure toi que tu draw l'image avant de draw tes JCompenent

Dragonn1
Dragonn1
Niveau 10
02 juin 2017 à 04:27:30

En Swing? :malade: :rire:

dzkille
dzkille
Niveau 10
02 juin 2017 à 18:12:30

Voila , on a récupérer la position de la ballepar rapport à celle de chaque brique maintenant il suffit d'importer le tableau dans la classe balle pour ajouter les collisions, des idées ? :noel:

Message édité le 02 juin 2017 à 18:13:05 par dzkille
crevebedaine
crevebedaine
Niveau 5
03 juin 2017 à 23:19:42

Ce que je ferrai si j’étais toi : [[sticker:p/1kkn]]

Dans la classe Brique, un arraylist de brique STATIC accompagnée de son getter.
A chaque instanciation de brique, tu rajoute celle ci dans l'array
bricks.add(this);

Ainsi, a chaque deplacement de la balle, avant de la redessiner, tu verifie que aucuns points de la circonférence n'entre en contact avec aucunes briques. Si c'est pas le cas, tu supprime la brique en question et tu la retire de la liste avant de gerer la nouvelle trajectoire de la balle.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment