Aller au menu - Aller au contenu

Gen-Laby

Par Squ@bad'

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Auteur Message
0 visiteur sur ce sujet ()
Page 1 
Hors ligne ZoZor # Posté le 28/11/2008 à 23:10:31
Hiii Haaan !
Avatar

Illustration

Fiche technique



Titre:
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:


Les étapes:


1-Tout d'abord, m'informer sur les labyrinthes et les algorithmes qui permettent d'en générer
2-Ensuite, choisir un algorithme, ou en créer un
3-Début de la phase de codage en C du programme, génération de labyrinthes dans un fichier texte et/ou en console par des chiffres correspondants à des types de cases précises (exemple: case ouverte au Nord,etc.)
4-Codage d'une interface en SDL: la grille (ou plutôt le labyrinthe :p ) générée, les numéros correspondants à des types de cases seront remplacées par des images: alors on obtiendra déjà un programme utilisable, distribuable, mais très basique

Ces 4 premiers objectifs, modestes, constituent la base du programme et sa version 1.0
Mais le projet ne va pas s'arrêter là et je vais continuer à le développer. Voici une liste non exhaustive des améliorations prévues pour les versions à venir:

5-Possibilité pour l'utilisateur de définir la taille du labyrinthe qu'il veut générer (V1.1)
6-Possibilité pour l'utilisateur de se déplacer avec un personnage dans le labyrinthe (V1.2)
7-Possibilité pour l'utilisateur d'enregistrer des niveaux de jeu (labyrinthes) (V1.3)
8-Gestion du temps avec la possibilité d'avoir n temps impartis pour venir à bout du labyrinthe (V1.4)
9-Proposer de montrer la solution
10-Proposer plusieurs méthodes de génération de labyrinthes parfaits
11-Proposer de générer des labyrinthes imparfaits
12-Création d'un mode permettant de créer soit même des labyrinthes
... bref les idées ne manquent pas !
Tout ne sera pas fait avant la fin du concours (loin de là :p ), mais je compte poursuivre le projet :D


Étapes réalisées:
1 2 3 4
Étape en cours: 5



Historique:


Version 1.0


Secret (cliquez pour afficher)

29/11:

-J'ai choisi la méthode exhaustive pour générer un labyrinthe parfait, méthode qui apparait comme la moins complexe et paraît performante.
-Voici un petit aperçut d'une page d'algo (sur deux):
Image utilisateur
-J'ai créé toutes les images nécessaires pour l'aperçut du labyrinthe final (16 en tout)

1/12:
-Mon code avance bien: j'ai totalement finit le codage en C de mon algo, avec un compilateur réglé comme il se doit cette fois-ci ^^ Prochaine étape: la SDL et le codage des fonctions d'affichage du labyrinthe ;)

5/12:
-Résolution d'un bug qui m'a pris la tête pendant ces derniers jours qui provenait des paramètres envoyés à une fonction de génération de nombres aléatoires :D
Je vais donc à présent pouvoir me consacrer entièrement à la gestion de l'affichage


10/12:
-J'ai fini mon algorithme pour l'affichage du labyrinthe, je vais commencer à coder ça d'ici peu.


22/12:
-Après une petite période sans programmer, j'ai avancé: j'ai divisé un peu mieux mon code en plus de fonctions pour plus de lisibilité
-La fenêtre s'ouvre et fait la taille du labyrinthe
Maintenant je vais m'attaquer à la dernière étape de cette première phase pour arriver à un programme répondant aux attentes de base: l'affichage du labyrinthe dans la fenêtre ^^


27/12:
-Cette fois c'est bon, le programme génère bien un labyrinthe et l'affiche dans une fenêtre, tout fonctionne parfaitement :D
Voici un screen que je viens d'effectuer:

Image utilisateur

Cependant, il y a un problème car on obtient parfois des résultat peu intéressants car trop linéaires:

Image utilisateur

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 résoudre ce problème pour générer des labyrinthes plus équilibrés en termes de chemins / bifurcations.



