Break game

Description

Bonjour, voici un petit casse brique très simple mais fonctionnel en programmation structurée avec trois niveaux.

Source / Exemple :

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Event;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.util.Random;



// réalisé par fats
//si vous souhaitez contribuez à l'amelioration de ce casse brique : fate12346@gmail.com

public class toto extends Applet implements Runnable
{
	
	public static int direction ; // direction est/ouest (1 vers la droite -1 vers la gauche)
	public static int directionns ; // direction nord sud
	public static int niveau ;
	public static int nbbrique ;
	public static int nbbriquejeu ;
	public static int vie = 3;
	public static boolean encour = true;
	public static boolean perdu = false;
	public static boolean expansion = false;
	public static boolean tetebrule = false;
	public static boolean diminution = false;
	public static boolean pause = false;
	int x_pos = 50;	// position de la balle	
	int y_pos = 160;	
	int radius = 5;  // rayon de la balle
	int hauteur = 5; // dimension de la raquette
	int largeur = 40;//
	int dureté ;
	int longueurb = 25; // dimension brique
	int hauteurb = 15;
	int possx = 50; // position de la raquette 
	int possy = 170;
	int outgauche = 2;
	int outdroit= 300;
	int outhaut= 0;
	int vitx = 2; // vitesse
	int vity = 2; 
	int score ;
	int valeur=0;
	boolean changer = false;
	boolean test ;
    Point[] brique = new Point[30]; 
    int tabcolor [] = new int [30];
    int tabdurete [] = new int [30];
    Reaction reaction [] = new Reaction [30] ;
	Image Image;
	Graphics d;
	 
	 
	 
	 
	public void init()
	{
		direction = 1;
		directionns = -1;  
		dureté = 1;
		niveau = 1;
		score = 0;
		changer = false;
		
		setBackground (Color.black);
		chargerniveau(niveau);
	}
		 
	

	public void start ()
	{	
		Thread th = new Thread (this);	
		th.start ();
	}
	
	public void run ()
	{
		
		while (!(perdu)&& !(encour) )
		{	
		  if (!pause){     
				      move();
			          collisionraquette ();
			          collisionmur();
			          collisionbrique(); 
			          
                     if (nbbrique <= 0 ){
                    		 niveau++;
                    	 encour = true;
                    	 chargerniveau(niveau);
                    	 if (niveau>3) {perdu = true;}
                      }
                    	            	  
                        repaint();	
			try
			{
				Thread.sleep (15);
			}
			catch (InterruptedException ex)
			{
				
			}
			Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
		  }// fin if
		}// fin while
		
	} // fin run()
		


