
| Page 1 | |||||
| Auteur | Message | ||||
|---|---|---|---|---|---|
| 0 visiteur sur ce sujet () | |||||
| Page 1 | |||||
ZoZor
|
# Posté le 28/11/2008 à 23:10:31 | ||||
Hiii Haaan !![]()
|
![]() Fiche techniqueTitre: GEN-Laby Version: V1.0 Langage: C Date de dernière mise à jour disponible: 06-01-2009 Bien que le concours se termine le 31-01-2009, je vais continuer le développement de ce programme et mettrai à jour les informations le concernant sur cette page. Bonjours à tous !Mon projet ne sera pas des plus ambitieux, mais je compte bien sur ce concours pour progresser en C et mieux connaitre la SDL tout en développant un programme ludique et agréable. Bien entendu je vais procéder par étapes:
|
||||
Squ@bad'
|
# Posté le 01/12/2008 à 22:12:10 | ||||
Rock and roll !![]()
|
Yes !
![]() première étape essentielle franchis: j'ai codé tout mon algo ![]() Maintenant je vais m'attaquer à la partie graphique avec la SDL, yepee ![]() |
||||
Squ@bad'
|
# Posté le 27/12/2008 à 13:49:42 | ||||
Rock and roll !![]()
|
Cette fois c'est bon, le programme génère bien un labyrinthe et l'affiche dans une fenêtre, tout fonctionne parfaitement
![]() Voici un screen que je viens d'effectuer: ![]() Cependant, on touche à présent du doigt la limite de la méthode exhaustive pour générer un labyrinthe parfait car on obtient parfois des résultat peu intéressants car trop linéaires: ![]() et cela est de plus en plus prononcé à mesure qu'on augmente la taille du labyrinthe à générer. Une de mes prochaines étapes sera donc de programmer une génération de labyrinthe parfait selon une autre méthode pour des labyrinthes plus équilibrés en termes de chemins / bifurcations, et de choisir la méthode de génération en fonction de la taille du labyrinthe à générer: pour un petit labyrinthe, la méthode exhaustive utilisée à présent par le programme sera adaptée, pour un labyrinthe plus grand la deuxième méthode sera plus adaptée. Je ne mettrai pas tout de suite mon code en ligne, il faut que je fasse encore quelques optimisations et que je rédige un README.txt etc.
Édité
le 05/01/2009 à 16:51:46
par Squ@bad'
|
||||
Cacophrene
|
# Posté le 27/12/2008 à 17:12:10 | ||||
Il est vraiment TeX-TuX![]()
Ville : Le cannet |
Salut !
Citation : Squ@bad' Cependant, on touche à présent du doigt la limite de la méthode exhaustive pour générer un labyrinthe parfait car on obtient parfois des résultat peu intéressants car trop linéaires Je participe moi-même au concours sur les labyrinthes (programme MazeML) et j'utilise aussi l'algorithme d'exploration exhaustive. Je me permets de t'écrire ce petit message car je suis étonné par ton constat. En fait, je n'ai jamais été confronté à ce comportement pour le moins étrange (et peu intéressant, comme tu l'as souligné). D'où ma question : lorsque ton algorithme a le choix entre plusieurs directions possibles (cases non visitées), en choisit-il une de façon vraiment aléatoire ? Pour tout te dire, même avec de gros labyrinthes (quelque chose comme 200 x 300 ou plus), je n'obtiens jamais ce comportement très linéaire... il est probable que quelque chose pose problème. Hélas je ne code pas en C (je code en OCaml), je ne peux donc pas te donner la réponse (par contre je peux confronter mes observations à ce que tu trouves de ton côté). Cordialement, Cacophrène Mini-tuto - Introduction à LablGTK ; Mini-tuto - Introduction au dialogue C/OCaml ; OCamlBoggle - Boggle Solver ; MazeML - Labyrinthes ; OCamlTeX - Éditeur LaTeX (en cours) ; Blog - OCaml de pied en cap |
||||
scat
|
# Posté le 29/12/2008 à 06:13:59 | ||||
|
|
|||||
Squ@bad'
|
# Posté le 31/12/2008 à 17:13:02 | ||||
Rock and roll !![]()
|
Bonjours
![]() en effet le problème que tu souligne est intéressant cacophrene, et il se trouve que le problème vient surement de la fonction rand, donc je remercie scat pour son lien ![]() je vais améliorer la gestion des nombre aléatoires et je vous tiendrez au courrant ![]() En vous remerciant pour votre disponibilité
Édité
le 31/12/2008 à 17:14:52
par Squ@bad'
|
||||
SpaceFox
|
# Posté le 31/12/2008 à 19:57:12 | ||||
|
Utilise ton cerveau !
études : UTT |
Pour avoir fait pas mal joujou avec la fonction rand() dans le cadre d'autres projets, j'ai jamais remarqué de problèmes aussi violents sur d'aussi petites quantités de données.
Parce que si le second labyrinthe parfaitement linéaire est vraiment généré, y'a un problème autre part... Il me fallait plusieurs miliers, voire plusieurs dizaines de milliers d'appels pour avoir une vraie déviation, en général P(0 à 0.5) < P(0.5 à 1). Je sais pas si je suis clair ? Bref, vérifie ton code avant d'accuser rand()
|
||||
Cacophrene
|
# Posté le 02/01/2009 à 14:37:13 | ||||
Il est vraiment TeX-TuX![]()
Ville : Le cannet |
Salut !
Citation : SpaceFox Il me fallait plusieurs miliers, voire plusieurs dizaines de milliers d'appels pour avoir une vraie déviation, en général P(0 à 0.5) < P(0.5 à 1) Effectivement il n'est pas du tout certain que la faute soit imputable àrand elle-même, qui est AMHA si fréquemment utilisée qu'un pareil bug devrait avoir été découvert et corrigé depuis longtemps. D'autant plus que le labyrinthe obtenu est parfaitement linéaire, sans aucune perturbation... en fait on peine à croire qu'il est construit de façon aléatoire (d'ailleurs, l'autre capture d'écran montre un labyrinthe moins linéaire mais tout de même assez « droit »). D'où la question suivante, qui pourrait concilier les deux observations : Y a-t-il besoin d'initialiserrand avant de l'utiliser (je suggère ça parce que le langage que j'utilise propose un générateur de nombre pseudo-aléatoires qui doit être initialisé avant utilisation) ? Et si oui, cette initialisation a-t-elle été correctement effectuée ? Cordialement, Cacophrène Mini-tuto - Introduction à LablGTK ; Mini-tuto - Introduction au dialogue C/OCaml ; OCamlBoggle - Boggle Solver ; MazeML - Labyrinthes ; OCamlTeX - Éditeur LaTeX (en cours) ; Blog - OCaml de pied en cap |
||||
quarante-sept
|
# Posté le 02/01/2009 à 16:10:54 | ||||
Roi des marmottes![]()
|
sinon si c'est vraiment généré aléatoirement, joue au loto
et si tu n'es pas célibataire, tu ferais mieux de te poser des questions sur ta relation ![]() ![]() ![]() |
||||
Squ@bad'
|
# Posté le 05/01/2009 à 17:05:54 | ||||
Rock and roll !![]()
|
Le problème est résolu, j'avais fait une erreur bête dans le codage de la fonction de génération de nombres aléatoire, comme vous le pensiez: en fait, j'avais appelé plusieurs fois srand(NULL);
Voici maintenant le type de labyrinthes que mon programme génère: ![]() encore merci pour votre aide, vous m'avez fait gagner beaucoup de temps
Édité
le 05/01/2009 à 17:06:37
par Squ@bad'
|
||||
Cacophrene
|
# Posté le 05/01/2009 à 19:48:54 | ||||
Il est vraiment TeX-TuX![]()
Ville : Le cannet |
Salut !
Content de voir que le problème est résolu. Effectivement ces nouveaux labyrinthes sont très bien conçus et ne présentent plus le biais des précédents. Cordialement, Cacophrène Mini-tuto - Introduction à LablGTK ; Mini-tuto - Introduction au dialogue C/OCaml ; OCamlBoggle - Boggle Solver ; MazeML - Labyrinthes ; OCamlTeX - Éditeur LaTeX (en cours) ; Blog - OCaml de pied en cap |
||||
SpaceFox
|
# Posté le 06/01/2009 à 06:40:47 | ||||
|
Utilise ton cerveau !
études : UTT |
N'empêche que j'ai beaucoup aimé ce réflexe de dire "ton labyrinthe n'est pas aléatoire, donc c'est la faute à la fonction rand() qui a été codée par des pros et est utilisée depuis des lustres..."
|
||||
Squ@bad'
|
# Posté le 06/01/2009 à 21:32:09 | ||||
Rock and roll !![]()
|
J'ai rédigé le README.txt, j'ai fait une petite amélioration (deux balises marquent le départ et l'arrivée du labyrinthe), j'ai mis mon programme sous licence BSD (merci à gouttegd et à SirJulio pour leur aide).
Le code est disponible ! Toutes vos remarques et suggestions seront les bienvenues ![]() Bientôt je mettrai un lien vers le projet compilé pour pouvoir le tester sans avoir à s'occuper de rien ![]() C'est donc la version 1.0 qui est disponible. |
||||
Cacophrene
|
# Posté le 06/01/2009 à 22:35:14 | ||||
Il est vraiment TeX-TuX![]()
Ville : Le cannet |
Salut !
Puisque les sources sont disponibles, je me permets quelques commentaires qui, je l'espère, seront constructifs :
Cordialement, Cacophrène Mini-tuto - Introduction à LablGTK ; Mini-tuto - Introduction au dialogue C/OCaml ; OCamlBoggle - Boggle Solver ; MazeML - Labyrinthes ; OCamlTeX - Éditeur LaTeX (en cours) ; Blog - OCaml de pied en cap |
||||
IATGOF
|
# Posté le 07/01/2009 à 10:55:32 | ||||
Inspecteur Sablo-Vaginos![]()
Ville : Talence |
Citation : Cacophrene
Je ne sais pas pourquoi, mais j'ai l'impression qu'il y a vraiment beaucoup de conditions et de tests logiques dans generation.c. Existerait-il un moyen de factoriser tout ça ? Si tu parles de : Secret (cliquez pour afficher) Code : C
On peux au moins faire ceci: Secret (cliquez pour afficher) Code : C
Ça n'allège pas le code mais surtout l'affichage, sinon tu peux toujours essayer d'associer 1101 à 2 (par exemple) en passant par une fonction ou autre. |
||||
Squ@bad'
|
# Posté le 07/01/2009 à 15:42:13 | ||||
Rock and roll !![]()
|
Citation : IATGOF
On peux au moins faire ceci: Secret (cliquez pour afficher) Code : C
Ça n'allège pas le code mais surtout l'affichage, sinon tu peux toujours essayer d'associer 1101 à 2 (par exemple) en passant par une fonction ou autre. c'est une bonne idée ![]() Citation : Cacophrene Les commentaires sont là pour apporter une information pertinente. Attention à ne pas en abuser, sinon ils perdent leur valeur (je pense notamment au commentaire "Fonction de création du labyrinthe" au-dessus de la fonction creation, et aussi à certaines explications dans affichage.c). tu as peut-être raison, j l'ai fait car, étant donné que c'est la première fois que je code un programme dans l'optique claire de partager mon code j'ai voulut bien m'expliquer (mais peut-être trop) Citation : Cacophrene le test logique X == n avec n non nul équivaut à X tout seul (0 ~ false). Bon, à prendre avec le sel qui s'impose... je ne fais pas de C, je ne suis pas affirmatif (et je ne sais même pas si ça fait partie des « bonnes pratiques » de ce langage). je ne vois pas trop ce que tu entends par là? Citation : Cacophrene Peut-on avoir, dans le fichier README, la commande de compilation à utiliser pour produire l'exécutable. J'avoue que je ne sais pas trop quoi ajouter après gcc -o GenLaby (et encore moins s'il y a des optimisations à activer) Voici tout ce que j'ai mis comme commandes de compilation: Code : Autre
C'est la première fois que je fais un projet avec un README donc pour le mode de rédaction, les infos, la présentation etc. j'ai fait ça du mieux que je pensais mais sans références ni aucune méthodes, donc toutes vos remarques à ce sujet m'intéressent ![]() en tout cas merci pour vos idées/remarques
Édité
le 07/01/2009 à 15:48:10
par Squ@bad'
|
||||
Cacophrene
|
# Posté le 07/01/2009 à 17:43:00 | ||||
Il est vraiment TeX-TuX![]()
Ville : Le cannet |
Salut !
Citation : IATGOF Ça n'allège pas le code mais surtout l'affichage, sinon tu peux toujours essayer d'associer 1101 à 2 (par exemple) en passant par une fonction ou autre. En fait ce que je présente sous forme de question n'est pas vraiment une question... il faut plus y voir un procédé rhétorique Je pense qu'il peut être intéressant de factoriser le code pour améliorer sa lisibilité et ne pas enfreindre aussi souvent la règle des 80 colonnes. Mais c'est à Squ@bad' de juger/modifier... je fais juste une suggestion.Citation : Squ@bad' tu as peut-être raison, j l'ai fait car, étant donné que c'est la première fois que je code un programme dans l'optique claire de partager mon code j'ai voulut bien m'expliquer (mais peut-être trop) Quand on veut partager son code, il faut essayer de le rendre lisible et clair en fournissant les explications là où elles sont utiles. En d'autres termes, efforce-toi de respecter la règle des 80 colonnes (ça me semble indispensable, et il y a même des éditeurs qui permettent de visualiser cette limite sous la forme d'un trait; je pense notamment à gedit, parmi d'autres), et n'ajoute pas des commentaires là où ils n'apportent aucune information supplémentaire. Dire qu'une fonction appelée creation crée un nouveau labyrinthe, c'est inutile, on s'en doute. D'ailleurs si tu as fait l'effort de bien choisir les noms de tes fonctions et de tes variables, beaucoup de commentaires deviennent superflus. Citation : Squ@bad' je ne vois pas trop ce que tu entends par là? Comme je ne fais pas de C, je répète que je ne suis pas affirmatif sur ce point. Mais il me semble qu'il est de coutume de remplacer les if X == 1 {...} par des if X {...} car, en C, 0 correspond à false, et toute autre valeur à true. Citation : Squ@bad' Voici tout ce que j'ai mis comme commandes de compilation En fait je rêvais d'un fichier make Pour tout dire, quand on ne pratique pas du tout un langage, on se doute que l'option -o est « universelle » (encore que...), mais on ne sait pas toujours quels arguments passer au compilateur. Idéalement, on voudrait pouvoir faire quelque chose comme make world (ou tout autre outil qui aide à compiler pour les pauvres malheureux qui ne savent pas comment compiler un projet dans un langage donné).Cordialement, Cacophrène Mini-tuto - Introduction à LablGTK ; Mini-tuto - Introduction au dialogue C/OCaml ; OCamlBoggle - Boggle Solver ; MazeML - Labyrinthes ; OCamlTeX - Éditeur LaTeX (en cours) ; Blog - OCaml de pied en cap |
||||
Squ@bad'
|
# Posté le 07/01/2009 à 18:58:19 | ||||
Rock and roll !![]()
|
Citation : Cacophrene
En fait je rêvais d'un fichier make Pour tout dire, quand on ne pratique pas du tout un langage, on se doute que l'option -o est « universelle » (encore que...), mais on ne sait pas toujours quels arguments passer au compilateur. Idéalement, on voudrait pouvoir faire quelque chose comme make world (ou tout autre outil qui aide à compiler pour les pauvres malheureux qui ne savent pas comment compiler un projet dans un langage donné).Je vois. Mais comment créer un tel fichier? Sinon, j'ai mis l'exécutable de mon programme (sous windows) en téléchargement ici: http://dl.free.fr/qG522cqxV |
||||
Cacophrene
|
# Posté le 07/01/2009 à 20:09:05 | ||||
Il est vraiment TeX-TuX![]()
Ville : Le cannet |
Salut !
Difficile de faire le tour des fichiers make en quelques phrases. Voici cependant quelques pistes. D'abord, un fichier make s'appelle généralement makefile et est utilisé par l'outil make (c'est logique, mais autant le dire tout de suite). On y trouve des règles associées à des actions, et dont l'exécution n'est possible que lorsque des dépendances sont satisfaites. Ces dépendances sont en fait d'autres règles qui peuvent avoir leurs propres dépendances, et ainsi de suite. Voici une bonne introduction. Cordialement, Cacophrène
Édité
le 07/01/2009 à 20:10:19
par Cacophrene
Mini-tuto - Introduction à LablGTK ; Mini-tuto - Introduction au dialogue C/OCaml ; OCamlBoggle - Boggle Solver ; MazeML - Labyrinthes ; OCamlTeX - Éditeur LaTeX (en cours) ; Blog - OCaml de pied en cap |
||||
Squ@bad'
|
# Posté le 08/01/2009 à 10:44:33 | ||||
Rock and roll !![]()
|
C'est très intéressant, je ne connaissait pas du tout ça. J'essaierai d'implémenter un makefile pour la prochaine version
![]() Mais le programme utilisant les SDL, bibliothèque tierce, il faudra quand même que l'utilisateur ait téléchargé cette librairie, non?
Édité
le 08/01/2009 à 11:41:00
par Squ@bad'
|
||||
IATGOF
|
# Posté le 08/01/2009 à 16:55:39 | ||||
Inspecteur Sablo-Vaginos![]()
Ville : Talence |
Citation : Cacophrene
Mais il me semble qu'il est de coutume de remplacer les if X == 1 {...} par des if X {...} car, en C, 0 correspond à false, et toute autre valeur à true. En fait, si on suit ta logique, on aif(x) qui correspond àif(x != 0) . Dans ce cas,if(x) n'est pas équivalent àif (x == 1) (la condition est vraie si x n'est pas nul, et non pas si x vaut 1). On pourrais remplacerif(x == 1) parif(!(x-1)) , mais ça n'a pas vraiment d'interet. EDIT: En fait je viens de penser, si x est un booléen, alors remplacer if(x == 1) par if(x) est correct. Note : On a bienif(expression) <=>if(expression != 0) , il me semble que c'est pareil en C++. Citation : Squ@bad' Mais le programme utilisant la SDL, bibliothèque tierce, il faudra quand même que l'utilisateur ait téléchargé cette librairie, non? S'il veux compiler le code, oui.
Édité
le 08/01/2009 à 16:57:48
par IATGOF
|
||||
Cacophrene
|
# Posté le 08/01/2009 à 19:52:22 | ||||
Il est vraiment TeX-TuX![]()
Ville : Le cannet |
Salut !
Citation : IATGOF En fait, si on suit ta logique, on a if(x) qui correspond à if(x != 0) . Dans ce cas, if(x) n'est pas équivalent à if (x == 1) (la condition est vraie si x n'est pas nul, et non pas si x vaut 1). On pourrais remplacer if(x == 1) par if(!(x-1)) , mais ça n'a pas vraiment d'intérêt. À titre personnel, je ne fais jamais ça. En OCaml, ce genre de bidouillage n'est pas possible en raison de l'absence de toute conversion implicite. Mais bon, comme je suppose que le code de Squ@bad' est correct, je lui suggère d'y penser (avec des réserves, je ne code pas en C). Je concède volontiers que ce n'est peut-être pas très pertinent... À bientôt, Cacophrène
Édité
le 08/01/2009 à 20:21:36
par Cacophrene
Mini-tuto - Introduction à LablGTK ; Mini-tuto - Introduction au dialogue C/OCaml ; OCamlBoggle - Boggle Solver ; MazeML - Labyrinthes ; OCamlTeX - Éditeur LaTeX (en cours) ; Blog - OCaml de pied en cap |
||||
Squ@bad'
|
# Posté le 08/01/2009 à 21:33:50 | ||||
Rock and roll !![]()
|
J'avoue que je ne sais pas quoi dire sur ce point: en effet je ne suis pas un "pro" des optimisations
Je me contente déjà d'avoir un code propre, c'est à dire sans erreurs ni warnings avec un compilateur bien paramétré, ce que je n'avait pas fait jusqu'à présent et qui m'a beaucoup fait progressé ces derniers temps.
|
||||
MisterDo
|
# Posté le 19/01/2009 à 23:33:36 | ||||
"Où est mon programme ?"![]()
|
Je trouve ton code beaucoup trop commenté.
Voici un Makefile que je t'ai fait vite fait (à placer dans un fichier nommé "Makefile"): Code :
il ne reste plus qu'à faire make puis ./Gen-Laby en console. Pour ce qui est du programme, le mieux serait d'utiliser les paramétres donnés pour pouvoir faire ./Gen-Laby 20 30 pour avoir un labyrinthe de 20 sur 30 cases. |
||||
Squ@bad'
|
# Posté le 21/01/2009 à 15:02:54 | ||||
Rock and roll !![]()
|
merci beaucoup
![]() Pour les commentaires, j'arrange ça pour la prochaine version, dans laquelle il est d'ailleurs prévu de rendre possible de choisir la taille du labyrinthe à générer
Édité
le 21/01/2009 à 15:03:25
par Squ@bad'
|
||||
Retour au forum "Générateurs de labyrinthes" ou à la liste des forums
Le Site du Zéro vous proposera bientôt de nouveaux cours partant de Zéro dans d'autres domaines que l'informatique !

