Un applet générateur de labyrinthes aléatoires

Description

cet applet génère un labyrinthe aléatoire de dimention n (n étant un paramètre)

Source / Exemple :


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

public class applet extends Applet
{
	private void param(){
		borderY=30;
		borderX=10;
		sizeX=getSize().width;
		sizeY=getSize().height;
		scaleX=(sizeX-borderX*2)/(size+1);
		scaleY=(sizeY-borderY*2)/(size+1);
	}
	public void paint(Graphics gr){

		param();

		gr.setColor(Color.black);

		gr.fillRect(0,0,sizeX,sizeY);
		gr.setColor(Color.white);
		gr.fillRect(borderX,borderY,sizeX-2*borderX,sizeY-2*borderY);

		gr.setColor(Color.black);

		int i, j;
		for (i=0;i<size;i++){
			for (j=0;j<size;j++){
				if (!h[i][j])
					gr.drawLine(borderX+(j+1)*scaleX, borderY+(i+1)*scaleY,
						borderX+(j+1)*scaleX, borderY+(i)*scaleY);
				if (!v[i][j])
					gr.drawLine(borderX+(j+1)*scaleX, borderY+(i+1)*scaleY,
						borderX+(j)*scaleX, borderY+(i+1)*scaleY);
			}
		}
		gr.setColor(Color.white);
		gr.drawString(sizeStr , 20,20);
		gr.drawString("(c)opyleft (Maxime Audouin : coucou747@hotmail.com) http://coucou747.hopto.org",
			5,sizeY-borderY/2);

	}
	public void init(){
		if (applet)
			sizeStr=getParameter("size");
		else
			sizeStr="10";
		try {
			size=new Integer(sizeStr).intValue();
		}catch (NumberFormatException e) {
			size=10;
		}
		sizeStr="labyrinthe de "+sizeStr+" * "+sizeStr;
		aleatoire=new Random();
		int i, j;
		v=new boolean[size][size];
		h=new boolean[size][size];
		a=new boolean[size][size];
		for (i=0;i<size;i++){
			for (j=0;j<size;j++){
				h[i][j]=false;
				v[i][j]=false;
				a[i][j]=false;
			}
		}
		for (i=0;i<size;i++){
			v[i][0]=true;
			h[0][i]=true;
		}
		gen(1, 1);
	}
	public void affconsole(){
		int i, j;
		for (i=0;i<size;i++){
			for (j=0;j<size;j++){
				if (!v[i][j] && !h[i][j])
					System.out.print("_|");
				else if (!v[i][j] && h[i][j])
					System.out.print("__");
				else if (v[i][j] && !h[i][j])
					System.out.print(" |");
				else if (v[i][j] && h[i][j])
					System.out.print("  ");
			}
			System.out.print("\n");
		}
		System.out.print("\n\n");
	}
	public void gen(int x, int y){
		a[x][y]=true;
		int d=4;
		int alea, x1, y1;
		boolean c[]={true, true, true, true};
		while (d>0){
			alea=aleatoire.nextInt(4);
			if (alea==0 && c[alea]){
				d--;
				x1=x+1;
				y1=y;
				if (x1!=size){
					if (!a[x1][y1]){
						v[x][y]=true;
						gen(x1, y1);
					}
				}
			}else if (alea==1 && c[alea]){
				d--;
				x1=x-1;
				y1=y;
				if (x1!=0){
					if (!a[x1][y1]){
						v[x1][y]=true;
						gen(x1, y1);
					}
				}
			}else if (alea==2 && c[alea]){
				d--;
				x1=x;
				y1=y+1;
				if (y1!=size){
					if (!a[x1][y1]){
						h[x][y]=true;
						gen(x1, y1);
					}
				}
			}else if (alea==3 && c[alea]){
				d--;
				x1=x;
				y1=y-1;
				if (y1!=0){
					if (!a[x1][y1]){
						h[x1][y1]=true;
						gen(x1, y1);
					}
				}
			}
			c[alea]=false;
		}
	}
	public void setsize(int s){
		size=s;
	}
	static public void main(String params[]){
		applet a=new applet();
		a.setsize(20);
		a.applet=false;
		a.init();
		a.affconsole();
	}
	private Random aleatoire;
	public boolean applet=true;
	private int gen;
	private boolean v[][];
	private boolean h[][];
	private boolean a[][];
	private int size;
	private int scaleY, scaleX, sizeX, sizeY, borderY, borderX;
	private String sizeStr;
}

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.