Bientôt je mettrait mon code en ligne, mais il faut d'abord que je fasse encore quelques optimisations et que je rédige un README.txt


05/01:
-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... Merci aux membres qui m'ont mis sur la piste via le forum.
Voici le résultat à présent, enfin satisfaisant :D

Image utilisateur


06/01:
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).
<lien url="http://www.siteduzero.com/uploads/fr/concours/1_1000/423.zip">Le code est disponible !</lien> Toutes vos remarques et suggestions seront les bienvenues :D
Bientôt je mettrai un lien vers le projet compilé pour pouvoir le tester sans avoir à s'occuper de rien ;)
<lien url="http://www.siteduzero.com/uploads/fr/concours/1_1000/423.zip">C'est donc la version 1.0 qui est disponible. </lien>

06/01:
l'exécutable de la version 1.0 de GEN-Laby, sous windows, est disponible à cette adresse:
<lien>http://dl.free.fr/qG522cqxV</lien>
La prochaine chose que je ferai pour la version 1.1 est une amélioration de la gestion de la fenêtre et implémenter la possibilité pour l'utilisateur de définir la taille du labyrinthe qu'il veut générer...


Version 1.1


09-01:
-Amélioration de la gestion de la fenêtre (elle est à présent apte à être redimensionné en fonction du choix de la taille voulue par l'utilisateur, bien que ce ne soit pas encore possible pour l'utilisateur de rentrer la taille voulue (pas encore de champ de saisie, à venir ;) )
-Plus petites cases permettant d'avoir de plus grands labyrinthes
Hors ligne Squ@bad' # Posté le 01/12/2008 à 22:12:10
Rock and roll !
Avatar

Yes ! :D
première étape essentielle franchis: j'ai codé tout mon algo :D
Maintenant je vais m'attaquer à la partie graphique avec la SDL, yepee :p
 
Hors ligne Squ@bad' # Posté le 27/12/2008 à 13:49:42
Rock and roll !
Avatar

Cette fois c'est bon, le programme génère bien un labyrinthe et l'affiche dans une fenêtre, tout fonctionne parfaitement :D
Voici un screen que je viens d'effectuer:

Image utilisateur

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:

Image utilisateur

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'
 
Hors ligne Cacophrene # Posté le 27/12/2008 à 17:12:10
Il est vraiment TeX-TuX
Avatar
Flux RSS

Ville : Le cannet
Pays : France métropolitaine
études : Université de Nice Sophia Antipolis

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
 
Hors ligne scat # Posté le 29/12/2008 à 06:13:59

Hors ligne Squ@bad' # Posté le 31/12/2008 à 17:13:02
Rock and roll !
Avatar

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'
 
Hors ligne SpaceFox # Posté le 31/12/2008 à 19:57:12
Utilise ton cerveau !
Avatar

é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() ^^

Le Trombi des Zéros ! Viendez mettre votre tronche !
Image utilisateur (Perdu par le SdZ)
Image utilisateur

Image utilisateur
Image utilisateur
Image utilisateur
 
Hors ligne Cacophrene # Posté le 02/01/2009 à 14:37:13
Il est vraiment TeX-TuX
Avatar
Flux RSS

Ville : Le cannet
Pays : France métropolitaine
études : Université de Nice Sophia Antipolis

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
 
Hors ligne quarante-sept # Posté le 02/01/2009 à 16:10:54
Roi des marmottes
Avatar

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

Image utilisateur
Image utilisateur
Image utilisateur
 
Hors ligne Squ@bad' # Posté le 05/01/2009 à 17:05:54
Rock and roll !
Avatar

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:
Image utilisateur

encore merci pour votre aide, vous m'avez fait gagner beaucoup de temps :D
Édité le 05/01/2009 à 17:06:37 par Squ@bad'
 
Hors ligne Cacophrene # Posté le 05/01/2009 à 19:48:54
Il est vraiment TeX-TuX
Avatar
Flux RSS

Ville : Le cannet
Pays : France métropolitaine
études : Université de Nice Sophia Antipolis

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
 
Hors ligne SpaceFox # Posté le 06/01/2009 à 06:40:47
Utilise ton cerveau !
Avatar

é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..."

Le Trombi des Zéros ! Viendez mettre votre tronche !
Image utilisateur (Perdu par le SdZ)
Image utilisateur

Image utilisateur
Image utilisateur
Image utilisateur
 
Hors ligne Squ@bad' # Posté le 06/01/2009 à 21:32:09
Rock and roll !
Avatar

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 :D
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.
 
Hors ligne Cacophrene # Posté le 06/01/2009 à 22:35:14
Il est vraiment TeX-TuX
Avatar
Flux RSS

Ville : Le cannet
Pays : France métropolitaine
études : Université de Nice Sophia Antipolis

Salut !

Puisque les sources sont disponibles, je me permets quelques commentaires qui, je l'espère, seront constructifs :

  • D'abord, on aime bien que la règle des 80 colonnes soit respectée pour éviter d'avoir de trop longues lignes à lire (même si on peut bien entendu en venir à bout avec les barres de défilement).
  • 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).
  • Autant que je sache, le C ne possède pas de type pour les booléens, de sorte que 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 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 ?
  • 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) :)


Cordialement,
Cacophrène
 
Hors ligne IATGOF # Posté le 07/01/2009 à 10:55:32
Inspecteur Sablo-Vaginos
Avatar

Ville : Talence
Pays : France métropolitaine
études : EPITECH Bordeaux

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
 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
if (cellules[i].portes.Nord == 1 && cellules[i].portes.Sud == 1 && cellules[i].portes.Est == 0 && cellules[i].portes.Ouest == 1)
            cellules[i].type = 2; /*correspond au type de case ouvert à l'Est, fermé à l'Ouest, au Nord et au Sud*/

        else if (cellules[i].portes.Nord == 0 && cellules[i].portes.Sud == 1 && cellules[i].portes.Est == 1 && cellules[i].portes.Ouest == 1)
            cellules[i].type = 3; /*etc.*/

        else if (cellules[i].portes.Nord == 1 && cellules[i].portes.Sud == 1 && cellules[i].portes.Est == 1 && cellules[i].portes.Ouest == 0)
            cellules[i].type = 4;

        else if (cellules[i].portes.Nord == 1 && cellules[i].portes.Sud == 0 && cellules[i].portes.Est == 1 && cellules[i].portes.Ouest == 1)
            cellules[i].type = 5;

        else if (cellules[i].portes.Nord == 1 && cellules[i].portes.Sud == 0 && cellules[i].portes.Est == 0 && cellules[i].portes.Ouest == 1)
            cellules[i].type = 6;

        else if (cellules[i].portes.Nord == 0 && cellules[i].portes.Sud == 1 && cellules[i].portes.Est == 1 && cellules[i].portes.Ouest == 0)
            cellules[i].type = 7;

        else if (cellules[i].portes.Nord == 1 && cellules[i].portes.Sud == 0 && cellules[i].portes.Est == 1 && cellules[i].portes.Ouest == 0)
            cellules[i].type = 8;

        else if (cellules[i].portes.Nord == 0 && cellules[i].portes.Sud == 1 && cellules[i].portes.Est == 0 && cellules[i].portes.Ouest == 1)
            cellules[i].type = 9;

        else if (cellules[i].portes.Nord == 0 && cellules[i].portes.Sud == 0 && cellules[i].portes.Est == 0 && cellules[i].portes.Ouest == 1)
            cellules[i].type = 10;

        else if (cellules[i].portes.Nord == 0 && cellules[i].portes.Sud == 0 && cellules[i].portes.Est == 1 && cellules[i].portes.Ouest == 0)
            cellules[i].type = 11;

        else if (cellules[i].portes.Nord == 0 && cellules[i].portes.Sud == 1 && cellules[i].portes.Est == 0 && cellules[i].portes.Ouest == 0)
            cellules[i].type = 12;

        else if (cellules[i].portes.Nord == 1 && cellules[i].portes.Sud == 0 && cellules[i].portes.Est == 0 && cellules[i].portes.Ouest == 0)
            cellules[i].type = 13;

        else if (cellules[i].portes.Nord == 0 && cellules[i].portes.Sud == 0 && cellules[i].portes.Est == 1 && cellules[i].portes.Ouest == 1)
            cellules[i].type = 14;

        else if (cellules[i].portes.Nord == 1 && cellules[i].portes.Sud == 1 && cellules[i].portes.Est == 0 && cellules[i].portes.Ouest == 0)
            cellules[i].type = 15;


