Bonjour boujour

D'abord je pensais faire le labyrithe manuellement, mais je me suis dit.. Tentons de le générer.
Je suis parfaitement au courant de n'être vraiment pas du tout à la hauteur d'un tel travail, mais je souhaitais essayer quand même.
J'avais vraiment l'impression de connaître les étapes de génération de ce labyrinte, et j'ai déjà pas mal travaillé avec les tableaux... (bon apparement c'est toujours pas assez quand même) mais allons y

Je vous explique comment je réfléchis.

J'ai fait un tableau rempli de 1. (je l'ai appelé cadre, le labyrinthe quoi)
dernierPointX et dernierPointY, c'est un peu la "trace" de la dernière case que j'ai creusé. Je les ai initialisé à 1 chaqun.
J'analyse les directions disponibles, et si elles le sont, je les déclare ainsi : northAccept = true;
Ensuite je dois décider aléatoirement parmis les directions disponibles, laquelle est la bonne. (la fonction choixDirection()) :
choixDirection() fonctionne ainsi : générer un nombre entre 0 et 3; admettons que ce soit 0 (correspond au nord), si northAccept = true, faire une instruction... / si c'est égal à false, continuer la boucle avec une autre direction.
... cette instruction se sert de dernierPointX et -Y, du coup si je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
cadre [dernierPointX] [dernierPointY + 1] = 0;
je crois que je creuse la case qui regarde vers le nord.

Passons aux choses serieuses, si vous pouviez déjà me dire ce que je peux améliorer dans ce code, j'adorerais

Ce qui pose problème maintenant (selon mon débuggage), c'est cette partie là.

J'analyse les directions disponibles, et si elles le sont, je les déclare ainsi : northAccept = true;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package ch.mathias.laby;
 
import java.util.Random;
 
public class Algorithme {
 
	public static int HAUTEURCADRE = 16;
	public static int LONGUEURCADRE = 39;
 
	public static byte[][] cadre = new byte [HAUTEURCADRE][LONGUEURCADRE];
 
	/*
	 * accept =  est-ce que la direction est validée?
	 */
 
	static boolean northAccept = false;
	static boolean eastAccept = false;
	static boolean southAccept = false;
	static boolean westAccept = false;
 
	static int girouette;
	static int dernierPointX = 1;
	static int dernierPointY = 1;
 
	static Random rand = new Random();
 
	static void choixDirection() {
 
		try {
 
			choix:
				while(true) {
 
					girouette = rand.nextInt(4);
 
					switch(girouette) {
 
					case 0:
 
						if(northAccept) {
 
							cadre [dernierPointX] [dernierPointY + 1] = 0;
							dernierPointX += 1;
							dernierPointY += 1;
							break choix;
						}
 
						break;
 
					case 1:
 
						if(eastAccept) {
 
							cadre [dernierPointX + 1] [dernierPointY] = 0;
							dernierPointX += 1;
							dernierPointY += 1;
							break choix;
 
						}
 
						break;
 
					case 2:
 
						if(southAccept) {
 
							cadre [dernierPointX] [dernierPointY - 1] = 0;
							dernierPointX += 1;
							dernierPointY += 1;
							break choix;
 
						}
 
						break;
 
					case 3:
 
						if(westAccept) {
 
							cadre [dernierPointX + 1] [dernierPointY] = 0;
							dernierPointX += 1;
							dernierPointY += 1;
							break choix;
 
						}
 
						break;
 
					}
 
				}	
 
			} catch(ArrayIndexOutOfBoundsException e) { }
 
		}
 
	public static void génération() {
 
 		for(int i = 0, j = 0; i < HAUTEURCADRE && j < LONGUEURCADRE; i++, j++) {
 
			try {
 
				System.out.print("N : " + northAccept);//est executé
				System.out.print(", E : " + eastAccept);//est executé
				System.out.print(", S : " + southAccept);//est executé
				System.out.println(", O : " + westAccept);//est executé
 
				if(cadre[dernierPointX][dernierPointY + 2] != 0) northAccept = true;//n'est pas executé
 
				if(cadre[dernierPointX + 2][dernierPointY] != 0) eastAccept = true;//n'est pas executé
 
				if(cadre[dernierPointX][dernierPointY - 2] != 0) southAccept = true;//n'est pas executé
 
				if(cadre[dernierPointX - 2][dernierPointY] != 0) westAccept = true;//n'est pas executé
 
				System.out.print("N : " + northAccept); //n'est pas executé
				System.out.print(", E : " + eastAccept);//n'est pas executé
				System.out.print(", S : " + southAccept);//n'est pas executé
				System.out.println(", O : " + westAccept);//n'est pas executé
 
				/*
				 * ->>c'est extrêment bizarre cette parie car il n'y a qu'une partie de la boucle qui est executée
				 */
 
				choixDirection();//n'est pas executé
 
			} catch(ArrayIndexOutOfBoundsException e) { }
 
		}
 
	}
 
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package ch.mathias.laby;
 
public class GoblinsChart {
 
	public static void main(String[] args) {
 
		for(int i = 0; i < Algorithme.HAUTEURCADRE; i++) {
 
			for(int j = 0; j < Algorithme.LONGUEURCADRE; j++) {
 
				Algorithme.cadre[i][j] = 1;
 
			}
 
		}
 
		Algorithme.génération();
 
		for(int i = 0; i < Algorithme.HAUTEURCADRE; i++) {
 
			for(int j = 0; j < Algorithme.LONGUEURCADRE; j++) {
 
			if(Algorithme.cadre[i][j] == 1) System.out.print("[]");
 
			else System.out.print("  ");
 
			}
 
			System.out.println();
 
		}
 
	}
 
}