Aller au menu - Aller au contenu
Inscris-toi au e-camp "Héberge ton jeu Facebook sur Azure" de Microsoft vendredi 25 mai à 13h30 !

YMaze

Par yaurthek

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne Zozor # Posté le 30/11/2008 à 17:39:44
Hiii Haaan !
Avatar
Groupe : Mascotte

Illustration

Langage de programmation : Vb.Net (.Net framework)
Pour l'instant mon programme ne fonctionne que sous Windows mais je l'adapterai peut-être pour Linux avec mono.
Apparemment, l'application fonctionne aussi avec mono sans recompilation !(testé sur openSUSE et mono 2)

Aperçu du programme (très grande image 381ko), ou encore Image plus récente (solutions arrondies)

Voici donc un résumé des fonctions du programme :
  • Génération de labyrinthes rectangulaires (bien optimisé : génération d'un labyrinthe de 250 000 cases en moins de 5 secondes sur un core 2 duo E5500...bon c'est pas du c++ hein !)
  • Génération de labyrinthes circulaires (plus qu'une simple représentation des labyrinthes rectangulaires : les cases aux extrémités correspondent)
  • Gère la création de labyrinthes de plusieurs millions de cases
  • Sauvegarde des labyrinthes en plusieurs formats d'image (gif, png, jpg, bmp)
  • Sauvegarde des labyrinthes dans un format perso .ymz
  • Chargement des labyrinthes au format .ymz
  • réglage de la taille des labyrinthes (longueur, largeur, épaisseur des murs, taille des cases...)
  • Réglages des couleurs (fond, murs, départ, arrivée...)
  • Mode pas à pas (création en temps réel du labyrinthe) pour les labyrinthes rectangulaires
  • Calcul et dessin des labyrinthes séparés
  • Résolution des labyrinthes (circulaires et rectangulaires) et tracé de la solution(circulaire et rectangulaire)
  • Fonction de transformation d'un labyrinthe parfait normal en labyrinthe à un seul couloir ("unicursal") http://www.astrolog.org/labyrnth/maze/unicursl.gif
  • Édition manuelle des labyrinthes
  • Possibilité de jouer dans les labyrinthes rectangulaires
  • Possibilité de choisir une image personnalisée pour jouer


La génération et le dessin des labyrinthes rectangulaires et circulaires est au point (mais continue à être améliorée :) )
Je cherche maintenant à implémenter de nouveaux algorithmes, à améliorer le dessin (textures...) et peut-être à intégrer la possibilité de jouer au labyrinthes circulaires.

Vous pouvez tester le programme ici : http://yaurthek.free.fr/Autre/YMaze/?q=YMaze.exe (si vous avez une erreur, installez le .Net framework disponible ici)
n'hésitez pas à signaler un bug ;) (mp, commentaires...)
Publicité # Posté le 30/11/2008 à 17:39:44

Hors ligne Nanoc # Posté le 01/12/2008 à 00:02:35
Aimez-vous le C++ ?
Avatar
Validateurs

Ville : Durham
Pays : Royaume-Uni
Études : EPFL

Joli programme. Quel algorithme utilises-tu pour générer les labyrinthes rectangulaires ?
 
Connecté Cortexd # Posté le 01/12/2008 à 00:58:52
I drink your milkshake!
Avatar

Ville : Vauréal
Pays : France métropolitaine

c'est quoi le format de tes fichiers .YMZ ? c'est pour essayer de faire un lecteur/enregistreur supplémentaire dans mon programme :p

« Chaque chevalier parle de ses armes. »
Image utilisateur Arrêt sur image
 
Hors ligne yaurthek # Posté le 01/12/2008 à 22:32:39

Avatar

Ville : Bron
Pays : France métropolitaine
Études : SUPINFO Rhône-Alpes à Lyon

