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
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;
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) { }
}
}
} |
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();
}
}
} |
Partager