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

Soyez le premier à donner votre avis sur cette source.

Vue 12 343 fois - Téléchargée 1 216 fois

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

Ajouter un commentaire

Commentaires

Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
11
non lol c'est une proposition d'optimisation :p

fais au moins le if(c[alea]) apres le switch case comme tu veux ... c'est plus clair les if else ...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
35
euh... aucune idée... en perl, les switchs n'existent pas, et en php, ils sont super lents... un simple réflex...

C'était mon premier applet en java, et il n'est pas trop trop lent si ?
Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
11
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]){


....

pourquoi tu ne fais pas un if( c[alea]) { ...
et apres tu fais un switch sur alea ..

je pense que ca iras beaucoup plus vvite non?

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.