Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 16-07-2016 10:33:51

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

SokoRobot, un jeu écrit en C par mes soins

Bonjour,
J'ai un petit projet à vous présenter : SokoRobot
SokoRobot-ScreenShot.png

Je ne suis pas un informaticien de formation, mais j’ai commencé à m’intéresser au langage de programmation C il y a quelques mois suite à la découverte des cartes Arduino.
Afin d’arriver à bien contrôler ma carte Arduino, j’ai acheté un bouquin sur le C :
« Apprenez à programmer en C » par Mathieu Nebra. Le livre est aussi disponible en ligne ici.

Un des exercices du livre consiste à fabriquer un petit jeu de type Sokoban, ou le joueur doit ranger judicieusement des boîtes. L’exercice permet de mettre rapidement en place le jeu, ses logiques et d’oublier que l’on a une carte Arduino à programmer smile.

J’ai poussé l’exercice plus loin, j’ai utilisé la SDL2 plutôt que la SDL1. Plutôt que de fabriquer mes propres niveaux, j’ai codé un lecteur de fichier « slc » avec l’aide de la libxml2. J’ai aussi fabriqué mes propres « sprites » (dessins) avec Inkscape.  J’ai ajouté de la décoration autour du labyrinthe.
J’ai poussé ça sur github avec une licence libre, et pouf voilà que je me retrouve avec un semblant de jeux fonctionnel.
Bref j’ai bien dérivé de l’exercice originel, j’ai hacké un bouquin de C en quelques sortes smile.

Tout est accessible ici, j'espère ne rien avoir oublié dans le README (une lib ou deux peut-être) big_smile :
https://github.com/kaochen/SokoRobot

J’aimerai donc avoir vos avis de codeur, éventuellement de joueur pour m’aider à le finir.
J’ai quelques questions triviale à vous poser :

  • -Est ce que ça fonctionne chez vous ? tongue

  • -Quelle résolution par défaut je devrais utiliser sachant qu’une plaque (sprite) fait 40x40 pixels

  • -À quoi devrait ressembler les menus ?

  • -Si j'ajoute un « make install » je place les fichiers où ?

  • -etc.



Donc, ça ne casse pas trois pattes à un canard mais ça le mérite d'exister et d'être un bon moyen pour moi de mieux comprendre le fonctionnement du C, d'un linux, de gcc, de git , de make, etc.

Cordialement,
Votre très cher et dévoué Kao

Nota: sur le github, j'ai ajouté trois fichiers comprenant des niveaux, deux ne sont pas de moi, je pense pas pouvoir les laisser et le dernier est plus une base pour tester le jeu et sont comportement.
Il faudra que je fabrique une vingtaine de niveau je pense, histoire d'avoir quelques choses d'exploitable à terme

Hors ligne

#2 18-07-2016 07:44:02

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Bon ce n'est pas le franc succès mais je continue quand même smile
J'ai ajouté un fichier de préférence et je suis capable de prendre les résolutions en tant que paramètre.
Il faut juste modifier le fichier preference.ini
J'ai décrété que la resolution minimale était de 400 par 400 en dur dans mon code.

//Define Window size
#define W_WIDTH  400
#define W_HEIGHT 400


Mais c'est un peu trop petit, il faudra que je change cela, il y a des effets de bord en plus.

Ca m'a demandé pas mal de modification et d'ajout dans le code, de corrections de bug suite à ce changement, mais du coup c'est plus souple et le code est plus propre.
La prochaine étape va être de faire évoluer les menus pour arriver à garder la lisibilité sur les petites résolutions.

Hors ligne

#3 18-07-2016 19:42:23

Péhä
Membre
Lieu : Maine et Loire
Distrib. : handylinux 2.5
Noyau : Linux 3.16.0-4-686-pae
(G)UI : thunard
Inscription : 07-07-2016
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

je teste ça ce soir j'adore c'est petits jeux big_smile

Auia Pieridum peragro loca nullius ante trita solo.....  De rerum natura, Liber IV, Lucrece

Hors ligne

#4 18-07-2016 19:49:38

Péhä
Membre
Lieu : Maine et Loire
Distrib. : handylinux 2.5
Noyau : Linux 3.16.0-4-686-pae
(G)UI : thunard
Inscription : 07-07-2016
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

je viens de télécharger ton petit jeu mais au moment de la compil j'ai ça:

~/SokoRobot
 $ make
gcc -o obj/game.o -c src/game.c -I inc -Wall -Wextra `sdl2-config --cflags --libs`  -lSDL2main -lSDL2_image -lSDL2 -lSDL2_ttf `xml2-config --cflags` `xml2-config --libs`
In file included from src/game.c:23:0:
src/../inc/game.h:26:28: fatal error: SDL2/SDL_image.h: Aucun fichier ou dossier de ce type
 #include <SDL2/SDL_image.h>
                            ^
