camillepissaro
Messages postés1Date d'inscriptionlundi 4 octobre 2010StatutMembreDernière intervention 4 octobre 2010
-
4 oct. 2010 à 21:29
Spl3en
Messages postés1Date d'inscriptionvendredi 8 octobre 2010StatutMembreDernière intervention 8 octobre 2010
-
8 oct. 2010 à 01:07
Bonjour , Je suis en deuxième année d'une école d'ingénierie à Casablanca , au Maroc !
je dois programmer le jeu solitaire , le jeux de cartes , en Gtk !!
J'ai trouvé la programmation de tous les jeux , sauf celui la , donc si quelqu'un a un lien à me refiler , ca serait sympa .
Merci
Spl3en
Messages postés1Date d'inscriptionvendredi 8 octobre 2010StatutMembreDernière intervention 8 octobre 2010 8 oct. 2010 à 01:07
Tiens, c'est marrant, y'a un projet exactement similaire dans une école d'ingénieur de deuxième année mais à Paris, et j'entends parler de ce projet de plus en plus avec la date d'échéance qui approche... Drôle de coïncidence ;)
Bon, vu que j'aide déjà quelqu'un, autant que ça serve à tout le monde, donc je t'envoie le même message que je lui ai envoyé, en espérant que ça en aide d'autres.
Je vais te donner les bons axes de programmation pour te faciliter les choses. (Et crois moi, je pense pas me tromper, en te disant que ce que je vais te dire est ce qui est attendu de toi, et que s'il y a un quelconque rapport, c'est à peu près ce qu'il faudra en ressortir.)
Dès le début, commence surtout pas par faire l'interface en GTK, reste en console.
Sinon tu risques de t'emmêler les pinceaux.
Commence à coder une structure "Carte" puis une autre "Tas" (qui représentera un tas de cartes) avec ses petites fonctions, genre "pick_card" (pour retirer une Carte du tas), "put_card" (pour en rajouter une), etc.
La structure devrait ressembler à ça (c'est le minimum) :
typedef struct _Carte
{
int couleur; // Couleur de la carte
int valeur; // Valeur de 1 à 13 de la carte
int visible; // Retournée ? Cachée ?
} Carte;
typedef struct _Tas
{
ListeChainee *liste_carte;
int type; // si c'est la pioche, si c'est la défausse, si c'est un tas de jeu, ou si c'est un des quatres tas en haut à droite
} Tas;
Pour les listes chaînées, je te conseille d'utiliser les GQueue puisque tu as droit au framework GTK, donc GLib.
Si t'aimes pas les GQueue, ou si tu veux tout simplement avoir du code source sous la main, je te met à disposition mes propres fonctions de file/pile, BbQueue http://spl3en.alwaysdata.net/src/C/BbQueue/
Bref, en tout cas, garde bien en tête que ce projet c'est de la liste chaînée A FOND.
Chaque "Tas" est une liste chaînée, et chaque Carte est un élément de ces listes.
En changeant une carte d'un tas à un autre, il faut que tu fasse transiter cet élément d'une liste chaînée à une autre.
C'est pourquoi je te conseille fortement d'utiliser GQueue ou BbQueue, à moins que tu sois sûr et certain de l'efficacité de tes fonctions de file/pile.
Toujours en mode console, teste tes fonctions "pick_card" et "put_card", regarde l'état de tes files, si tout va bien etc.
Attention, "put_card" devra évidemment checker la carte du dessus du tas visé, et vérifier qu'elle correspond bien à valeur+1 de la valeur de la carte.
Une fois que ces deux fonctions marchent bien, et seulement à ce moment là, commence à programmer ton interface en GTK.
Côté GTK :
Je te déconseille GDK si tu t'y connais pas. C'est d'un niveau d'exigence assez élevé, et le rendu d'affichage risque d'être assez décevant si tu n'y connais rien en multi-threading.
Utilise simplement GTK pour te simplifier la vie, c'est un conseil. Après forcément ça sera beaucoup moins beau mais bon...
Tu fais une GtkTable, et tu y positionnes comme il faut des GtkBox : 1 pour la pioche, 1 pour la défausse, 1 pour les 4 cartes en haut à droite et 1 pour les tas de jeu.
Eventuellement, tu peux en rajouter une en bas, qui stockera la carte pickée en cours.
Pour faire un truc pas trop moche, je te conseille de faire apparaître la dernière carte en tant que GtkButton, avec la propriété "relief" à GTK_RELIEF_NONE
(Cf : GtkReliefStyle, g_object_set, http://library.gnome.org/devel/gtk/unstable/GtkButton.html). Ainsi quand l'utilisateur clique dessus, la carte cliquée devient "pickée" et un deuxième clic sur le tas entraîne un "put_card", qui retourne 1 en cas de succès ou 0 en cas d'échec, ce qui te permet d'ajuster ton affichage aussi (1 => la carte pickée va sur le tas visé, 0 => la carte retourne à sa place)
Met des GtkImage à l'intérieur de tes GtkButton, affichée en fonction de carte->valeur.
Pour les conditions de victoires, il te suffit de checker si toutes les listes chaînées défausse + jeu + tas de jeu sont vides, si oui => c'est gagné.
Voilà, je peux pas vraiment aider plus que ça ... Y'a plus qu'à coder tout ça !