	public void paint (Graphics g)
	{
		
       
		if (niveau<4){    // on affiche le menu de presentation
		if(encour==true ){
			g.setColor  (Color.WHITE);
			 g.setFont(new Font("Arial",Font.BOLD,14));
			g.drawString("BREAK GAME",80,140);
			g.drawString("START -> ENTER",310,140);
			if (changer==true){  // a chaque changement de niveau on affiche le nouveau niveau
				 g.setFont(new Font("Arial",Font.BOLD,13));
			g.drawString("NIVEAU " + niveau,100,157);
			
			}}}	
			
		
		 for (int i = 0; i<nbbriquejeu; i++)   // on dessine les briques
		 {    
			if (brique[i].x >0 && brique[i].y >0) 
            	
            	switch(tabcolor[i]){
            	case 1: g.setColor  (Color.magenta);
            	break;
            	case 2: g.setColor  (Color.blue);
            	break;
            	case 3: g.setColor  (Color.yellow);
            	break;
            	case 0 : g.setColor  (Color.green);
            	break;
            	}
           g.fillRoundRect(brique[i].x,brique[i].y, longueurb,hauteurb,3,3);
         }
		 
		 
		 if (expansion){    // on affiche le bonus expansion
			
			 g.setFont(new Font("Arial",Font.BOLD,12));
			
			 g.setColor  (Color.WHITE);
				g.drawString("EXPANSION", 310,55 );
		     }
		
	     
		 
		 if (tetebrule){                 // la balle change de couleur quand le bonus tetebrule a été recuperer
			    if (test == true){       // on affiche le bonus
			    	 g.setFont(new Font("Arial",Font.BOLD,12));
				    g.setColor  (Color.ORANGE);
					g.drawString("TETE BRULE", 310, 70);
				    }
			g.setColor  (Color.orange);
			g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);  // la balle devient orange
		    }
		    else { 
		        g.setColor  (Color.green);
		        g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius); // la balle devient verte
		         }  
		 
		 
		 if (diminution){
			 g.setFont(new Font("Arial",Font.BOLD,12));
				 g.setColor  (Color.cyan);
					g.drawString("DIMINUTION", 310, 85);
		 }
		 
		 
		 g.setColor  (Color.gray);                    // on dessine les informations nécessaires au joueur
		  g.drawRect(outdroit,0,2,190);
		  g.setFont(new Font("Arial",Font.BOLD,12));
		   g.setColor  (Color.yellow);
			g.drawString("Score : "+ score, 310, 20);
			 g.setColor  (Color.red);
				g.drawString("Vie : "+ vie, 310, 35);
				
			        
			        
				if (pause && !(perdu)){  // si le jeu est en pause mais n'est pas terminé
					 g.setFont(new Font("Arial",Font.BOLD,14));
					 g.setColor  (Color.white);
						g.drawString("REJOUER !", 85, 145);
						
				}
		 if((perdu)){ g.setFont(new Font("Arial",Font.BOLD,14)); 
		 g.setColor  (Color.WHITE);
		 g.drawString("GAME OVER",85,140);
		 g.drawString("SCORE : "+ score, 85, 157);
  	     }
		
		 g.setColor(Color.red);
		 g.fillRoundRect(possx,170,largeur,hauteur,2,2); 
         
	} // fin paint()
	
	public void update (Graphics g)    
	{ 
		
		Image = createImage (this.getSize().width, this.getSize().height);
		d = Image.getGraphics ();
	    paint (d);
	    g.drawImage (Image, 0, 0, this);
	
	}
	
	public boolean mouseMove(Event evt, int x, int y) 
	   {  possx=x; repaint();   return true;}	 
		 

	  public boolean keyDown(Event evt, int key) { // recupere une valeur pour afficher le titre du jeu
	  if( key ==Event.ENTER){
			if (!perdu && encour ){
			encour= false;
			perdu = false;
			changer=false;
			System.out.println("jk");
			start();
			  }
			pause = false;   
			return true;
		  }
	 return false;    
	}
	   
	  public void stopmove(){  
		  if (vie>=0){
           pause = true;
           vitx=2;
            x_pos= possx+radius ;               // on met a jour la position de la balle
		    y_pos = possy-(radius*2);	
		  
		  }else{
			  perdu=true;   // game over et on met vie à 0 pour éviter d'etre a -1
			  vie = 0;   
		  }
	  }
	  
	  public void move (){
		  x_pos= x_pos+vitx;
		  y_pos = y_pos+vity;
	  }
	  
	  public void move (int dx , int dy){   // methode de changement de direction de la balle
		 
		  vitx = dx;
		  vity=dy;
		 
		  if (vitx <0){    
			  direction =-1;
		  }
		  else{
			  direction=1;
		  }
		  if (vity <0){    
			  directionns =-1;
		  }
		  else{
			  directionns=1;
		  }
	  }
	  
	  public void collisionmur(){
		  if((x_pos<outgauche ) || (x_pos>outdroit ) ){	 // X collisions	
				move(-vitx,vity);										
				}	
			
			if (y_pos<outhaut ){ // Y collisions
				move(vitx,-vity);	
			}
			if ((y_pos+radius) > (possy + hauteur)+5) {	
				vie--;
				stopmove();
			}
	  }
	  
	  public void collisionraquette (){
		 
			if ((y_pos>=possy-2 && y_pos<=possy+1)&&(x_pos >= possx && x_pos<= possx+largeur+1)) // milieu de la raquette
					{  
				y_pos= possy - 10;
				score += 2;
				move(vitx,-vity);			
			  }
			
			 if (y_pos>possy-3 && y_pos<=possy+3){   //coin droit de la barre
		          if (x_pos > possx+(largeur+1) && x_pos< possx+largeur+9){ 
		      
				score += 2;
				x_pos= x_pos+10;
				if (direction==-1){
					  x_pos= x_pos+5;
						y_pos= possy - 10;
					move(-vitx,-vity);}
				else{
				    move(vitx,-vity);
				    }	
			  } }
			
			 if (y_pos>possy-1 && y_pos<=possy+4){   //coin gauche de la barre
			  if(x_pos < possx+1 && x_pos> possx-9){ 
				     score += 2;
				   
					if (direction==1){
						  y_pos= possy - 17;
							 x_pos= x_pos-10;
						move(-vitx,-vity); }
					else{
						
						move(vitx,-vity);
						}
			       } }
		}
	  public void diminution(){
		  largeur=25;
		  expansion = false;
		  diminution = true;
	  }
	  public void expansion (){   // la longueur de la raquette augmente  
		 
		  if(largeur==40 && expansion == false){
		  largeur+=20;
		  expansion = true;  
		  }else{
			largeur = 60;    // on n'augmmente pas plus de 60 si la expansion() est appelé plusieurs fois
			expansion=true;
		  }
		  diminution = false;
	  }
	  
	  public void taillenormal (){
		  expansion = false;
		  diminution = false;
		  largeur = 40;
	  }
	  
	  public void tetebrule (){   // la balle brule toute les briques 
		   
		     for( int i = 0 ; i <nbbriquejeu;i++){
		    	 
		    	 tabdurete[i]=0;
		     }
		     test = true;
		     tetebrule = true;     
	  }
	  
	 
	  public void nbcoup (int parametre, int indice){
		  
		  if (parametre==1){
			  nbbrique--;
			  direction = -direction;
			  move(-vitx, -vity);
			  tabdurete[indice]= parametre-1;
			  brique[indice].move(-25, 0);
		  }
		  if (parametre==2){
			  direction = -direction;
			  move(-vitx, -vity);
			  tabdurete[indice]= parametre-1;
			  tabcolor[indice] = tabdurete[indice];
		  }
		  if (parametre==3){
			  direction = -direction;
			  move(-vitx, -vity);
			  tabdurete[indice]= parametre-1;
			  tabcolor[indice] = tabdurete[indice];
		  }
		  if ((parametre==0)){
			  nbbrique --;
			  brique[indice].move(-25, 0);
			  tabdurete[indice]=0;
			  move(vitx, vity);
		  }
     }
	
	  public void reagir (int indice){
			 int dur = tabdurete[indice];
	         if (reaction[indice].expansion){
	         	expansion();
	         }
	         if (reaction[indice].tetebrule){
	         	tetebrule();
	         }
	         if (reaction[indice].taillenormal){
	         	taillenormal();
	         }
	         if (reaction[indice].diminution){
	         	diminution();
	         }
			     
			      nbcoup(dur,indice);
	           score = score+10;
			 
		 }
	public void collisionbrique(){  
		
		
	      for (int i = 0; i< nbbriquejeu; i++){
	    	if ((brique[i].x > -25 && brique[i].y>0) ){
	    		
	          if(x_pos-3>brique[i].x-2 && x_pos-3 <brique[i].x+(longueurb+1) ){
	       	  if(y_pos-3< brique[i].y+(hauteurb+1) && y_pos-3 >brique[i].y-1 ){
	       		   
	       		
	       		 reagir (i);
	       		 
	           }
	       	   }    
	    	   if((y_pos+radius+3> brique[i].y-1 && y_pos+radius+3 <brique[i].y+(hauteurb+1) ) ){
	    	   if(x_pos+radius> brique[i].x-2 && x_pos+radius <brique[i].x+(longueurb+1) ){
	    		     
	    		     reagir (i);
	    		}
	    		} 
	    	}	    
	 
	      }	// fin for
	   } // fin collisionbrique
	
	
	     public void chargerniveau (int n){   // niveau de jeu
	    	 int p ;  
		 		int k ;
		 		int z;
		 		    largeur = 40;
				    diminution = false;
				    expansion = false;
				    tetebrule = false;
				    
		 		 x_pos= possx+radius ;               // on met a jour la position de la balle
				    y_pos = possy-(radius*2);
				nbbrique = 28;
				nbbriquejeu = nbbrique;
	//------------------------------------------NIVEAU 1---------------------------------------------------			
	      if (n==1){ 
		  changer = true;
		  nbbrique = 28;
			nbbriquejeu = nbbrique;
	    	 p = 0;  
	 		 k =0;
	 		
	         for(int i=1; i<8; i++){
	         	k+=5;
	            for (int j=1; j<5; j++) { 
	               brique[p] = new Point((i*35)-k,(j*25)-10);
	              
	               reaction[p] = new Reaction();
	               Random r = new Random();
	       		valeur = r.nextInt(4);
	       		tabcolor[p]= valeur;
	       		tabdurete[p] = valeur;
	       		
	               p++;
	            }
	         }
	         
	         for (int i=0; i<=2; i++){
	        	 Random r = new Random();
		       		valeur = r.nextInt(nbbrique);
		       		reaction[valeur].expansion = true;
		       	    valeur = r.nextInt(nbbrique);
		            reaction[valeur].taillenormal = true;
	         }
	         Random r = new Random();
	       		valeur = r.nextInt(20);
	       		reaction[valeur].tetebrule = true;
	           
	             
	     } // fin if
	    
	      //--------------------------------------NIVEAU 2--------------------------------------------
	       if (n==2){
		    
		    changer = true;
		    nbbrique = 27; // mise à jour du nombre de briques
		    nbbriquejeu = nbbrique;
		    x_pos= possx+radius ;               // on met a jour la position de la balle
		    y_pos = possy-(radius*2);
		  
		    p = 0;  
		    k=0;
		    z=0;
		    for(int i=1; i<10; i++){
	         	k+=7;
	            for (int j=1; j<4; j++) {  
	             brique[p].move((i*35)-k,(j*25)-10);
	             reaction[p].reinit(); // on réinitialise tous les objets reaction
	             
	            Random r = new Random();
	       		valeur = r.nextInt(4);
	       		tabcolor[p]= valeur;
	       		tabdurete[p] = valeur;
	               p++;
	            }}
	            
		     
		    
	         for (int i=0; i< 3; i++){
	        	 Random r = new Random();
		       		valeur = r.nextInt(nbbrique);
		       		reaction[valeur].expansion = true;
	         }
	         Random r = new Random();
	       		valeur = r.nextInt(nbbrique);
	       		reaction[valeur].tetebrule = true;
	            valeur = r.nextInt(nbbrique);
	          
	            reaction[valeur].diminution = true;
	      } // fin if
	   //-----------------------------------NIVEAU 3--------------------------------------------
         if (n==3){
 		    changer = true;
 		    nbbrique = 25; // mise à jour du nombre de briques
 		    nbbriquejeu = nbbrique;
 		   x_pos= possx+radius ;              // on met a jour la position de la balle
 		    y_pos = possy-(radius*2);
		   
 		   p = 0;  
		    k=0;
		    z=0;
		
	            for (int j=0; j<28; j++) {  
	          
	             reaction[j].reinit(); // on réinitialise tous les objets reaction
	             
	            Random r = new Random();
	       		valeur = r.nextInt(4);
	       		tabcolor[j]= valeur;
	       		tabdurete[j] = valeur;
	              
	            }
	            
	            for (int i=0; i< 1; i++){
		        	 Random r = new Random();
			       		valeur = r.nextInt(nbbrique);
			       		reaction[valeur].expansion = true;
			       		for(int j=0; j<2; j++){
			       		valeur = r.nextInt(nbbrique);
			            reaction[valeur].diminution = true;
			            valeur = r.nextInt(nbbrique);
			            reaction[valeur].taillenormal = true;
		         }}
		     
	            int nbligne = 0;
	    		int ligne = 9 ;
	    		int espace = 15;
	    		int nbdessin = 9;
	    		
	    		for(nbligne =0; nbligne < 5;nbligne++){   // dessine un triangle de brique a l'envers
	    			k = espace; // nouvelle position x du dessin enregistrer dans k
	    		for (ligne = 0 ; ligne < nbdessin ; ligne++){
	    			
	    			brique[p].move(k, z+10);
	    			p++;
	    			k+=30;
	    		}
	    		espace+=30;
	    		
	    		z+= 18;
	    		nbdessin-=2;
	    		}
 			    
	         }

 
   } // fin chargerniveau()
	
	     
	     public class Reaction {
	    	
	    	 boolean normal = false ;
	    	 boolean expansion = false ;
	    	 boolean diminution = false;
	    	 boolean taillenormal = false;
	    	 boolean tetebrule = false ;
	    	 
	    	 public void reinit (){
	    		 normal = false ;
		    	 expansion = false ;
		    	 diminution = false;
		    	taillenormal = false;
		    	  tetebrule = false ;
	    	 }
	       } 
  
}// fin Classe toto (jeu)

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.