compilation terminated.
Makefile:24: recipe for target 'obj/game.o' failed
make: *** [obj/game.o] Error 1
 



et du coup pas d'install sad


Auia Pieridum peragro loca nullius ante trita solo.....  De rerum natura, Liber IV, Lucrece

Hors ligne

#5 18-07-2016 20:03:48

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : SokoRobot, un jeu écrit en C par mes soins

Donc, le début de ce jeu est son installation ! tongue

Ok je sors vivement [ ] ...

"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#6 18-07-2016 21:20:26

Péhä
Membre
Lieu : Maine et Loire
Distrib. : handylinux 2.5
Noyau : Linux 3.16.0-4-686-pae
(G)UI : thunard
Inscription : 07-07-2016
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

ouaip mais pour le coup ça m'apprend à compiler, car à part krita je ne compile rien. Je vois en tout cas que ça vanne ici, c'est du joli tongue

Auia Pieridum peragro loca nullius ante trita solo.....  De rerum natura, Liber IV, Lucrece

Hors ligne

#7 18-07-2016 21:51:33

kawer
Adhérent(e)
Lieu : Académie de la Croix-Vraie
Distrib. : Debian stable / ArchLinux
Noyau : Current
(G)UI : xfwm4
Inscription : 08-10-2013
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

il faut installer libsdl2-image-2.0-0

Rendez à César ce qui est à César et à Dieu ce qui est à Dieu -Cit. J.C.
La persévérance, c'est ce qui rend l'impossible possible, le possible probable et le probable réalisé. -Cit. Robert Half.
Dans toutes les situations, le piège c'était avant, car tu ne voyais pas les murs -Cit. Crevette

Hors ligne

#8 18-07-2016 22:56:07

Péhä
Membre
Lieu : Maine et Loire
Distrib. : handylinux 2.5
Noyau : Linux 3.16.0-4-686-pae
(G)UI : thunard
Inscription : 07-07-2016
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

j'ai installé libsdl2-image-2.0-0 et toujours le même résultat. Merci quand même smile

Auia Pieridum peragro loca nullius ante trita solo.....  De rerum natura, Liber IV, Lucrece

Hors ligne

#9 19-07-2016 06:15:55

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Je savais que j'avais oublié une lib ou deux
J'avais la liste mais j'ai foiré dans un copié collé sur le README tongue
Donc il doit falloir libsdl2-image-dev pour pouvoir compiler le prog et elle devrait installer libsdl2-image-2.0-0 pour l'exécuter...
Pour trouver le fichier manquant en question, j'ai fait :

apt-file search SDL2/SDL_image.h


Ce qui me donne


libsdl2-image-dev: /usr/include/SDL2/SDL_image.h
 


Elle est pas mal cette astuce.

Je rajoute les deux dans le README
La lib SDL image permet de charger les images dans la SDL, c'est un peu la pièce centrale que j'avais oublié big_smile

Hors ligne

#10 19-07-2016 08:11:01

kawer
Adhérent(e)
Lieu : Académie de la Croix-Vraie
Distrib. : Debian stable / ArchLinux
Noyau : Current
(G)UI : xfwm4
Inscription : 08-10-2013
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Si ça peu t'aider dans ton déploiement, voici mon message d'erreur :

8:09 kawer ~/Local/SokoRobot % make
gcc -o obj/main.o -c src/main.c -I inc -Wall -Wextra `sdl2-config --cflags --libs`  -lSDL2main -lSDL2_image -lSDL2 -lSDL2_ttf `xml2-config --cflags` `xml2-config --libs`
src/main.c: In function ‘main’:
src/main.c:73:8: error: ‘SDL_WINDOW_MOUSE_CAPTURE’ undeclared (first use in this function)
        SDL_WINDOW_MOUSE_CAPTURE);
        ^
src/main.c:73:8: note: each undeclared identifier is reported only once for each function it appears in
Makefile:21: recipe for target 'obj/main.o' failed
make: *** [obj/main.o] Error 1
zsh: exit 2     make


Rendez à César ce qui est à César et à Dieu ce qui est à Dieu -Cit. J.C.
La persévérance, c'est ce qui rend l'impossible possible, le possible probable et le probable réalisé. -Cit. Robert Half.
Dans toutes les situations, le piège c'était avant, car tu ne voyais pas les murs -Cit. Crevette

Hors ligne

#11 19-07-2016 08:35:52

Péhä
Membre
Lieu : Maine et Loire
Distrib. : handylinux 2.5
Noyau : Linux 3.16.0-4-686-pae
(G)UI : thunard
Inscription : 07-07-2016
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Hello,

après l'install de libsdl2-image-dev, j'obtiens également le même message que kawer

Auia Pieridum peragro loca nullius ante trita solo.....  De rerum natura, Liber IV, Lucrece

