Ptit casse brique

Soyez le premier à donner votre avis sur cette source.

Vue 5 772 fois - Téléchargée 389 fois

Description

C 'est un début de casse brique développé avec une structure orienté objet.
L'algorithme de collisions n'est pas totalement au point.

Source / Exemple :

import java.applet.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Event;
import java.lang.Math;
import java.awt.Point;
import java.util.*;
import java.io.*;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
;
// réalisé par fats



public class jeujeu extends Applet implements Runnable
{


	public Raquette raquette;
	public Balle boule;
	public Menu menu;
	public static boolean casse = false;
	public Brique tableau [][] = new Brique [4][6];  // tableau d'objet de type Brique
	
	int pt =0;
	int largeur;
	int hauteur;
	public static int nbbrique = 24;
	public static int direction =1;    // indique le sens de deplacement de la boule ici (vers la droite : 1 / vers la gauche : -1)
	public static int directionNS = 1; // vers le bas
	public static boolean premierefois = true;
	public static boolean perdu = false ;
	public static boolean demarrage = true;
	private Thread th;
	Graphics g;
	Graphics d;  // servira au double buffer
	private static int point ;
	private Image Image;
	
	public void init()
	{
		setBackground (Color.black);
		
		
		boule = new Balle (); 
		raquette = new Raquette(50,165,35,6); // creation d'objets : raquette et balle
		 menu = new Menu();
		 int x =0;
		 int y=0;
		  for (int L= 0; L < 4;L++){                 //ligne           
			   for( int C = 0 ; C< 6 ; C++){         // colonne
				    
				  
	        	 tableau[L][C] = new Brique (x,y,25,15);           
	        	if (C==5){x=0;}
	          else {x=x+35;}}
	         
			   y = y+25; }            
		  
		 
		
	}
	

	public void start ()
	{	
		th = new Thread (this);	
		th.start();    	
	}

	public void stop()
	{
	}

	public void destroy()
	{  
	}

	public void run ()
	{	
		Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
		
		while (!(perdu) && !demarrage){		
			
				
		    boule.move(); // appel de methode de deplacement
		    raquette.collisionboule(boule); // appel de methode de controle collision raquette	
		 
		                                           	      
		    repaint();        
			
			try
			{
				
				Thread.sleep (15);
			}
			catch (InterruptedException ex)
			{
				
			}

			
			Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
		}		
		  
	}
			


	public void paint (Graphics g)
	{
		
		if(premierefois){
		menu.presentation (g);
	
		}
		
		if(perdu){
			menu.perdu(g);
		}

			
		
		raquette.dessiner(g);	
		boule.dessiner(g);
		menu.score(g);
		
		
		
		 if (nbbrique >0){   // on vérifie que toutes les briques ne sont pas cassées
			 int L=0;
				int C=0;
			 for ( int i= 0; i<6;i++){   // je commence par la premiere ligne dans le jeu en partant du bas
				  for (L=0; L<4;L++){
					 
						
					  if (tableau[L][i].getcasse()==false){
						 
						  tableau[L][i].collision(boule);   
						  tableau[L][i].dessiner(g);
					  }				          
				
						  
					
				  }
				 
				  }
			 }
				   
			 
			
			 
		 else {
			 jeujeu.perdu= true;
		 }
	}
			 
			 
			 
			 
			 
			 
 
	
	
	
	
	public void update (Graphics g)
	{ 
		       
		Image = createImage (this.getSize().width, this.getSize().height);
		d = Image.getGraphics ();
	
	
	d.setColor (getBackground ());
	d.fillRect (0, 0, this.getSize().width, this.getSize().height);

	d.setColor (getForeground());
	paint (d);
	
	g.drawImage (Image, 0, 0, this);
	
			
	}

	
	   
	



 public class Balle {  // creation de la classe Balle
	 
	private int radius ;
	private int posx ;
	private int posy;
	public int posx2;
	public int posy2;
	public int posx3;
	public int posy3;
	public int posx4;
	public int posy4;
	private int outdroit = 188;   // delimitation de la zone de jeu
	private int outgauche = 5;    
	private int outhaut = 5;     
	private int outbas = 178;    
	private int centrex, centrey;
	
	public int dx=2,dy=2;  // vitesse
	
	public Balle (){
		

		radius = 8;   // rayon du cercle
		 posx=50;
		 posy = 150;
		posx2 = posx + (radius*2) ;
		posy2 = posy  ;
		posx3 = posx ;
		posy3 = posy+ (radius*2);   //          
		posx4 = posx3 + (radius*2); //   x ------------------x2 
		posy4 = posy2 + (radius*2); //   |                   |
		                           //   x3------------------ x4 
		
	}
	
	public int getradius(){
		return this.radius;
	}
	
	public int getX2 (){
		
		return this.posx2;
	}
	public int getX3 (){
		posx3 = posx ;
		return this.posx3;
	}
	public int getX4 (){
		posx4 = posx3 + (radius*2);
		return this.posx4;
	}
	