Tout d'abord, merci de votre intérêt ;)
Pour les labyrinthes rectangulaires, j'utilise la méthode de l'exploration exhaustive (et pareil pour les circulaires d'ailleurs... :p )
J'implémenterai peut-être celle de la fusion aléatoire si les résultats sont vraiment différents, ou une autre méthode si je suis motivé :-°

Pour le format de mes fichiers, c'est tout simplement un fichier en mode texte de la forme suivante :
Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"V" + version + date
"*Arcane Sanctum Creation*|" + Circulaire ou rectangulaire (en fait, ça ne change rien, c'est juste une info pour plus tard peut être...)
(en fait, l'en-tête ne sert pas dans le chargement du labyrinthe, elle contient seulement différentes infos...)
"----------" + nombre total de cases + ":" + largeur + ";" + longueur + "----------"
">" + est + ";" + nord + ";" + ouest + ";" + sud + ";" + visité (pour les murs, 0 = mur fermé, 1 = mur ouvert, et pour "visité" c'est une info qui ne sert à rien, qu'il faudra que j'enlève :D (reste des essais...))
"saut de ligne"

l'ordre est le suivant (coordonnées x;y) :
(0;0)
(0;1)
(0;2)
(1;0)
(1;1)
(1;2)
(2;0)
(2;1)
(2;2)


Exemple de fichier généré pour un labyrinthe de 5 cases sur 5 :
Code : Autre
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
V 1.1 1/12/2008 22:17
*Arcane Sanctum Creation*|Rectangulaire
----------25:5;5----------
>1;0;0;0;1
>0;1;0;0;1
>0;1;0;0;1
>0;1;0;0;1
>1;0;0;0;1
>0;0;0;1;1
>1;0;0;0;1
>0;1;0;0;1
>0;0;1;0;1
>0;1;0;0;1
>1;0;0;0;1
>0;1;0;0;1
>0;0;1;0;1
>0;0;0;1;1
>0;0;1;0;1
>0;0;0;1;1
>1;0;0;0;1
>0;0;1;0;1
>0;0;1;0;1
>1;0;0;0;1
>0;0;1;0;1
>0;0;0;1;1
>0;0;0;1;1
>0;0;1;0;1
>0;1;0;0;1


Et pour finir si le Vb.Net te dis quelque chose, voici le code que j'utilise pour l'instant (je ferais peut-être des changements minimes)
Code : VB.NET
 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
''' <summary>
    ''' Sauvegarde un labyrinthe au format YMZ
    ''' </summary>
    ''' <param name="Labyrinthe">Labyrinthe à sauvegarder</param>
    ''' <param name="path">Chemin de sauvegarde</param>
    ''' <remarks></remarks>
    Friend Shared Sub SaveYMZ(ByVal Labyrinthe As cellule(,), ByVal path As String, Optional ByVal circulaire As Boolean = False)
        'string builder = beaucoup plus rapide pour des gros labyrinthes
        Dim result As New System.Text.StringBuilder
        If circulaire = True Then
            result.Append("V " & mainForm.VERSION & " " & Now.Day & "/" & Now.Month & "/" & Now.Year & " " & Now.Hour & ":" & Now.Minute & Environment.NewLine & "*Arcane Sanctum Creation*" & "|Circulaire" & Environment.NewLine & "----------" & Labyrinthe.Length & ":" & Labyrinthe.GetLength(0) & ";" & Labyrinthe.GetLength(1) & "----------" & Environment.NewLine)
        Else
            result.Append("V " & mainForm.VERSION & " " & Now.Day & "/" & Now.Month & "/" & Now.Year & " " & Now.Hour & ":" & Now.Minute & Environment.NewLine & "*Arcane Sanctum Creation*" & "|Rectangulaire" & Environment.NewLine & "----------" & Labyrinthe.Length & ":" & Labyrinthe.GetLength(0) & ";" & Labyrinthe.GetLength(1) & "----------" & Environment.NewLine)
        End If
        For x As Integer = 0 To Labyrinthe.GetLength(0) - 1
            For y As Integer = 0 To Labyrinthe.GetLength(1) - 1
                result.Append(">" & If(Labyrinthe(x, y).est, 1, 0) & ";" & If(Labyrinthe(x, y).nord, 1, 0) & ";" & If(Labyrinthe(x, y).ouest, 1, 0) & ";" & If(Labyrinthe(x, y).sud, 1, 0) & ";" & If(Labyrinthe(x, y).Visite, 1, 0) & Environment.NewLine)
            Next
        Next
        IO.File.WriteAllText(path, result.ToString)
        result = Nothing
    End Sub

    ''' <summary>
    ''' Charge un labyrinthe au format YMZ
    ''' </summary>
    ''' <param name="path">Chemin du fichier à charger</param>
    ''' <returns>Retourne le labyrinthe sous forme de tableau de cellules</returns>
    ''' <remarks></remarks>
    Friend Shared Function LoadYMZ(ByVal path As String) As cellule(,)
        'ouvre le fichier en mode texte
        Dim brut As String = IO.File.ReadAllText(path)
        'split du fichier d'après différents repères (assez lent pour le split3 si les fichiers sont gros)
        Dim tmpSplit1 As String() = Split(brut, "----------")
        Dim tmpSplit3 As String() = Split(tmpSplit1(2).Trim(Environment.NewLine), ">")
        Dim tmp1 As Integer = CInt(Split(Split(tmpSplit1(1), ":")(1), ";")(0))
        Dim tmp2 As Integer = CInt(Split(Split(tmpSplit1(1), ":")(1), ";")(1))
        Dim result(tmp1 - 1, tmp2 - 1) As cellule
        Dim i As Integer = 1 'car premier element tmpSplit3 non valide : saut de ligne
        For x As Integer = 0 To tmp1 - 1
            For y As Integer = 0 To tmp2 - 1
                Dim tmpTrimed As String = tmpSplit3(i).Trim(Environment.NewLine)
                result(x, y).est = Split(tmpTrimed, ";")(0)
                result(x, y).nord = Split(tmpTrimed, ";")(1)
                result(x, y).ouest = Split(tmpTrimed, ";")(2)
                result(x, y).sud = Split(tmpTrimed, ";")(3)
                result(x, y).Visite = Split(tmpTrimed, ";")(4)
                i += 1
            Next
        Next
        Return result
        result = Nothing
    End Function


Ps: vous dormez quand vous ? o_O

Internet : le seul endroit où deux accents circonflexes veulent dire quelque chose

http://arcanesanctum.net
 
Connecté Cortexd # Posté le 01/12/2008 à 23:45:00
I drink your milkshake!
Avatar

Ville : Vauréal
Pays : France métropolitaine

j'aurais quelques questions :p
déjà est-ce normal qu'il n'y est pas d'informations sur les cases de départ et d'arrivée ?
le nombre total de cases est redondant non ? puisqu'on peut l'obtenir en faisant le produit de la longueur et de la largeur
et sinon en prenant la première case de ton labyrinthe 5x5 il y a quelque chose que je ne comprends pas
elle est décrite comme ceci :
Code : Autre
1
>1;0;0;0;1

ce qui veut dire que cette première case (située en haut à gauche) n'a pas de mur au nord et à l'ouest?
en plus elle n'en a pas non plus au sud mais la case d'en dessous en a un au nord o_O

« Chaque chevalier parle de ses armes. »
Image utilisateur Arrêt sur image
 
Hors ligne yaurthek # Posté le 02/12/2008 à 06:58:11

Avatar

Ville : Bron
Pays : France métropolitaine
Études : SUPINFO Rhône-Alpes à Lyon

Citation : Cortexd
déjà est-ce normal qu'il n'y est pas d'informations sur les cases de départ et d'arrivée ?

Oui car comme c'est un labyrinthe parfait on peut les mettre là ou on veut, je les ai donc fixés : une en haut à gauche, l'autre en bas à droite
mais je mettrai peut-être la possibilité de le changer, et de le sauvegarder dans les fichiers (je sais pas encore comment, pas le temps pour l'instant)

Citation : Cortexd
le nombre total de cases est redondant non ?

Oui effectivement :D comme je l'ai déja dit, ce sont des restes de mes tests, mais bon on va pas chipoter pour quelques caractères de plus ^^

Code : Autre
1
>1;0;0;0;1

Tout est normal en fait : l'ordre n'est pas très logique (je les ai ajouté par ordre alphabétique :lol: , ordre de mon enum...)

Code : Autre
1
">" + est + ";" + nord + ";" + ouest + ";" + sud + ";" + visité

Donc il n'y a pas de murs au nord ni à l'ouest, mai seulement un à l'est ;)


EDIT : je dis n'importe quoi :-° , voir mon message suivant...
Édité le 02/12/2008 à 19:30:20 par yaurthek

Internet : le seul endroit où deux accents circonflexes veulent dire quelque chose

http://arcanesanctum.net
 
Connecté Cortexd # Posté le 02/12/2008 à 13:14:01
I drink your milkshake!
Avatar

Ville : Vauréal
Pays : France métropolitaine

Citation : yaurthek
Donc il n'y a pas de murs au nord ni à l'ouest, mai seulement un à l'est ;)

oui c'est bien ce que je disais ! :p
mais la première case se trouvant en haut à gauche du labyrinthe, elle a forcement un mur à l'ouest et au nord non ?
Édité le 02/12/2008 à 13:22:31 par Cortexd

« Chaque chevalier parle de ses armes. »
Image utilisateur Arrêt sur image
 
Hors ligne yaurthek # Posté le 02/12/2008 à 19:17:24

Avatar

Ville : Bron
Pays : France métropolitaine
Études : SUPINFO Rhône-Alpes à Lyon

o_O :( :( :euh:
Je devais encore être endormi quand j'ai écris mon message.. :p
En fait j'ai dit n'importe quoi... les 1 indiquent les trous, et les 0 un mur...
DONC, tout est normal :p

Voila voila...

Internet : le seul endroit où deux accents circonflexes veulent dire quelque chose

http://arcanesanctum.net
 
Connecté Cortexd # Posté le 02/12/2008 à 21:24:05
I drink your milkshake!
Avatar

Ville : Vauréal
Pays : France métropolitaine

ok c'est un peu mieux, mais il y a encore un problème :p
la première case a un mur au sud mais celle d'en dessous n'en a pas au nord, donc ça communique pas !
Édité le 02/12/2008 à 21:24:45 par Cortexd

« Chaque chevalier parle de ses armes. »
Image utilisateur Arrêt sur image
 
Hors ligne yaurthek # Posté le 02/12/2008 à 22:37:56

Avatar

Ville : Bron
Pays : France métropolitaine
Études : SUPINFO Rhône-Alpes à Lyon

Bin en fait, je viens de me rendre compte qu'il y avait un léger bug :-° (merci de tes questions qui me font trouver mes erreurs :lol: )
Mais le dessin fonctionnait quand même car le fait qu'une ligne ne soit effacée qu'une fois au lieu de deux n'est pas franchement gênant...
Mais c'est corrigé !

En passant j'ai modifié un peu la syntaxe de mes fichiers : j'ai enlevé tous les saut de ligne (ils prenaient pas mal de mémoire mine de rien sur des gros fichiers et ces fichiers ne sont de toute manière pas conçu pour êtres lus par un humain, et en plus ils sont différents selon l'OS, donc pas franchement portables...) ainsi que la variable "visité" qui ne servait à rien pour le dessin.
Par contre, j'ai laissé le nombre total de cases, c'est plus simple de l'avoir directement et ça ne prend pas beaucoup de place.
je rappelle que l'en-tête peut contenir n'importe quoi... elle n'est pour l'instant pas utilisée pour le dessin.

Je précise également que la syntaxe précédente est toujours compatible (au moins avec ma fonction de chargement :) )

Voici donc un nouvel exemple qui je pense (j'espère... :euh: ) sera définitif :
Code : Autre
1
2
3
4
V 1.1 2/12/2008 22:23
*Arcane Sanctum Creation*|Rectangulaire
----------25:5;5----------
>1;0;0;1>0;1;0;1>0;1;0;0>1;0;0;0>1;0;0;0>1;0;1;1>0;1;0;1>0;1;0;1>0;1;1;0>1;0;1;0>1;0;1;0>0;0;0;1>0;1;0;1>1;1;0;1>0;1;1;0>0;0;1;1>0;1;0;1>1;1;0;0>0;0;1;1>1;1;0;0>0;0;0;1>0;1;0;1>0;1;1;1>0;1;0;1>0;1;1;0

Internet : le seul endroit où deux accents circonflexes veulent dire quelque chose

http://arcanesanctum.net
 
Connecté Cortexd # Posté le 03/12/2008 à 01:52:45
I drink your milkshake!
Avatar

Ville : Vauréal
Pays : France métropolitaine

oui c'est bon cette fois je pense :p
ça me donne ce labyrinthe :
Image utilisateur

« Chaque chevalier parle de ses armes. »
Image utilisateur Arrêt sur image
 
Hors ligne yaurthek # Posté le 03/12/2008 à 14:25:36

Avatar

Ville : Bron
Pays : France métropolitaine
Études : SUPINFO Rhône-Alpes à Lyon

Cool ;)
Le mien est moins joli mais c'est ça :

Image utilisateur

Internet : le seul endroit où deux accents circonflexes veulent dire quelque chose

http://arcanesanctum.net
 
Hors ligne jo-kteur # Posté le 07/04/2009 à 19:09:07
Suisse et fier de l'être
Avatar

Hors ligne yaurthek # Posté le 17/04/2009 à 19:29:46

Avatar

Ville : Bron
Pays : France métropolitaine
Études : SUPINFO Rhône-Alpes à Lyon

Merci ;) , pas de jury alors dis moi comment tu le trouve...

Internet : le seul endroit où deux accents circonflexes veulent dire quelque chose

http://arcanesanctum.net
 

Retour au forum "Générateurs de labyrinthes" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx