Vous n'êtes pas identifié(e).
Auia Pieridum peragro loca nullius ante trita solo..... De rerum natura, Liber IV, Lucrece
Hors ligne
Hors ligne
ThinkPad T530 - Debian - CoreBoot
Hors ligne
Hors ligne
Comme le choix et le réglage de la police sont liés au design du menu. J'ai bossé dans Inskcape pour améliorer ma maquette du menu. Voilà ce que cela donne pour le moment :
Je cherche à faire quelque chose qui ressemble à un écran vidéo transparent, un peu futuriste.
Un fois que j'aurai validé le design je l'implémenterai en essayant de le rendre dynamique en fonction du contenu.
Il faudra peut-être que je bosse sur une animation d'ouverture et de fermeture du menu...
Hors ligne
La fenêtre se ferme aussitôt ouverte.
Dernière modification par kawer (26-08-2016 17:22:10)
ThinkPad T530 - Debian - CoreBoot
Hors ligne
Hors ligne
Hors ligne
Cela permettra d'ajouter des thèmes au jeu si on le souhaite.
Il suffit pour l'instant d'ajouter un dossier dans SokoRobot/img/
de renseigner son nom dans les préférences et d'ajouter une ou plusieurs images. Il faut évidemment garder un nom d'image identique à celui du thème original pour qu'elle soit prise en compte.
Si l'application ne trouve pas d'image elle ira la chercher dans le dossier original. On peut donc modifier tout ou partie du rendu.
Pour ceux qui ont déjà le dossier :
Edit: j'ai mis à jour la capture, la hauteur du menu varie en fonction du contenu maintenant et j'ai ajouté le séparateur.
Hors ligne
C'est pareil, c'est un début mais le principe est là.
La passoire
J'ai aussi passé le logiciel dans valgrind afin de trouver les fuites mémoires....et comme par hasard il en a trouvé plein (On est débutant ou on ne l'ai pas).
J'ai corrigé pas mal de chose avec l'aide de Valgrind mais il y a encore quelques trucs qui dépassent mon niveau que je n'ai pas réglé.
Notamment lors de la fermeture du programme, il semble que je ne libére pas toutes la mémoire correctement. L'OS s'en charge à ma place, brutalement mais efficacement mais j'aimerai que cela soit le plus propre possible. J'aimerai que valgrind et SokoRobot s'entendent bien.
J'améliore mon code tranquillement mais sereinement, j'avance parfois lentement, mais j'avance.
Design
Voilà où j'en suis actuellement :
J'aimerai mettre de la mousse sur les murs, changer le sol du labyrinthe et ajouter un objet ou deux dans l'herbe, histoire d'étoffer tout ça.
Si vous avec des idées, je prends.
Cordialement,
Kao
Hors ligne
Je vois que tu as déjà un dossier img à la racine du projet. Pourquoi ne pas tout mettre dedans ?
* Idéalement, ton/tes binaire(s) va/vont dans un dossier bin/ situé à la racine du projet. Ça te permet d'avoir un .gitignore qui contient bin/ au lieu du nom du binaire qui peut éventuellement changer. Et c'est plus propre. Peut-être que tu le fais, mais mon observation rapide n'a pas vu ça dans ton Makefile.
* Le Makefile aussi est sous licence.
* D'ailleurs, je ne suis pas sûr que ton inclusion de la licence soit dans les normes. (Juste un point à vérifier, je ne suis pas sûr de ce que j'avance.)
* Les ressources ne peuvent pas être sous licence GNU/GPLv2. N'oublie pas de préciser que les ressources (images, musiques, levels, ...) sont sous licence CC ou je ne sais quoi d'autre qui te conviendrait.
* git clean devrait supprimer le dossier obj, au lieu de seulement le contenu du dossier.
Ceci ne sont que des commentaires très rapides et pas forcément tous constructifs. Quand j'aurai un peu plus de temps, je regarde ton code en entier et ouvre des issues sur github.
D'ailleurs, je te conseille de faire deux branches sur github. Une pour le développement, et la branche master qui ne contient que des versions stables.
Bravo pour ton boulot, c'est impressionnant pour un débutant !
A+
Duna
* La fonction main fait plus de 600 lignes. Pense à la découper en autres fonctions (init, init_level, load, move, save, ...) Le plus simple étant certainement de commencer par créer une fonction int init(void) qui gère l'initialisation du générateur de nombres aléatoires, de la fenêtre SDL (à moins que tu fasses une fonction init_GUI à part), et ce genre de choses.
* Il y a beaucoup de répétition de code. Sur 570 lignes de code non vide dans main.c, 208 sont exactement identiques. C'est beaucoup trop ! Le passage par des fonctions est généralement le meilleur moyen d'éviter la répétition de code.
Je m'en doutais au vu des autres codes que j'ai pu explorer, je dois pouvoir sortir le lancement de l'application et du premier niveau et je dois pouvoir rationaliser la partie sur les commandes claviers.
* Il est d'usage d'ajouter une ligne de documentation dans chaque fichier source pour indiquer l'objectif des fonctions de ce fichier (movement management, save management, GUI, ...)
Tout à fait d'accord avec toi. Certains documents comme le sprite.c ne servent qu'a charger en mémoire les images et en générer des surfaces. Mais d'autres comme game.c et level.c ont une séparation de rôle un peu flou. Je pense qu'il faut que je créais des nouveaux fichiers et que je transfére les fonctions une par une. Mon code a tellement évolué depuis le démarrage et donc l'organisation que j'avais imaginé au début n'est plus valable du tout. Rien que dans les noms des fichiers il faut que je sois plus clair.
* Les images vont généralement dans un dossier img (comme tu as fait), lui-même dans un dossier res, qui est au même niveau que src et inc. L'architecture devrait ressembler à ça :├── inc
│ ├── const.h
│ ├── game.h
│ ├── level.h
│ ├── menu.h
│ ├── settings.h
│ ├── slc.h
│ └── sprites.h
└── src
│ ├── game.c
│ ├── level.c
│ ├── main.c
│ ├── menu.c
│ ├── settings.c
│ ├── slc.c
│ └── sprites.c
└── res
└── img
├── Box.svg
├── Congrats.svg
├── design.svg
├── Goal.svg
├── grass.svg
├── Robot2.svg
├── Robot.svg
├── SokoRobot-ScreenShot.png
└── Walls.svg
Je vois que tu as déjà un dossier img à la racine du projet. Pourquoi ne pas tout mettre dedans ?
J'avais séparer les images sources (SVG) des images des images applatit (PNG) en les plaçant dans le dossier src. Pour moi les fichiers svg ne concernent que le graphiste et pas l'execution du jeu.
Lors de la fabrication d'un éventuel paquet, elles ne seraient pas pris en compte seulement dans le paquet source...
* Idéalement, ton/tes binaire(s) va/vont dans un dossier bin/ situé à la racine du projet. Ça te permet d'avoir un .gitignore qui contient bin/ au lieu du nom du binaire qui peut éventuellement changer. Et c'est plus propre. Peut-être que tu le fais, mais mon observation rapide n'a pas vu ça dans ton Makefile.
C'était dans ma todolist
* Le Makefile aussi est sous licence.
* D'ailleurs, je ne suis pas sûr que ton inclusion de la licence soit dans les normes. (Juste un point à vérifier, je ne suis pas sûr de ce que j'avance.)
* Les ressources ne peuvent pas être sous licence GNU/GPLv2. N'oublie pas de préciser que les ressources (images, musiques, levels, ...) sont sous licence CC ou je ne sais quoi d'autre qui te conviendrait.
Les licences sont ma bête noire, mon poil à gratter....
* git clean devrait supprimer le dossier obj, au lieu de seulement le contenu du dossier.
Je crois avoir rencontré des problèmes avec le fait de pousser des dossiers vides dans git.
Il ne me le prennait pas en compte. Il faut que je reteste ça.
Ceci ne sont que des commentaires très rapides et pas forcément tous constructifs. Quand j'aurai un peu plus de temps, je regarde ton code en entier et ouvre des issues sur github.
D'ailleurs, je te conseille de faire deux branches sur github. Une pour le développement, et la branche master qui ne contient que des versions stables.
Git est un monde en soit, j'avais déjà créé des branches pour appliquer des grosses modifications de code. Mais faire une branche stable et une dev serait plus propre. Il faut aussi que je rationalise les commit. J'ai tendance à en faire des gros avec plusieurs sujets traités en même temps dedans.
Bravo pour ton boulot, c'est impressionnant pour un débutant !
A+
Duna
En tout cas merci pour ton attention et tes conseils. J'ai trouvé beaucoup d'information sur internet et dans les livres mais c'est pas toujours facile de faire le tri sans expérience.
Je dois notamment revoir la création de la grille de jeu et l'améliorer. J'avais mal compris l'utilsation des tableaux multidimentionnel (grid[x][y]), je me suis compliqué la vie pour rien.
https://openclassrooms.com/forum/sujet/ … e-91313102
Kao
Hors ligne
Mint 18 // essai de débian + Cinnamon pour migration. Développeur du temps libre...
config : Portable Core I7 // 4Go Ram // SSD256Go // cg Intel HD3000 (on ne peut pas tout avoir) // wi-fi Alpha AWUS036H <- marche trop fort !
Enfin : OpenBSD 6.0 + XFCE
Hors ligne
Hors ligne
Hors ligne
Hors ligne
Hors ligne
Hors ligne
Hors ligne
Hors ligne
Hors ligne
Hors ligne