Hors ligne

#12 19-07-2016 11:53:38

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Effectivement, je compile depuis Strecht avec la version SDL 2.0.4 et Jessie est en version SDL 2.0.1 :
https://tracker.debian.org/pkg/libsdl2
Et d'après cette page j'utilise SDL_WINDOW_MOUSE_CAPTURE n'apparait qu'a partir de la version 2.0.4 smile
https://wiki.libsdl.org/SDL_GetWindowFlags

Comme j'ai pas implanté de gestion de la souris, j'ai viré cette option.
Il faut faire depuis la racine du dossier:

git pull


puis

make


pour récupérer les changements

J'espére qu'il y en a pas d'autre comme celle ci. Il faudrait que je monte une VM jessie pour checker ça.

Edit: merci pour votre patience en tout cas...

Hors ligne

#13 19-07-2016 12:46:14

Péhä
Membre
Lieu : Maine et Loire
Distrib. : handylinux 2.5
Noyau : Linux 3.16.0-4-686-pae
(G)UI : thunard
Inscription : 07-07-2016
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

re,

j'ai mis à jour mon dossier et retenté un make et voilà ce qu'il me dit:

gcc -o obj/slc.o -c src/slc.c -I inc -Wall -Wextra `sdl2-config --cflags --libs`  -lSDL2main -lSDL2_image -lSDL2 -lSDL2_ttf `xml2-config --cflags` `xml2-config --libs`
src/slc.c: In function ‘readLevelsAttributs’:
src/slc.c:322:6: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
      for (xmlAttrPtr attr = Node->properties; NULL != attr;
      ^
src/slc.c:322:6: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
Makefile:39: recipe for target 'obj/slc.o' failed
make: *** [obj/slc.o] Error 1
 


Auia Pieridum peragro loca nullius ante trita solo.....  De rerum natura, Liber IV, Lucrece

Hors ligne

#14 19-07-2016 13:56:02

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

héhé, merci pour le débuggage.
la version de gcc ne doit pas suivre les préco C99 ou C11 par défaut. Il faut donc le forcer en C11 avec -std=c11
J'ai modifié le makefile en conséquence. (git pull puis make)
Ca devrait faire l'affaire pour cette étape.
Si j'ai le temps, je monterai une VM jessie dès ce soir.
En tout cas c'est bien de le mettre à l'épreuve du feu ce petit programme smile

Hors ligne

#15 19-07-2016 14:19:40

Péhä
Membre
Lieu : Maine et Loire
Distrib. : handylinux 2.5
Noyau : Linux 3.16.0-4-686-pae
(G)UI : thunard
Inscription : 07-07-2016
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

hé hé big_smile

très très sympa en tout cas, les niveaux sont assez balaises ( pour moi qui ne suis pas un grand joueur) et le graphisme est vraiment sympa, manque plus qu'une petite musique tranquille derrière et hop direction l'E3 tongue

Auia Pieridum peragro loca nullius ante trita solo.....  De rerum natura, Liber IV, Lucrece

Hors ligne

#16 19-07-2016 15:26:23

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Si tu as pu tester, ça veut dire que ça marche, c'est cool cool . Et je confirme, il y a des niveaux qui sont costaud...

J'ai pas encore rédigé la doc sur le sujet mais on peut ajouter des niveaux en plaçant dans le dossier level des fichiers slc en plus.
Il y a en ici : http://www.sourcecode.se/sokoban/levels
J'ai fait une régle pour que le jeu sélectionne les niveaux qu'il peut afficher en fonction de la résolution choisit.
En dehors du fichier SokoRobot.slc, les deux autres sont des fichiers pris au hasard sur le web pour faire les tests.
Il faut que je fabrique de nouveaux niveaux, seul le niveau 0 est bon pour le moment. Si vous en imaginez quelques uns, je pourrais les intégrer big_smile

Hors ligne

#17 19-07-2016 18:08:43

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

J'ai monté la VM.
Il manquait aussi le paquet build-essential pour avoir make et les outils de base à la compilation. J'ai mis à jour le README, normalement c'est bon maintenant, ça doit compiler sur Jessie et Stretch

Hors ligne

#18 21-07-2016 21:00:37

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Je viens d'activer une fonctionnalité qui permet d'ouvrir le niveau sur lequel on avait quitter l'application la dernière fois. L'application se dote donc d'un peu de mémoire durable big_smile

Cette fonctionnalité parait simple mais elle m'a donné pas mal de fils à retordre et de travail.
L'application écrit dans le préférences.ini le dernier niveau et vient le lire au prochain démarrage.
Pour cela j'ai codé pas mal de fonctionnalités, qui me permettent maintenant d'enregistrer n'importe quel type de paramètre dans le preferences.ini et de le retrouver plus tard. cool
Je ne sais pas trop ce que je vais en faire mais c'est cool. tongue

Hors ligne

#19 21-07-2016 21:15:46

Péhä
Membre
Lieu : Maine et Loire
Distrib. : handylinux 2.5
Noyau : Linux 3.16.0-4-686-pae
(G)UI : thunard
Inscription : 07-07-2016
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

cool

Auia Pieridum peragro loca nullius ante trita solo.....  De rerum natura, Liber IV, Lucrece

Hors ligne

#20 22-07-2016 07:04:24

Péhä
Membre
Lieu : Maine et Loire
Distrib. : handylinux 2.5
Noyau : Linux 3.16.0-4-686-pae
(G)UI : thunard
Inscription : 07-07-2016
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

re,
je viens de mettre à jour et plus moyen de lancer le jeu, j'obtiens une erreur de segmentation!

Auia Pieridum peragro loca nullius ante trita solo.....  De rerum natura, Liber IV, Lucrece

Hors ligne

#21 22-07-2016 09:57:49

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Oui je viens de constater aussi sous Jessie.
C'est parce que j'ai codé trop vite big_smile
Il faut que j'autorise une valeur nulle ou pas de valeur du tout dans le preferences.ini
Il suffit de mettre deux " à la ligne LevelName pour palier au problème de segmentation.

LevelName = ""


J'ai mis à jour le preferences.ini dans github mais il faut que je trouve une solution plus pérenne. Il faut aussi que j'envisage le fait que l'on ai supprimé le fichier de préférence ou bien qu'il soit vide de certain paramêtre.
Si j'arrive à trouver une solution l'application n'en sera que plus robuste tongue

Hors ligne

#22 26-07-2016 19:11:37

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Pour info, j'ai démarré la refonte de la barre des scores
Il faudra installé la lib libsdl2-gfx-dev en plus

apt install libsdl2-gfx-dev


Elle permet de faire tourner les images et du coup de créer le cercle de progression dans le menu. Je trouve que c'est plus sympa que d'avoir un simple décompte.
 
Le touche m ne fonctionne pas encore. Je veux faire un panneau déroulant mais pour cela, il faut que je devienne maître du temps cool (et des screenshots).
Sinon pour rappel les raccourcis c'est :
m: menu
n: next level
p: previous level
r: reset current level
q: quit

Hors ligne

#23 23-08-2016 15:59:15

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Pour vous tenir au courant, c'est les vacances mais je ne lâche pas l'affaire smile
J'ai recodé une bonne grosse partie du jeu pour changer de mode dans mon utilisation de la SDL2 ( de SDL_WaitEvent vers SDL_PollEvent). En gros je n'attends plus un événement clavier pour faire quelques choses, je suis actif en permanence.
Afin ne pas faire une boucle continue, j'ai introduit la notion de FPS qui permet de mettre en pause le jeu entre deux images, et oui les ordis vont très vite smile
Visuellement, ça ne change strictement rien, mais ça me permettra d'introduire des animations et la transparence dans un futur proche.


Pour ceux qui avaient déjà chargé le code, il faut lancer la commande:

git checkout -- preferences.ini


avant de lancer :

git pull


J'ai ajouté un paramètre en plus pour choisir le nombre d'image par seconde.

framerate = 30




J'ai noté une petite fuite mémoire quand on ouvre le menu, je n'ai pas encore cerné le problème, mais je finirai pas trouver.

Sinon côté graphisme je cherche une police libre, gratuite et compléte pour changer l'actuelle. Si vous avez une idée, je suis preneur.

Hors ligne

#24 23-08-2016 19:59:08

kawer
Adhérent(e)
Lieu : Académie de la Croix-Vraie
Distrib. : Debian stable / ArchLinux
Noyau : Current
(G)UI : xfwm4
Inscription : 08-10-2013
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Pour les polices libre et gratuite, tu peu aller ici : http://www.dafont.com/fr/

Rendez à César ce qui est à César et à Dieu ce qui est à Dieu -Cit. J.C.
La persévérance, c'est ce qui rend l'impossible possible, le possible probable et le probable réalisé. -Cit. Robert Half.
Dans toutes les situations, le piège c'était avant, car tu ne voyais pas les murs -Cit. Crevette

Hors ligne

#25 23-08-2016 21:37:05

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : SokoRobot, un jeu écrit en C par mes soins

Je connais bien dafont, le problème est de trouver la bonne smile
- libre : c'est facile
- lisible : c'est moins évidant
- complète (minuscules/majuscules/accent/:;,=)ç!?€/ etc...) : c'est plus chaud
- qui se fonde dans le thème du jeux : c'est .... le Graal.

Je me demandais si je ne pouvais pas taper dans le stock de police présentes dans les dépôts Debian, j'ai plus de chance d'en trouver une compléte que sur Dafont je pense.

Hors ligne

Pied de page des forums