IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Deplacement pièce jeu de Dame


Sujet :

GTK+ avec C & C++

  1. #41
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    D'accord, mais je me demandais si ma fonction switch est bien placé dans mon interface.c, je devrais pas la sortir, pour en faire une fonction void a part que j’appellerai dans mon bec.c après chaunce des fonctions???

  2. #42
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Il faut imaginer ton programme comme étant en fait deux applications distinctes :
    1. Le moteur de jeu
    2. l'IHM

    L'IHM pilote le moteur de jeu. Elle doit être capable de :
    • demander les coups jouables
    • transmettre le coup joué
    • recevoir le coup joué (gérer aussi la fin de partie gagnée ou perdue)
    • changer la couleur jouée

    La première chose à faire est donc de créer les fonctions nécessaires côté moteur de jeu.
    Ensuite voila un ordre d'exécution possible :
    1. Lancer l'IHM avec un petit menu pour permettre de changer de couleur de jeu. La couleur par défaut jouée par l'humain étant le blanc.
    2. extraction des coups jouables pour n'autoriser que les cases nécessaires
    3. l'humain joue
    4. envoie du coup joué au moteur de jeu
    5. attente du résultat du moteur de jeu
    6. réception du coup joué
    7. mise à jour de l'IHM

    En résumé le code de l'IHM doit bien être séparé du code du moteur de jeu .

  3. #43
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    D'accord, en gros j'ai crée une fonction actualiser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    void actualiser(GtkWidget* jeubouton[9][9], abel* plateaux){
    int i;
    int j;
    GtkWidget *pionblanc;
    GtkWidget *pionnoir;
    GtkWidget *dameblanc;
    GtkWidget *damenoir;
     
    pionblanc= gtk_image_new_from_file ("croixblanc.png");//image pion blanc
    pionnoir= gtk_image_new_from_file ("croixnoir.png");// image pion noir
    dameblanc= gtk_image_new_from_file ("croixnoir.png");// image pion noir
    damenoir= gtk_image_new_from_file ("croixnoir.png");// image pion noir
        for(i=0 ;i<=8 ;i++)
        {
          for(j=0 ;j<=8 ;j++)
            {
               switch ((int)(plateaux->plateau_modele[i][j]))
                 {
                    case O : gtk_button_set_image (GTK_BUTTON(plateaux->jeubouton[i][j]), NULL);  break;
                    case b : gtk_button_set_image(GTK_BUTTON(plateaux->jeubouton[i][j]), pionblanc); break;
                    case B : gtk_button_set_image(GTK_BUTTON(plateaux->jeubouton[i][j]), dameblanc); break;
                    case n : gtk_button_set_image(GTK_BUTTON(plateaux->jeubouton[i][j]), pionnoir);break;
                    case N : gtk_button_set_image(GTK_BUTTON(plateaux->jeubouton[i][j]), damenoir); break;
                    default : break;
                 }
            }
        }}
    J'ai crée le moteur de jeu, c'est à dire que toutes les fonctions nécessaires pour le jeu ont été créées sans GTK. Mais j'en reviens toujours au même problème : je ne vois pas comment relier ces fonctions de jeu avec le tableau de caractères créé avec ces fonctions. Du coup, je bloque sur l'utilisation de cette fonction actualiser.

    Comment dois-je l'introduire ??

    merci encore!!

  4. #44
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Hum... c'est assez bourrin de tout mettre à jour comme tu fais, mais le principe c'est de mettre à jour l'affichage dès qu'il y a eu un déplacement, donc sur click sur le bouton de destination d'un pion.

  5. #45
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Hum... c'est assez bourrin de tout mettre à jour comme tu fais, mais le principe c'est de mettre à jour l'affichage dès qu'il y a eu un déplacement, donc sur click sur le bouton de destination d'un pion.
    Mais comment appeler cette fonction? au niveau de la synthaxe et de l'endroit ou il faudrait la mettre?

  6. #46
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Comme je te l'ai dit, tu dois l'appeler pour mettre à jour l'état de l'interface graphique, quand l'état du damier a changé. Et quand change-t-il ? Quand tu déplaces un pion. Et quelle fonction est appelée automatiquement quand tu déplaces un pion ? La callback du signal "clicked" associé à ton GtkButton de destination. Les actions à faire sont donc:

    • vérifier le bouton pressé est bien la destination d'un déplacement (et donc qu'un pion a déplacer a déjà été sélectionné auparavant)
    • appeler ton moteur de jeu pour vérifier que le déplacement est valide
    • mettre à jour l'état interne du jeu pour refléter le déplacement (déplacement du pion, prise de pion adverse éventuelle, création de dame)
    • mettre à jour l'interface graphique à partir de l'état interne du jeu (c'est ta fonction "actualiser" !)


    Pour le reste, c'est tout de même un devoir, je ne suis pas fan de filer du code prêt à l'emploi... Propose nous quelque chose et on t'aidera à corriger.

  7. #47
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Comme je te l'ai dit, tu dois l'appeler pour mettre à jour l'état de l'interface graphique, quand l'état du damier a changé. Et quand change-t-il ? Quand tu déplaces un pion. Et quelle fonction est appelée automatiquement quand tu déplaces un pion ? La callback du signal "clicked" associé à ton GtkButton de destination. Les actions à faire sont donc:

    • vérifier le bouton pressé est bien la destination d'un déplacement (et donc qu'un pion a déplacer a déjà été sélectionné auparavant)
    • appeler ton moteur de jeu pour vérifier que le déplacement est valide
    • mettre à jour l'état interne du jeu pour refléter le déplacement (déplacement du pion, prise de pion adverse éventuelle, création de dame)
    • mettre à jour l'interface graphique à partir de l'état interne du jeu (c'est ta fonction "actualiser" !)


    Pour le reste, c'est tout de même un devoir, je ne suis pas fan de filer du code prêt à l'emploi... Propose nous quelque chose et on t'aidera à corriger.
    Dans ce cas, faut-il réécrire les fonctions écrites sans GTK en des fonctions qui seront appelées par G-CALLBACK ? C'est à dire modifier les paramètres de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     void mafonction(GtkWidget* widget, gpionter* data) ;
    Ce qui voudrait dire qu'il faudrait tout rentré dans une structure unique?

  8. #48
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Cela veut juste dire que si tu veux pouvoir passer plusieurs arguments à ta callback, il faut forcément les passer dans une structure, parce que tu n'as qu'un seul paramètre que tu peux utiliser pour cela, le gpointer data (et pas gpointer *data).

    Cela ne veut pas dire que tu dois transformer le prototype de la fonction de ton moteur de jeu pour lui faire respecter le prototype de la callback du signal "clicked". Elle ne doit pas devenir une callback elle-même, elle doit se faire appeler par la callback.

    Je ne comprends pas trop ton soucis. Une callback, c'est juste une fonction. À l'intérieur, tu peux appeler une autre fonction à toi, quelle que soit son prototype, du moment que tu lui passes les bons arguments en entrée.

Discussions similaires

  1. jeu de dame en c
    Par MALAKFATINE dans le forum Projets
    Réponses: 1
    Dernier message: 18/09/2006, 09h34
  2. créer jeu de dame en C
    Par SAMUELSalbert dans le forum C
    Réponses: 11
    Dernier message: 31/07/2006, 20h33
  3. Code source en c d'un jeu de dames
    Par ledawa dans le forum Développement 2D, 3D et Jeux
    Réponses: 33
    Dernier message: 22/05/2006, 08h54
  4. [Jeu de dames]Enregistrer les règles...
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/11/2005, 19h39
  5. probleme pour un jeu de dames en python
    Par doudou152 dans le forum Général Python
    Réponses: 7
    Dernier message: 22/04/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo