import java.util.*;
import java.awt.*;

public class Couloir{

	private Entite objet=new Entite();
			
	public Couloir(Catalog cat,Monde monde,String tileWall,int indexTileMur,String tileSol,Point cooDepart,int orient, int range){
	
		
		int cooX=(int)cooDepart.getX();
		int cooY=(int)cooDepart.getY();
	
		
		//		1
		//	4		2
		//	 	3
		
		
		//		1
		//	2		4
		//	 	3
		
		
		
		int cX=0;
		int cY=0;
		
		
		
		Point boutPt=new Point(0,0);
		
		
		
		
		//ArrayList grille[][]=new ArrayList[tailleGrille][tailleGrille];
		
		ArrayList mursPOINTSList1Nord=new ArrayList(); //***
		ArrayList mursPOINTSList2Nord=new ArrayList(); //***
		ArrayList mursPOINTSList1Sud=new ArrayList(); //***
		ArrayList mursPOINTSList2Sud=new ArrayList(); //***
		ArrayList mursPOINTSList1Est=new ArrayList(); //***
		ArrayList mursPOINTSList2Est=new ArrayList(); //***
		ArrayList mursPOINTSList1Ouest=new ArrayList(); //***
		ArrayList mursPOINTSList2Ouest=new ArrayList(); //***
	
	
		Point murActuelPt=new Point(0,0);//***
		
		
		ArrayList ouverturePOINTSList1Nord=new ArrayList(); //***
		ArrayList ouverturePOINTSList2Nord=new ArrayList(); //***
		ArrayList ouverturePOINTSList1Sud=new ArrayList(); //***
		ArrayList ouverturePOINTSList2Sud=new ArrayList(); //***
		ArrayList ouverturePOINTSList1Est=new ArrayList(); //***
		ArrayList ouverturePOINTSList2Est=new ArrayList(); //***
		ArrayList ouverturePOINTSList1Ouest=new ArrayList(); //***
		ArrayList ouverturePOINTSList2Ouest=new ArrayList(); //***
		
		
	
		
		int j=0;
		
		
		
		///////////////SOL nord///////////////////////////////////////////////////////////////
		if(orient==1){
			//Entite objet=new Entite();
			cY=cooY-1;
			for(int y=0;y<range;y++){
				destructeurMurs(cooX,cY,monde.grille);
				monde.grille[cooX][cY].add(new Surface(true,tileSol,2,true));
				
				if((int)(Math.abs(Math.random()*100)+1)>90){
						
					objet= (Entite) cat.piegesCatalogue.get((int)(Math.abs(Math.random()*cat.piegesCatalogue.size())));	
					monde.grille[cooX][cY].add(new Piege(monde,true,0,0,true,0,false,objet.getModele(),objet.getNom(),objet.getNomE(),"Piege",false,objet.getTileStr(),objet.getSonActivation()));
				}
				
				cY--;
			}
		}
		////////////Murs nord
		if(orient==1){
			
			cY=cooY-1;
			for(int y=0;y<range;y++){
				destructeurMurs(cooX-1,cY,monde.grille);
				monde.grille[cooX-1][cY].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
				
				if(y>0 && y<range-1){
					mursPOINTSList1Nord.add(new Point(cooX-1,cY));//**
				}
					
				
				
				cY--;
			}
		}
		if(orient==1){
			
			cY=cooY-1;
			for(int y=0;y<range;y++){
				destructeurMurs(cooX+1,cY,monde.grille);
				monde.grille[cooX+1][cY].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
				
				if(y>0 && y<range-1){
					mursPOINTSList2Nord.add(new Point(cooX+1,cY));//**
				}
				
				cY--;
			}
		}
		/////////////Porte au bout
		if(orient==1){
			
			if((int)(Math.abs(Math.random()*100))>30){
			
				boolean locked=false;
				if(((int)(Math.abs(Math.random()*100))+1)>65){
					locked=true;
				}
				
				boolean visible=false;
				if(((int)(Math.abs(Math.random()*100))+1)>25){
					visible=true;
				}
				
				
				
				//monde.grille[cooX][cooY-range].add(new Gate("Une porte",locked,(int)(Math.abs(Math.random()*150))+50,false,false,"standarddoor",visible,"./images/doors/door0.gif","./images/doors/openDoor0.gif",tileWall,"./sons/door_open.wav","./sons/door_close.wav"));
				monde.grille[cooX][cooY-range].add(new Gate("Une porte","A door",locked,rDiff(monde),false,false,"standarddoor",visible,"./images/doors/randomizer/type"+new Integer(indexTileMur).toString()+"closed.gif","./images/doors/randomizer/type"+new Integer(indexTileMur).toString()+"open.gif",tileWall,"./sons/door_open.wav","./sons/door_close.wav"));

				
				boutPt=new Point(cooX,cooY-range);
				
			}
			else{
				monde.grille[cooX][cooY-range].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
			}
		
		
		
		}
		
		
		
		
		
		
		
		
		
		
		
		
		///////////////SOL est///////////////////////////////////////////////////////////////
		if(orient==2){
			//Entite objet=new Entite();
			cX=cooX+1;
			for(int x=0;x<range;x++){
				destructeurMurs(cX,cooY,monde.grille);
				monde.grille[cX][cooY].add(new Surface(true,tileSol,2,true));
				
				if((int)(Math.abs(Math.random()*100)+1)>90){	
					objet= (Entite) cat.piegesCatalogue.get((int)(Math.abs(Math.random()*cat.piegesCatalogue.size())));	
					monde.grille[cX][cooY].add(new Piege(monde,true,0,0,true,0,false,objet.getModele(),objet.getNom(),objet.getNomE(),"Piege",false,objet.getTileStr(),objet.getSonActivation()));
				}
				
				
				cX++;
			}
		}
		////////////Murs est
		if(orient==2){
			
			cX=cooX+1;
			for(int x=0;x<range;x++){
				destructeurMurs(cX,cooY-1,monde.grille);
				monde.grille[cX][cooY-1].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
				
				if(x>0 && x<range-1){
					mursPOINTSList1Est.add(new Point(cX,cooY-1));//**
				}
				
				cX++;
			}
		}
		if(orient==2){
			
			cX=cooX+1;
			for(int x=0;x<range;x++){
				destructeurMurs(cX,cooY+1,monde.grille);
				monde.grille[cX][cooY+1].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
				
				if(x>0 && x<range-1){
					mursPOINTSList2Est.add(new Point(cX,cooY+1));//**
				}
				
				cX++;
			}
		}
		/////////////Porte au bout
		if(orient==2){
			if((int)(Math.abs(Math.random()*100))>30){
				boolean locked=false;
				if(((int)(Math.abs(Math.random()*100))+1)>65){
					locked=true;
				}
				
				boolean visible=false;
				if(((int)(Math.abs(Math.random()*100))+1)>25){
					visible=true;
				}
				//monde.grille[cooX+range][cooY].add(new Gate("Une porte",locked,(int)(Math.abs(Math.random()*150))+50,false,false,"standarddoor",visible,"./images/doors/door0.gif","./images/doors/openDoor0.gif",tileWall,"./sons/door_open.wav","./sons/door_close.wav"));
				monde.grille[cooX+range][cooY].add(new Gate("Une porte","A door",locked,rDiff(monde),false,false,"standarddoor",visible,"./images/doors/randomizer/type"+new Integer(indexTileMur).toString()+"closed.gif","./images/doors/randomizer/type"+new Integer(indexTileMur).toString()+"open.gif",tileWall,"./sons/door_open.wav","./sons/door_close.wav"));

				
				boutPt=new Point(cooX+range,cooY);
			}
			else{
				monde.grille[cooX+range][cooY].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
			}
		}
		
		
		
		
		
		
		
		
		
		
		
		
		
		///////////////SOL sud///////////////////////////////////////////////////////////////
		if(orient==3){
			//Entite objet=new Entite();
			cY=cooY+1;
			for(int y=0;y<range;y++){
				destructeurMurs(cooX,cY,monde.grille);
				monde.grille[cooX][cY].add(new Surface(true,tileSol,2,true));
				
				if((int)(Math.abs(Math.random()*100)+1)>90){	
					objet= (Entite) cat.piegesCatalogue.get((int)(Math.abs(Math.random()*cat.piegesCatalogue.size())));	
					monde.grille[cooX][cY].add(new Piege(monde,true,0,0,true,0,false,objet.getModele(),objet.getNom(),objet.getNomE(),"Piege",false,objet.getTileStr(),objet.getSonActivation()));
				}
				
				
				cY++;
			}
		}
		////////////Murs sud
		if(orient==3){
			
			cY=cooY+1;
			for(int y=0;y<range;y++){
				destructeurMurs(cooX-1,cY,monde.grille);
				monde.grille[cooX-1][cY].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
				
				if(y>0 && y<range-1){
					mursPOINTSList1Sud.add(new Point(cooX-1,cY));//**
				}
				
				cY++;
			}
		}
		if(orient==3){
			
			cY=cooY+1;
			for(int y=0;y<range;y++){
				destructeurMurs(cooX+1,cY,monde.grille);
				monde.grille[cooX+1][cY].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
				
				if(y>0 && y<range-1){
					mursPOINTSList2Sud.add(new Point(cooX+1,cY));//**
				}
				
				cY++;
			}
		}
		/////////////Porte au bout
		if(orient==3){
			if((int)(Math.abs(Math.random()*100))>30){
				boolean locked=false;
				if(((int)(Math.abs(Math.random()*100))+1)>65){
					locked=true;
				}
				
				boolean visible=false;
				if(((int)(Math.abs(Math.random()*100))+1)>25){
					visible=true;
				}
				//monde.grille[cooX][cooY+range].add(new Gate("Une porte",locked,(int)(Math.abs(Math.random()*150))+50,false,false,"standarddoor",visible,"./images/doors/door0.gif","./images/doors/openDoor0.gif",tileWall,"./sons/door_open.wav","./sons/door_close.wav"));
				monde.grille[cooX][cooY+range].add(new Gate("Une porte","A door",locked,rDiff(monde),false,false,"standarddoor",visible,"./images/doors/randomizer/type"+new Integer(indexTileMur).toString()+"closed.gif","./images/doors/randomizer/type"+new Integer(indexTileMur).toString()+"open.gif",tileWall,"./sons/door_open.wav","./sons/door_close.wav"));

				boutPt=new Point(cooX,cooY+range);
			}
			else{
				monde.grille[cooX][cooY+range].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
			}
		}
		
		
		
		
		
		
		
		
		
		
		
		
		///////////////SOL ouest///////////////////////////////////////////////////////////////
		if(orient==4){
			//Entite objet=new Entite();
			cX=cooX-1;
			for(int x=0;x<range;x++){
				destructeurMurs(cX,cooY,monde.grille);
				monde.grille[cX][cooY].add(new Surface(true,tileSol,2,true));
				
				if((int)(Math.abs(Math.random()*100)+1)>90){	
					objet= (Entite) cat.piegesCatalogue.get((int)(Math.abs(Math.random()*cat.piegesCatalogue.size())));	
					monde.grille[cX][cooY].add(new Piege(monde,true,0,0,true,0,false,objet.getModele(),objet.getNom(),objet.getNomE(),"Piege",false,objet.getTileStr(),objet.getSonActivation()));
				}
				
				cX--;
			}
		}
		////////////Murs ouest
		if(orient==4){
			
			cX=cooX-1;
			for(int x=0;x<range;x++){
				destructeurMurs(cX,cooY-1,monde.grille);
				monde.grille[cX][cooY-1].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
				
				if(x>0 && x<range-1){
					mursPOINTSList1Ouest.add(new Point(cX,cooY-1));//**
				}
				
				cX--;
			}
		}
		if(orient==4){
			
			cX=cooX-1;
			for(int x=0;x<range;x++){
				
				monde.grille[cX][cooY+1].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
				
				if(x>0 && x<range-1){
					mursPOINTSList2Ouest.add(new Point(cX,cooY+1));//**
				}
				
				cX--;
			}
		}
		/////////////Porte au bout
		if(orient==4){
			if((int)(Math.abs(Math.random()*100))>30){
				boolean locked=false;
				if(((int)(Math.abs(Math.random()*100))+1)>65){
					locked=true;
				}
				
				boolean visible=false;
				if(((int)(Math.abs(Math.random()*100))+1)>25){
					visible=true;
				}
				//monde.grille[cooX-range][cooY].add(new Gate("Une porte",locked,(int)(Math.abs(Math.random()*150))+50,false,false,"standarddoor",visible,"./images/doors/door0.gif","./images/doors/openDoor0.gif",tileWall,"./sons/door_open.wav","./sons/door_close.wav"));
				monde.grille[cooX-range][cooY].add(new Gate("Une porte","A door",locked,rDiff(monde),false,false,"standarddoor",visible,"./images/doors/randomizer/type"+new Integer(indexTileMur).toString()+"closed.gif","./images/doors/randomizer/type"+new Integer(indexTileMur).toString()+"open.gif",tileWall,"./sons/door_open.wav","./sons/door_close.wav"));

				boutPt=new Point(cooX-range,cooY);
			}
			else{
				monde.grille[cooX-range][cooY].add(new Wall(false,"standardwall","Un mur","A wall","Obstacle",true,tileWall,"./images/walls/rocks.gif"));
			}
		}
		
		
		
		
		
		
		///////PLACEMENT OUVERTURES LATERALES
		/*
		for(j=0;j<mursPOINTSList1Nord.size();j++){
			murActuelPt=(Point)mursPOINTSList1Nord.get(j);
			if((int)((Math.random()*100)+1)>90){
				destructeurMurs((int)murActuelPt.getX(),(int)murActuelPt.getY(),monde.grille);
				ouverturePOINTSList1Nord.add(new Point((int)murActuelPt.getX(),(int)murActuelPt.getY()));
			}
		}
		
		for(j=0;j<mursPOINTSList2Nord.size();j++){
			murActuelPt=(Point)mursPOINTSList2Nord.get(j);
			if((int)((Math.random()*100)+1)>90){
				destructeurMurs((int)murActuelPt.getX(),(int)murActuelPt.getY(),monde.grille);
				ouverturePOINTSList2Nord.add(new Point((int)murActuelPt.getX(),(int)murActuelPt.getY()));
			}
		}
		
		for(j=0;j<mursPOINTSList1Sud.size();j++){
			murActuelPt=(Point)mursPOINTSList1Sud.get(j);
			if((int)((Math.random()*100)+1)>90){
				destructeurMurs((int)murActuelPt.getX(),(int)murActuelPt.getY(),monde.grille);
				ouverturePOINTSList1Sud.add(new Point((int)murActuelPt.getX(),(int)murActuelPt.getY()));
			}
		}
		
		for(j=0;j<mursPOINTSList2Sud.size();j++){
			murActuelPt=(Point)mursPOINTSList2Sud.get(j);
			if((int)((Math.random()*100)+1)>90){
				destructeurMurs((int)murActuelPt.getX(),(int)murActuelPt.getY(),monde.grille);
				ouverturePOINTSList2Sud.add(new Point((int)murActuelPt.getX(),(int)murActuelPt.getY()));
			}
		}
		
		for(j=0;j<mursPOINTSList1Est.size();j++){
			murActuelPt=(Point)mursPOINTSList1Est.get(j);
			if((int)((Math.random()*100)+1)>90){
				destructeurMurs((int)murActuelPt.getX(),(int)murActuelPt.getY(),monde.grille);
				ouverturePOINTSList1Est.add(new Point((int)murActuelPt.getX(),(int)murActuelPt.getY()));
			}
		}
		
		for(j=0;j<mursPOINTSList2Est.size();j++){
			murActuelPt=(Point)mursPOINTSList2Est.get(j);
			if((int)((Math.random()*100)+1)>90){
				destructeurMurs((int)murActuelPt.getX(),(int)murActuelPt.getY(),monde.grille);
				ouverturePOINTSList2Est.add(new Point((int)murActuelPt.getX(),(int)murActuelPt.getY()));
			}
		}
		
		for(j=0;j<mursPOINTSList1Ouest.size();j++){
			murActuelPt=(Point)mursPOINTSList1Ouest.get(j);
			if((int)((Math.random()*100)+1)>90){
				destructeurMurs((int)murActuelPt.getX(),(int)murActuelPt.getY(),monde.grille);
				ouverturePOINTSList1Ouest.add(new Point((int)murActuelPt.getX(),(int)murActuelPt.getY()));
			}
		}
		
		for(j=0;j<mursPOINTSList2Ouest.size();j++){
			murActuelPt=(Point)mursPOINTSList2Ouest.get(j);
			if((int)((Math.random()*100)+1)>90){
				destructeurMurs((int)murActuelPt.getX(),(int)murActuelPt.getY(),monde.grille);
				ouverturePOINTSList2Ouest.add(new Point((int)murActuelPt.getX(),(int)murActuelPt.getY()));
			}
		}
		*/
		
		
		////PLACEMENT DE COULOIRS AUX OUVERTURES LATERALES
		
		
		
		
		
		////EVENTUEL PLACEMENT DE PORTES AUX OUVERTURES LATERALES
		
		
		
		
		
		
		
		
		
		/////////////////////////////////////////////////////////////////////////////////////////////
	
		/////////////////////////////////////////////////////////////////////////////////////////////
		//////////ROOM//////////////C'est ici que l'on verifie s'il y a la place pour en mettre une
		//new RoomAlea(this,"standardwall",perso.getCooX()-3,perso.getCooY()-3,(int)(Math.abs(Math.random()*8))+4,(int)(Math.abs(Math.random()*8))+4);
		//public RoomAlea(Monde monde,String modelWall,int coorX,int coorY,int etendueX,int etendueY){
		///////////////////////
		//////////PIECE DE BOUT DE COULOIR/////////////////////
		
		////Il faut aussi vérifier s'il n'y a pas de piece, obstacle, etc en travers
		
		
		if(boutPt.getX()!=0 && boutPt.getY()!=0){
			int insertX=(int)boutPt.getX();
			int insertY=(int)boutPt.getY();
			int distanceAuBordYNord=insertY-11;
			int distanceAuBordYSud=(monde.tailleGrille-11)-insertY;
			int distanceAuBordXEst=(monde.tailleGrille-11)-insertX;
			int distanceAuBordXOuest=insertX-11;
			
		
			if(orient==1){
				int rangeX=((int)(Math.abs(Math.random()*8))+3);
				int rangeY=((int)(Math.abs(Math.random()*8))+3);
				int X=	insertX-rangeX;
				int Y=	insertY-rangeY-1;
				
				
				if(rangeX<distanceAuBordXEst && rangeY <distanceAuBordYNord){
				
					if(!chercheObstacle(insertX,insertY,1,rangeX,rangeY,monde.grille)){
					
						new RoomAlea(cat,3,insertX,insertY,monde,"standardwall",X,Y,rangeX,rangeY);
						System.out.println("NEW ROOM NORD");
					}
				}
			
			}
			
			if(orient==2){
				int rangeX=((int)(Math.abs(Math.random()*8))+3);
				int rangeY=((int)(Math.abs(Math.random()*8))+3);
				int X=	insertX;
				int Y=	insertY-1;
				
				
				if(rangeX<distanceAuBordXEst && rangeY <distanceAuBordYSud){
					if(!chercheObstacle(insertX,insertY,2,rangeX,rangeY,monde.grille)){
						new RoomAlea(cat,4,insertX,insertY,monde,"standardwall",X,Y,rangeX,rangeY);
						System.out.println("NEW ROOM EST");
					}
				}
			
			}
			
			
			if(orient==3){
				int rangeX=((int)(Math.abs(Math.random()*8))+3);
				int rangeY=((int)(Math.abs(Math.random()*8))+3);
				int X=	insertX-1;
				int Y=	insertY;
				
				
				if(rangeX<distanceAuBordXEst && rangeY <distanceAuBordYSud){
					if(!chercheObstacle(insertX,insertY,3,rangeX,rangeY,monde.grille)){
						new RoomAlea(cat,1,insertX,insertY,monde,"standardwall",X,Y,rangeX,rangeY);
						System.out.println("NEW ROOM SUD");
					}
				}
			
			}
		
			
			if(orient==4){
				int rangeX=((int)(Math.abs(Math.random()*8))+3);
				int rangeY=((int)(Math.abs(Math.random()*8))+3);
				int X=	insertX-rangeX-1;
				int Y=	insertY-rangeY;
				
				
				if(rangeX<distanceAuBordXOuest && rangeY <distanceAuBordYSud){
					if(!chercheObstacle(insertX,insertY,4,rangeX,rangeY,monde.grille)){
						new RoomAlea(cat,2,insertX,insertY,monde,"standardwall",X,Y,rangeX,rangeY);
						System.out.println("NEW ROOM OUEST");
					}
				}
			
			}
			
			
			
		
		
		
		}			
	
	
	
	
	
		
			
	}
	
	
	
	
	
	
	
	public void destructeurMurs(int x,int y,ArrayList grille[][]){
			
		//Entite objet=new Entite();
		
		for(int i=0;i<grille[x][y].size();i++){	
			try{	
				objet = (Entite)grille[x][y].get(i);		
			
				if(objet.getTypeObjet().compareTo("Obstacle")==0) {
					grille[x][y].remove(objet);
					
				}		
			}
			catch(NoSuchElementException exc){};
		}
			
		
		
		
	}
	
	
	
	
	
	
	
	public boolean chercheObstacle(int ox,int oy,int direction,int rangeX,int rangeY,ArrayList grille[][]){
		boolean p=false;
		
		
		if(direction==1){
			//Entite objet=new Entite();
			for(int x=ox-rangeX+2;x<ox+rangeX-1;x++){
				for(int y=oy-rangeY;y<oy;y++){
					for(int i=0;i<grille[x][y].size();i++){	
					try{	
						objet = (Entite)grille[x][y].get(i);		
						
						
						if(objet.getClass().getName().compareTo("Surface")==0) {
							p=true;
						}
						
								
					}
					catch(NoSuchElementException exc){};
					}
				}
			}
		}	
			
		if(direction==2){
			//Entite objet=new Entite();
			for(int x=ox+1;x<ox+rangeX+1;x++){
				for(int y=oy-rangeY+2;y<oy+rangeY-1;y++){
					for(int i=0;i<grille[x][y].size();i++){	
					try{	
						objet = (Entite)grille[x][y].get(i);		
						
						if(objet.getClass().getName().compareTo("Surface")==0) {
							
							p=true;
						}		
					}
					catch(NoSuchElementException exc){};
					}
				}
			}
		}
		
		if(direction==3){
			//Entite objet=new Entite();
			for(int x=ox-1;x<ox+rangeX-1;x++){
				for(int y=oy+1;y<oy+rangeY+1;y++){
					for(int i=0;i<grille[x][y].size();i++){	
					try{	
						objet = (Entite)grille[x][y].get(i);		
						
						if(objet.getClass().getName().compareTo("Surface")==0) {
							
							p=true;
						}		
					}
					catch(NoSuchElementException exc){};
					}
					
				}
			}
		}
		
		if(direction==4){
			//Entite objet=new Entite();
			for(int x=ox-rangeX;x<ox;x++){
				for(int y=oy-rangeY+2;y<oy+rangeY-1;y++){
					for(int i=0;i<grille[x][y].size();i++){	
					try{	
						objet = (Entite)grille[x][y].get(i);		
						//System.out.println("analyse en "+x+" "+y+" rangeX "+rangeX+" rangeY "+rangeY);
						
						
						if(objet.getClass().getName().compareTo("Surface")==0) {
							//System.out.println("surface en "+x+" "+y+" rangeX "+rangeX+" rangeY "+rangeY);
							
							p=true;
						}		
					}
					catch(NoSuchElementException exc){};
					}
				}
			}
		}
		
		return p;	
	}
	
	
	public int rDiff(Monde monde){
		
		return (int)(Math.random()*monde.ipp()*20)+1;
		
	}
	
	public int rBonus(Monde monde){
		return (int)(Math.random()*(monde.ipp()-3))+1;
	}
	
}