	public int getY2 (){
		
		return this.posy2;
	}
	public int getY3 (){
		posy3 = posy+ (radius*2);
		 
		return this.posy3;
		}
	public int getY4 (){
		posy4 = posy2 + (radius*2);
		return this.posy4;
	}
	
	public int getcentrex () {
		
		centrex = (posx + (radius/2));
		return this.centrex;
	}
	public int getcentrey () {
		centrey = (posy + ( radius/2));
		return this.centrey;
	}
	
	public int getX (){
		
		return this.posx;
	}
	
	public int getY(){
		
		return this.posy;
	}

	public void setX(int x){
		
		this.posx = x;
	}
	
	public void setY (int y){
		
		this.posy = y;
	}
	
	
	public void move (int dx , int dy){
		
		this.dx = dx;
		this.dy = dy;
		collision();
	}
	
	public void move (){	

			
		posx += dx;
		posy += dy;
		collision();
		
	}
	
	public void collision(){
		
		
		if (posx < outgauche  ){
			
			dx = -dx;	          // repart vers la droite
			direction = 1;  
		}
		if (posx > outdroit ){
			dx=-dx;                 // repart vers la gauche
			direction =-1;   
		}
		if(posy < outhaut ){
			
			directionNS=-1;
			dy =-dy;
		}
		if(posy >= outbas ){
			
			directionNS = 1 ;
			perdu = true;			
			
		}
		
	}
	 
	public void dessiner( Graphics g){
		
		g.setColor  (Color.green);
		
		 g.fillOval(this.posx,this.posy, 2*radius, 2*radius); // la balle
		
			g.setColor  (Color.yellow);
			
		 g.fillOval(centrex, centrey, 5, 5);  // le centre du cercle
		 
		
		
        }
 
 }    // fin classe Balle
 
 
 
 
 public class Raquette { // creation de la classe raquette
	 
	    protected int largeur;
		protected int hauteur;
		protected int posx ;
		protected int posy;
		private int posx2;
		private int posy2;
		private int posx3;
		private int posy3;
		private int posx4;
		private int posy4;
	    private int dx,dy;
	  
	 
	    protected int centrex;  
		protected int centrey;
	    
	    
		public Raquette(int x, int y, int largeur, int hauteur) {
			
			this.largeur = largeur;
			this.hauteur = hauteur;
			point = 0;
			
			this.posx = x;
			this.posy = y;
			
			posx2 = posx + largeur ;
			posy2 = posy  ;
			posx3 = posx ;
			posy3 = posy+ hauteur;   //          
			posx4 = posx3 + largeur; //   x ------------------x2 
			posy4 = posy2 + hauteur; //   x3------------------x4
			
		   
		}
		
		public int getcentrex () {          // on calcul le centre de l'objet     
			
			centrex = (posx + (largeur/2));
			return this.centrex;
		}
		public int getcentrey () {
			centrey = (posy + (hauteur/2));
			return this.centrey;
		}
		public int getX (){
			return this.posx;
		}
		
		public int getX2 (){
			posx2 = posx + largeur ;
			return this.posx2;
		}
		public int getX3 (){
			posx3 = posx ;
			return this.posx3;
		}
		public int getX4 (){
			posx4 = posx3 + largeur;
			return this.posx4;
		}
		public int getY (){
			return this.posy;
		}
		public int getY2 (){
			posy2 = posy  ;
			return this.posy2;
			
		}public int getY3 (){
			posy3 = posy+ hauteur; 
			return this.posy3;
			
		}public int getY4 (){ 
			posy4 = posy2 + hauteur;
			return this.posy4;
		}
		public void setX(int x){
			this.posx = x;
		}
		
		public void setY(int y){
			this.posy = y;
		}
		
		
		public void collisionboule (Balle balle){
				
			
			this.dx = balle.dx ;
			this.dy = balle.dy ;
			
			if (balle.getX()>=this.posx+2 && balle.getX()<= this.posx + largeur-1){ // milieu raquette
				if(balle.getY()>= this.posy-1){ 
					
					 balle.setY(this.posy-3);
					 point+=15;
					 directionNS = -directionNS;
					balle.move(dx,-dy);
					
					}	}
				
				if (balle.getX()>this.posx+largeur-1 && balle.getX()<= this.posx + largeur+3){  // coin droit de la raquette
					
						if (balle.getY()+4>= this.posy && balle.getY()+4<=this.posy+2){ 
						
					        balle.setY(this.posy-3);
					        point+=15;
					        
					        if (direction == -1){ // sens negatif (mouvement de la balle vers la gauche)
								   balle.move(-dx,-dy);	// La balle repart dans l'autre sens
								   directionNS = -directionNS;
								   direction = -direction;}
								   else{
									   balle.move(dx,-dy); // sinon elle conserve son sens de deplacement sur x
									   directionNS = -directionNS;
								   }
					      
					       
							}	}
			
			if (balle.getX()>= this.posx-3 && balle.getX()<=this.posx){  // coin gauche de la raquette
				   if (balle.getY()+2>= this.posy && balle.getY()+2<=this.posy+2){ 
					
					   balle.setY(this.posy-3);
					   point+=15;
					  
					   if (direction ==1){ // sens positif (vers la droite)
					   balle.move(-dx,-dy);	 // La balle repart dans l'autre sens
					   directionNS = -directionNS;
					   direction = -direction;}
					   else{
						   balle.move(dx,-dy);
						   directionNS = -directionNS;
					   }
					   
						}}	
			
			         
			repaint();
		}
	
