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#

  1. #1
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    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
    Points : 5 195
    Points
    5 195
    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)...
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre Expert

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    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));
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    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 025
    Points : 5 462
    Points
    5 462
    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
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    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.

  6. #6
    Membre confirmé 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
    Points : 461
    Points
    461
    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 .
    throw new NoSignatureException();

  7. #7
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    @WaterTwelve21
    C'est fait. Ensuite, comment appeler ma méthode dans mon Main ?

  8. #8
    Membre confirmé 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
    Points : 461
    Points
    461
    Par défaut
    Pour ton jeu , tu as besoin de 4 étapes :
    - Remplir le paquet
    - Mélanger son contenue
    - Distribuer en deux tas , un pour chaque joueur
    - et le jeu

    autant d'étapes que tu peux avoir de méthodes , ta phase de comparaison des cartes intervient dans le jeu.
    C'est à dire une fois que tu as les deux cartes à comparer tu appel ta méthode avec en paramètres les deux cartes.

    Conseil : mettre tes listes en statique pour les utilisés partout a travers le code.

    En espérant avoir été utile
    throw new NoSignatureException();

  9. #9
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    D'accord, par contre je n'arrive pas a créer ma liste de cartes. Dois-je utiliser la boucle foreach ? Merci d'avance

  10. #10
    Membre confirmé 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
    Points : 461
    Points
    461
    Par défaut
    Oui comme tu l'avais fait dans ton premier post de ce sujet .

    Pour ajouter un élément a une liste on utilise taListe.Add(element).

    N'oublie pas que tu as une liste de cartes pour au départ vide , tu doit instancier les cartes , cela devrait te donner la puce a l'oreille !
    throw new NoSignatureException();

  11. #11
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par WaterTwelve21 Voir le message
    Conseil : mettre tes listes en statique pour les utilisés partout a travers le code.
    Tu autorises donc un joueur à éventuellement regarder les cartes de sont adversaire?

  12. #12
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    Même si les cartes sont de type Carte ?

  13. #13
    Membre confirmé 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
    Points : 461
    Points
    461
    Par défaut
    Citation Envoyé par ZenZiTone Voir le message
    Tu autorises donc un joueur à éventuellement regarder les cartes de sont adversaire?
    Son jeu , c'est la bataille en mode console , ca doit être surement une simulation avec l'ordinateur alors bon ...

    J'ai peur de pas comprendre
    throw new NoSignatureException();

  14. #14
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    La classe Carte ne sert pas à créer les cartes du jeu ?

  15. #15
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par ludovic.vetter Voir le message
    La classe Carte ne sert pas à créer les cartes du jeu ?
    Un jeux de cartes n'est ni plus ni moins qu'une liste de cartes.

    En C# on peut le traduire comme suit :

    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
     
    public class Carte
    {
       public Carte(EValeur valeur, ECouleur couleur)
       {
          this.Valeur = valeur;
          this.Couleur = couleur;
       }
       Public ECouleur Couleur { get; private set; }
       public EValeur Valeur { get; private set, }
    }
     
    public void main()
    {
       List<Carte> JeuDeCartes = new List<Carte>();
     
       //On alimente notre jeu de carte
       JeuDeCartes.Add(new Carte(EValeur.As, ECouleur.Coeur));
       JeuDeCartes.Add(new Carte(EValeur.2, ECouleur.Coeur));
       JeuDeCartes.Add(new Carte(EValeur.3, ECouleur.Coeur));
       //... et ainsi de suite pour chacune des 52 cartes.
    }

  16. #16
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    Donc si je veux ajouter les cartes automatiquement, sans devoir ajouter des cartes manuellement, ce n'est pas possible ?

  17. #17
    Membre confirmé 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
    Points : 461
    Points
    461
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     private static void RemplirPaquet()
            {
                foreach (Couleur couleur in Enum.GetValues(typeof(Couleur)))
                {
                    foreach (Valeur valeur in Enum.GetValues(typeof(Valeur)))
                    {
                        paquet.Add(new Carte(valeur, couleur));
                    }
                }
            }
    Tu avais déjà tout , aller bonne chance pour le reste !
    throw new NoSignatureException();

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