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

 C Discussion :

Jeux de dames


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 11
    Par défaut Jeux de dames
    Salut ,
    Je me dirige vers vous car j'ai comme projet un jeux de dames à rendre pour aprés les vacances .
    Cependant je suis bloqués dés le début car je ne vois pas comment afficher Mon damier avec les pions (op pour les faire se déplacer par la suite ) .
    Voilà mon code(faites pas attention certaine variable ne sont pas encore utilisé j'avais anticipé pour la suite) :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #include <stdio.h>
    #include <stdlib.h>
    //#include <SDL2/SDL.h>
     
     
    void affichages ()
    {
        system("cls");
     
        int PN = 1; //Pion noir
        int PB = 2; //Pion blanc
        int DM = 3; //Dame noir
        int DB = 4; //Dame blanche
        int V = 0;  //Case vide
        int Afficheur;
        int compteur;
        char NomJoueur1,NomJoueur2;
        int Coordonne[10][10] = {{1,2,3,4,5,6,7,8,9,10},1,2,3,4,5,6,7,8,9,10};
        int x ,y;
        int continuer = 1;
     
     
        printf("Nom joueur 1 : ");
        scanf("%s",&NomJoueur1);
     
        printf("\nNom joueur 2 : ");
        scanf("%s",&NomJoueur2);
     
        system("cls");
     
     
     
        while(continuer == 1)
        {
     
     
            printf("   | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |");
            printf("\n   _________________________________________\n");
            for(Afficheur = 1; Afficheur <= 10 ; Afficheur++)
            {
                if(Afficheur==10)
                {
                    printf("%d | . |   | . |   | . |   | . |   | . |   |\n",Afficheur);
     
                }
                else
                    {
                        if(Afficheur%2 == 0)
                        {
                            printf("%d  | . |   | . |   | . |   | . |   | . |   |\n",Afficheur);
                            printf("   _________________________________________\n");
                        }
                        if(Afficheur%2 != 0)
                        {
                            printf("%d  |   | . |   | . |   | . |   | . |   | . |\n",Afficheur);
                            printf("   _________________________________________\n");
                        }
            }
     
     
        }
        printf("Continuer 0/1 : ");
        scanf("%d",&continuer);
     
        }
        return 0;
     
    }
    Merci de vos réponse .

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 600
    Par défaut
    Bonjour,

    Si tu t'orientes en affichage pur texte, il faut définir une représentation des pions
    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
    29
    enum ValeurCase {
        V = 0,  //Case vide
        PN = 1, //Pion noir
        PB = 2, //Pion blanc
        DM = 3, //Dame noire
        DB = 4, //Dame blanche
        NbTypeCases
    };
    const char Images[3][NbTypeCases] = 
    {  "   ", " x ", " o ", "(X)", "(o)"
    };
     
    Ensuite la ligne 50 peut être remplacée par l'appel de 
    void affiche_ligne( int table[10][] , int numLigne , int ligne_est_paire )
    {
       int colonne;
       printf("%2d |" , num_ligne+1 );
       for ( colonne = 0 ; colonne < 10 ; ++colonne )
       {
          if ( (col % 2) == ligne_est_paire )
             printf(" . |");
          else
          {
              printf( Images[table[num_ligne][colonne]] );
              printf("|");
          }
       }
       printf("\n");
    }

  3. #3
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Cela m'a l'air pas trop mal parti, ta difficulté provient du fait que tu affiches ton damier ligne par ligne. Or il faut l'afficher case par case puisque son contenu évolue sans cesse (bon, en fait on peut le faire en affichant une ligne puis en repassant dessus mais il faut avoir recours à des manips pas forcément portables et un peu crades..). Tu as donc au moins besoin d'une boucle pour les ordonnées (axe y) et d'une autre imbriquée pour les abscisses (axe x), je te laisse chercher un peu à partir de là.

    Une petite remarque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        int PN = 1; //Pion noir
        int PB = 2; //Pion blanc
        int DM = 3; //Dame noir
        int DB = 4; //Dame blanche
        int V = 0;  //Case vide
    Sont-ce les valeurs des constantes que tu utilises dans ton tableau pour identifier le contenu des cases ? Un type enum serait plus approprié ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef enum {
        Vide = 0,
        PionNoir,
        PionBlanc,
        DameNoire,
        DameBlanche
    } ContenuCase;
    Edit: grillé

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 11
    Par défaut
    Merci pour vos deux réponse
    J'ai une question à quoi sert le type enum et quand doit-on l'utiliser ??

    Dalfab j'ai pas compris cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const char Images[3][NbTypeCases] = 
    {  "   ", " x ", " o ", "(X)", "(o)"
    }
    Je sais que ça défini la représentation de chaque pion mais pourquoi tu as mis "Images[3][NbTypeCases]" ====> ça signifie quoi

    EDIT : Je reviens vers vous car je n'arrive pas à faire revenir à la ligne mon damier quand il arrive à la 10 eme case :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    void affichages ()
    {
        system("cls");
     
        enum ValeurCase {
            V = 0,  //Case vide
            PN = 1, //Pion noir
            PB = 2, //Pion blanc
            DM = 3, //Dame noire
            DB = 4, //Dame blanche
            NbTypeCases
        };
        const char Images[3][NbTypeCases] =
        {  "   ", " x ", " o ", "(X)", "(o)"
        };
        int colonne;
        int ligne;
        int nbligne;
        int nbcolonne;
        int continuer = 1;
    while(continuer == 1)
        {
            for(colonne=1;colonne<=10;colonne++)
            {
                for(ligne=1;ligne<=10;ligne++)
                {
                    if((colonne%2 == 0) && (ligne%2 !=0))
                    {
                        printf(" . |");
                    }
                    else if((colonne%2 == 0) && (ligne%2 ==0))
                    {
                        printf("   |");
                    }
                    else if((colonne%2 != 0)&& (ligne%2 !=0))
                    {
                        printf("   |");
                    }
                    else if((colonne%2 != 0)&& (ligne%2 == 0))
                    {
                        printf(" . |");
                    }
     
                }
     
     
            }
     
     
        printf("\nContinuer 0/1 : ");
        scanf("%d",&continuer);
        }
        return 0;
     
        }
    EDIT 2 :J'ai réussi manquait juste un printf("\n); à la ligne 44 .

    Bon par contre maintenant je ne sais pas comment placer mes pions ...

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Une énumération (enum en C) est simplement un entier qui peut prendre un nombre arbitraire mais fini de valeurs labellisées : auquelles on a donné un nom.
    Tu peux voir cela comme une collection de constantes liées sémantiquement.

    Un exemple courant est celui des cartes à jouer :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #include <stdio.h>
     
     
    /* les valeurs entières de cette énumération sont indéfinies, car elles ne font pas sens */
    typedef enum {
        Spades,   // Pique
        Hearts,   // Coeur
        Diamonds, // Carreau
        Clubs     // Trèfle
    } Suit; // Couleur
     
    /* les valeurs entières de cette énumération sont précisément définies, car on veut pouvoir effectuer des comparaisons */
    typedef enum {
        V2 = 2,                           // la valeur d'une entrée est incrémentée de 1 par rapport à la précédente
        V3, V4, V5, V6, V7, V8, V9, V10,  // V3 == 3, V4 == 4, etc...
        Jack,                             // Valet == 11
        Queen,                            // Dame  == 12
        King,                             // Roi   == 13
        Ace                               // As    == 14
    } Value; // Valeur
     
    struct card {
        Suit  suit;
        Value value;
    };
     
     
    const char *suit_to_str(Suit suit) {
        switch (suit) {
            case Spades:
                return "Spades";
            case Hearts:
                return "Hearts";
            case Diamonds:
                return "Diamonds";
            case Clubs:
                return "Clubs";
        }
     
        return NULL; // jamais atteint
    }
     
    void card_print(const struct card *c) {
        printf("the %d of %s!", c->value, suit_to_str(c->suit));
    }
     
    void card_compare(const struct card *c1, const struct card *c2) {
        const struct card *best = (c1->value < c2->value) ? c2 : ((c1->value > c2->value) ? c1 : NULL);
     
        if (best) {
            printf("winner: "); card_print(best);
        }
        else
            printf("it's a draw!"); // match nul !
    }
     
    int main(int argc, char *argv[]) {
        struct card c1 = { .suit = Hearts, .value = V7   }; // 7 de Coeur
        struct card c2 = { .suit = Spades, .value = Jack }; // valet de Pique
     
        card_print(&c1); printf("\n"); // affiche : "the 7 of Hearts!"
        card_print(&c2); printf("\n"); // affiche : "the 11 of Spades!"
     
        card_compare(&c1, &c2); printf("\n"); // affiche "winner: the 11 of Spades!"
     
        return 0;
    }
    Un type enum est implémenté par le compilateur sous la forme d'un entier d'un type assez large pour contenir toutes les valeurs définies par le programmeur. En pratique probablement un int, mais pas forcément.

    À noter qu'il est - comme souvent en C - possible de faire n'importe quoi avec une variable de type enum et notamment lui affecter des valeurs qui ne sont pas listées dans sa définition !

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 852
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par daftangel Voir le message
    J'ai une question à quoi sert le type enum et quand doit-on l'utiliser ??
    Bonjour

    Pour rajouter à la très bonne réponse de Matt_Houston, ça permet d'associer un nombre (pas forcément très lisible) à un label (plus clair pour l'humain qui doit relire le code). Pas obligatoire mais très pratique.

    Citation Envoyé par daftangel Voir le message
    Dalfab j'ai pas compris cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const char Images[3][NbTypeCases] = 
    {  "   ", " x ", " o ", "(X)", "(o)"
    }
    Je sais que ça défini la représentation de chaque pion mais pourquoi tu as mis "Images[3][NbTypeCases]" ====> ça signifie quoi
    Chaque élément "image[x]" possède 3 caractères. Et là, dalfab a plutôt chié dans la colle car en réalité, il en possède 4 (ne pas oublier le '\0' terminant toute chaine) !!!

    Et si on veut faire plus simple, comme chaque élément est invariant, on peut alors les stocker dans la zone statique du code et ne mémoriser que les adresses de ces éléments. Et comme chaque adresse se stocke dans un pointeur, un simple tableau de pointeurs suffit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const char const *Images[NbTypeCases] = 
    {  "   ", " x ", " o ", "(X)", "(o)"
    }
    Citation Envoyé par daftangel Voir le message
    Bon par contre maintenant je ne sais pas comment placer mes pions ...
    Il faut que chaque case connaisse le pion qui se trouve sur elle. Ensuite, au moment où tu affiches la case[x], ben tu affiches aussi le pion qui est dessus...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Hep, hep hep ! J'y suis pour rien, moi !

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 11
    Par défaut
    Il faut que chaque case connaisse le pion qui se trouve sur elle. Ensuite, au moment où tu affiches la case[x], ben tu affiches aussi le pion qui est dessus...
    Désolé mais je ne sais toujours pas comment les inclure dans mon code ...

  9. #9
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    J'ai l'impression que tu te concentres un peu trop sur l'affichage à l'écran de ton damier. Bien sûr c'est très important et ça permet de vérifier l'avancée de ton programme, mais ce n'est qu'une "couche" de ce programme.

    Il existe plein de façons de représenter un damier avec ses pions, qui ont divers avantages. Pour faire quelque chose de simple, tu peux choisir un tableau de 10*10 char; chacune des cases du damier contient une valeur (0: vide, 1: pion blanc, etc.)

    Le tableau en question est passé en argument à la fonction d'affichage et tu sais donc pour chaque coordonnée quel pion est dessus: board[2][2] == 1 signifie qu'il y a un pion blanc à la case 2,2 (ou 3,3 si tu commences à compter à partir de 1).

    Le même tableau peut être utilisé pour vérifier qu'un coup est valide ou encore pour déterminer le meilleur coup, si ton programme doit contenir une intelligence artificielle.

Discussions similaires

  1. Développement jeux vidéo : quelles bases à avoir absolument ?
    Par Ezechiel dans le forum Développement 2D, 3D et Jeux
    Réponses: 175
    Dernier message: 20/02/2018, 16h14
  2. Réponses: 5
    Dernier message: 02/04/2013, 15h15
  3. Créer un jeux de Dames avec vidéo?
    Par upi01 dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 24/08/2010, 15h54
  4. jeux de caractères
    Par AHO dans le forum InterBase
    Réponses: 11
    Dernier message: 05/02/2003, 18h45
  5. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47

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