		public void dessiner (Graphics g){    // dessine la raquette
			
			g.setColor(Color.red);
			 g.fillRect(this.posx-3,this.posy,largeur+3,hauteur);
			 
			 repaint();
		}		
	 
 }            // fin classe Raquette
 
  
 public class Brique extends Raquette {  // on herite de raquette et de ses fonctionnalités

	 private boolean casseb ;
	  private double u  , v;
	  private double distance = 0;
	  double chevx, chevy;
	 
	public Brique(int x, int y, int largeur, int hauteur) {
		super(x,y,largeur,hauteur);
	
		u = 0;
		v = 0;
		chevx=0;
		chevy=0;
		
		
		casseb= false;
	}
	 
	
	public boolean distance (Balle balle){   // méthode permettant de calculer la distance des objets et de voir s'il y a collision
		
		

	


		 
		
		
		                 u = balle.getcentrex() - this.getcentrex();
				 v = balle.getcentrey() -this.getcentrey();
				 
				
				double distance = Math.sqrt((u*u)+(v*v)); // on calcul la distance
				
				
				if (distance <= 2*balle.getradius()+1 ){
				  if (balle.getY()<= this.getY3() && balle.getY() >= this.getY()){
					  if (balle.getX()>=this.getX() && balle.getX()<=this.getX2());
							return true;
						
					}
				
				}
			



		
		

               //if (balle.getY()<this.getY3() && balle.getY() > this.getY()){   // 
		//if(balle.getX()> this.getX() && balle.getX()< this.getX2()){
			
			
	//		return true;}}	
	//if (balle.getY2()< this.getY3() && balle.getY3() > this.getY()){
	//	if(balle.getX2()> this.getX3() && balle.getX2()< this.getX4()){	return true;}}
		
	
		
		return false;
	}
	
		
		
	public void collision (Balle balle) {    // on redefinit la methode collision
		
		if (distance(balle) && casseb==false){
			
			balle.move(-balle.dx, -balle.dy);
			direction = -direction;
			directionNS = -directionNS;
			
			casseb=true;
			nbbrique--;
			point = point + 3;
			
		}
		
		
	}
	
	

	public boolean getcasse(){
		return this.casseb;
	}
	public void dessiner (Graphics g){    
		
		if (casseb==false){
		g.setColor(Color.blue);
		 g.fillRect(this.posx+25,this.posy,largeur,hauteur);
			g.setColor  (Color.yellow);
			 
			 g.fillOval(this.getcentrex()+25,  this.getcentrey(), 5, 5); // pt jaune permettant de reperer le centre de l'objet
		 repaint();}
	}		
 
	
 }
 
 

 
 
 public class Menu  {      
		
	 private int dx,dy;
	 
	 public Menu(){
		 
		 this.dx = boule.dx;
		 this.dy = boule.dy;
		 
	 }
	
 
 public void presentation (Graphics g){
	 
	 
     
	 g.setFont(new Font("Arial",Font.BOLD,14));	 
	 g.setColor(Color.green);
	 g.drawString("SQUASH GAME",50,110);
	 g.drawString("START -> ENTER",50,130);
	 
	 
	 if (!demarrage && !perdu){
		 premierefois = false;
		 g.setColor(Color.black);
         g.fillRect(0,0,size().width, size().height);
        
	 }
	 }
 
      
  
 
  public void perdu (Graphics g){
	  
	  g.setFont(new Font("Arial",Font.BOLD,14));
	  g.setColor(Color.green);
		 g.drawString("GAME OVER",60,80);
		 g.drawString("SCORE : "+ point, 60, 130);
	   }
  
  
  public void score (Graphics g ){
	  
	  g.setFont(new Font("Arial",Font.BOLD,13));
	  g.setColor  (Color.yellow);
		g.drawString("Score : "+ point, 20, 190);
		
		
		
	
  }
  
  
 } // fin classe Menu
 
 
 
 public boolean mouseMove(Event evt, int x, int y)  // methode de pingpong
 {  raquette.setX(x); repaint();   return true;}
 
 public boolean keyDown(Event evt, int key) {
     if(key == Event.ENTER) {
    	 
    	 if(demarrage && !(perdu)){  // test récupere l'entrée et verifie si le programme a demarrer
    		
      jeujeu.demarrage= false;
      jeujeu.perdu = false;
      
      
       start();                     // si c'est pas le cas on le demarre
      
    	 }
     }
    
     return true;
  }

 
 }  // fin classe pingpong

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.