On peux au moins faire ceci:
Secret (cliquez pour afficher)
Code : C
1
2
3
4
5
6
7
/* non testé, mais ça devrais fonctionner :) */
#define test(a,b,c,d) (cellules[i].portes.Nord == a && cellules[i].portes.Sud == b && cellules[i].portes.Est == c && cellules[i].portes.Ouest == d)

if(test(1,1,0,1))
cellules[i].type = 2;

/*etc... */

Ç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.
Hors ligne Squ@bad' # Posté le 07/01/2009 à 15:42:13
Rock and roll !
Avatar

Citation : IATGOF


On peux au moins faire ceci:
Secret (cliquez pour afficher)
Code : C
1
2
3
4
5
6
7
/* non testé, mais ça devrais fonctionner :) */
#define test(a,b,c,d) (cellules[i].portes.Nord == a && cellules[i].portes.Sud == b && cellules[i].portes.Est == c && cellules[i].portes.Ouest == d)

if(test(1,1,0,1))
cellules[i].type = 2;

/*etc... */

Ç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
1
2
-Wall -Wextra -ansi -O -Wwrite-strings -Wstrict-prototypes -Wuninitialized
-Wunreachable-code


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'
 
Hors ligne Cacophrene # Posté le 07/01/2009 à 17:43:00
Il est vraiment TeX-TuX
Avatar
Flux RSS

Ville : Le cannet
Pays : France métropolitaine
études : Université de Nice Sophia Antipolis

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
 
Hors ligne Squ@bad' # Posté le 07/01/2009 à 18:58:19
Rock and roll !
Avatar

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
 
Hors ligne Cacophrene # Posté le 07/01/2009 à 20:09:05
Il est vraiment TeX-TuX
Avatar
Flux RSS

Ville : Le cannet
Pays : France métropolitaine
études : Université de Nice Sophia Antipolis

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
 
Hors ligne Squ@bad' # Posté le 08/01/2009 à 10:44:33
Rock and roll !
Avatar

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'
 
Hors ligne IATGOF # Posté le 08/01/2009 à 16:55:39
Inspecteur Sablo-Vaginos
Avatar

Ville : Talence
Pays : France métropolitaine
études : EPITECH Bordeaux

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
Hors ligne Cacophrene # Posté le 08/01/2009 à 19:52:22
Il est vraiment TeX-TuX
Avatar
Flux RSS

Ville : Le cannet
Pays : France métropolitaine
études : Université de Nice Sophia Antipolis

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
 
Hors ligne Squ@bad' # Posté le 08/01/2009 à 21:33:50
Rock and roll !
Avatar

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.
 
Hors ligne MisterDo # Posté le 19/01/2009 à 23:33:36
"Où est mon programme ?"
Avatar
Flux RSS

Je trouve ton code beaucoup trop commenté.

Voici un Makefile que je t'ai fait vite fait (à placer dans un fichier nommé "Makefile"):

Code :
1
2
3
4
5
FILES = main.c affichage.c generation.c
OUT = Gen-Laby 

all :
	gcc -o $(OUT) $(FILES) -lSDL


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.
 
Hors ligne Squ@bad' # Posté le 21/01/2009 à 15:02:54
Rock and roll !
Avatar

merci beaucoup :D
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

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