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 :

Comparaison de deux valeurs string dans une liste (jeu de carte)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Comptable en formation en informatique
    Inscrit en
    Août 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Comptable en formation en informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 21
    Par défaut Comparaison de deux valeurs string dans une liste (jeu de carte)
    Bonjour,

    Je fais référence à mon sujet "Impossible d'utiliser une variable créée dans une méthode "public static void"" qui a été résolu.

    Je fais un programme de jeu de cartes, j'ai déjà créé les jeux des deux joueurs (ce sont deux listes de cartes).

    Maintenant, je souhaiterai associer une valeur à chaque carte (genre deux de piques a une valeur 2 alors qu'un trois de piques a une valeur 3), cela pour pouvoir voir si la carte 1 du joueur 1 est plus forte que la carte 1 du joueur 2.

    Voici mon code :

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace Bataille1
    {
        class Program
        {
                enum Couleur
    		    {
    			    pique,
    			    carreau,
    			    coeur,
    			    trèfle
    		    }	
     
    		    enum Valeur
    		    {
    			    Deux = 1,
    			    Trois= 2,
    			    Quatre = 3,
    			    Cinq = 4,
    			    Six = 5,
    			    Sept = 6,
    			    Huit = 7,
    			    Neuf = 8,
    			    Dix = 9,
    			    Valet = 10,
    			    Dame = 11,
    			    Roi = 12,
    			    As = 13
     
     
    		    }
     
                public static void Main(string[] args)
                {
                    //tableau pour le jeu de carte
                    string[] JeuCarte = new string[52];
     
                    int i = 0;
     
                    //création des cartes
                    foreach (string name2 in Enum.GetNames(typeof(Valeur)))
                    {
                        foreach (string name in Enum.GetNames(typeof(Couleur)))
                        {
                            JeuCarte[i] = string.Format("{0} de {1}", name2, name);
                            i++;
     
                        }
                    }
     
                    //mélange des cartes et création des jeux des joueurs
                    Random rnd = new Random();
                    string[] JeuCarteRandom = JeuCarte.OrderBy(x => rnd.Next()).ToArray();
                    string[] Joueur1 = new string[52];
                    string[] Joueur2 = new string[52];
     
                    //répartition des cartes aux joueurs
                    int j = 0;
                    int k = 0;
     
                    while (j < 26)
                    {
     
                        Joueur1[j] = JeuCarteRandom[k];
                        j++;
                        k++;
                    }
     
                    j = 0;
     
                    while (j < 26)
                    {
     
                        Joueur2[j] = JeuCarteRandom[k];
                        j++;
                        k++;
                    }
     
                    //conversion des tableaux en liste
                    List<string> Jou1 = new List<string>(Joueur1);
                    List<string> Jou2 = new List<string>(Joueur2);
     
     
                    //jeu
                    Console.WriteLine("--------------Bataille---------------");
                    Console.ReadLine();
                }
        }
    }
    J'espère que c'est assez clair... ou pas

    Merci d'avance et bonne fin d'après-midi.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    plutôt que d'avoir une liste de string pour tes cartes, il serait peut-être plus simple de créer une classe ou une structure (j'opterais pour une classe)
    de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    class Carte
    {
       private string nom;
       private int saValeur;
     
      // tu fais les accesseurs (je n'ai pas VS sous la main)
    }
    ET comme ça, vu que tu as une liste de classe, tu peux très bien faire ta comparaison voir, implémenter une méthode dans ta classe Carte qui ferait un:

    "EstPlusFort()" te retournant : 1 si plus fort, 0 si égal, -1 si moins fort)...

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Tu peux aussi t'amuser avec les méthodes d'extensions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static class CardExtension
    {   
         public static bool IsGreaterThan(this int op1, int op2)
            {
                return op1> op2;
            }
    }
    A l'usage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var roi =(int) Valeur.Roi;            
    var quatre =(int) Valeur.Quatre;
    Console.WriteLine(roi.IsGreaterThan(quatre));

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Citation Envoyé par hegros Voir le message
    Tu peux aussi t'amuser avec les méthodes d'extensions
    Ou bien la surcharge d'opérateur (< et > )!

    https://msdn.microsoft.com/fr-fr/library/8edha89s.aspx

  5. #5
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    Comme l'a expliqué TheMonz , appliqué la programmation objet en créant une classe "Carte" par exemple ( puisque un paquet de cartes est composé de ... cartes )

    Une carte a une valeur et une couleur ; tu peux donc garder tes enums et déclaré ta classe comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public class Carte
        {
            public Carte(Valeur valeur, Couleur couleur)
            {
                this.Valeur = valeur;
                this.Couleur = couleur;
            }
     
            public Valeur Valeur { get; set; }
            public Couleur Couleur { get; set; }
     
    ... }
    Ainsi ton paquet est une liste de carte : List<Carte> paquet = new List<Carte>()

    Ensuite pour faire les comparaisons , les propositions des commentaires précédents sont correctes , on peut voir les choses comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     private static void Analyse(Carte carteDuJ1, Carte carteDuCPU)
            {
                bool victory = false;
                if (((int)carteDuJ1.Valeur) > ((int)carteDuCPU.Valeur)){
                    Write("You Win");
                    victory = true;
     
    [...]
     
                }
    Une manière d'y passer parmi tant d'autres , bonne continuation .

  6. #6
    Membre averti
    Homme Profil pro
    Comptable en formation en informatique
    Inscrit en
    Août 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Comptable en formation en informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 21
    Par défaut
    @WaterTwelve21
    C'est fait. Ensuite, comment appeler ma méthode dans mon Main ?

  7. #7
    Membre averti
    Homme Profil pro
    Comptable en formation en informatique
    Inscrit en
    Août 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Comptable en formation en informatique

    Informations forums :
    Inscription : Août 2015
    Messages : 21
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    salut

    plutôt que d'avoir une liste de string pour tes cartes, il serait peut-être plus simple de créer une classe ou une structure (j'opterais pour une classe)
    de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    class Carte
    {
       private string nom;
       private int saValeur;
     
      // tu fais les accesseurs (je n'ai pas VS sous la main)
    }
    ET comme ça, vu que tu as une liste de classe, tu peux très bien faire ta comparaison voir, implémenter une méthode dans ta classe Carte qui ferait un:

    "EstPlusFort()" te retournant : 1 si plus fort, 0 si égal, -1 si moins fort)...
    Donc si je suis ta logique, je dois créer une classe par carte, ou uniquement par Valeur de carte ?

    Merci d'avance pour les précisions et meilleures salutations.

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/10/2012, 14h51
  2. Réponses: 1
    Dernier message: 28/07/2006, 09h17
  3. Réponses: 2
    Dernier message: 17/05/2006, 18h19
  4. calcul de valeurs présentes dans une liste de résultat
    Par Makaveli33 dans le forum Access
    Réponses: 8
    Dernier message: 15/05/2006, 19h03
  5. Tester qu'une valeur existe dans une "liste"
    Par Oluha dans le forum Langage
    Réponses: 12
    Dernier message: 04/08/2005, 23h01

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