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 :

Jeu de fléchettes


Sujet :

C#

  1. #1
    Membre à l'essai Avatar de VTT85
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Jeu de fléchettes
    Bonjour à tous,

    Je suis un gros gros débutant sur c# mais j'adore apprendre et je ne m’arrêterais pas en si bon chemin..

    Mon projet est de développer une application .exe pour récupérer les données d'un vrai jeu de fléchettes et afficher les scores en temps réel.

    Bref. Je suis au tout début et j'aimerais déjà essayer de développer une appli console pour voir si le jeu '301' peut fonctionner.

    Si vous avez des idées de comment faire je suis un peu perdu...

    Merci beaucoup !!

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 640
    Points : 2 149
    Points
    2 149
    Par défaut
    Bonsoir,

    Bon je t’avoue que je n'ai plus du tout les règles du jeu de fléchettes en tête (donc adapte si je fais une erreur) mais tu pourrais faire comme ceci :

    • Faire un menu pour sélectionner le mode : 501, 301, etc ...
    • Rentrer le nombre de joueurs, ainsi que leur nom, dans l'ordre de tir.
    • A chaque tir, rentrer le score que le joueur a atteint et le déduire de son capital.
    • Dès qu'un joueur arrive a 0, le programme affiche le nom du vainqueur et ne prends plus de données.


    Niveau classe, je pense qu'une seule classe de type Joueur suffira, avec un nom et un total de point. Ces mêmes joueurs seront dans une liste de joueur, ordonnés selon l'ordre de tir.
    Il suffira de passer au prochain Joueur a chaque tour, et ainsi de suite.

    Niveau affichage, tu peux afficher en premier les scores et les noms de chacun, puis en dessous le tour en cours, le nom du joueur et le programme qui attends les points a déduire.

    Une fois que tu as finis le programme et qu'il marche parfaitement, tu pourrais passer a la vitesse supérieur et par exemple pouvoir rentrer les combinaisons que les joueurs font, en montrer l'historique a la fin de la partie. Et pourquoi pas que le programme lui même sache si la somme doit être déduit ou non.

    Rien de bien méchant en somme, mais n'hésite pas a revenir par ici si quelque chose coince .

  3. #3
    Membre à l'essai Avatar de VTT85
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Bon voilà je t'avoue qu'étant un gros débutant, je vais prendre un peu plus de temps avant de développer un menu pour choisir le nombre de joueur etc...

    Déjà j'ai fais ça... Je pense avec beaucoup d'erreurs mais ne me jugez pas je débute

    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
    using System;
     
    namespace ConsoleApp7
    {
        class Program
        {
     
            static void Main(string[] args)
            {
                Score();
                Console.ReadKey();
            }
     
            static int QuelFléchettes()
            {
                int fchtes;
                Random flechettes = new Random();
                fchtes = flechettes.Next(1, 20);
                Console.WriteLine(fchtes);
                return fchtes;
            }
     
            static void Score()
            {
                int score = 301;
                int[] tableau = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25 };
                while (score != 0)
                {
                    if (score >= 0)
                    {
                        int round = 0;
                        while (round < 3)
                        {
                            int flechettes = QuelFléchettes();
                            int joueur = Joueur();
                            int i = 0;
                            while (flechettes != i)
                            {
                                i++;
                            }
                            score -= (tableau[i - 1]);
                            Console.WriteLine("Fléchettes a touché le " + (tableau[i - 1]));
                            Console.WriteLine("Le nouveau score du joueur 1 est de " + score);
                            round++;
                        }
                    }
                    else
                    {
                        //score = 301;
                    }
                }
            }
     
            static int Joueur()
            {
                int player = 0;
                //if
                //{
                player = 1;
                //}
                return player;
            }
     
            static int NbPoints(int pts)
            {
                int points = 301;
                points -= pts;
                return points;
            }
        }
    }
    Dans la méthode score le else en bas au lieu d'avoir score = 301, j'aimerais que le code me renvoie la valeur du round d'avant sachant qu'un round c'est 3 fléchettes mais je n'arrive pas à m'y prendre

    Merci de ton aide en tout cas PixelJuice

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici une approche un peu plus "objet" (POO) du jeu.
    Essaie de comprendre chaque partie du code, je l'ai volontairement fait assez simple et lisible.

    Par contre je n'ai pas comprit l'histoire des 3 fléchette par rounds. Ça se cumule ou il garde le meilleur score des 3 ?

    Code c# : 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
        class Program
        {
            static void Main(string[] args)
            {
                Jeu();
                Console.ReadKey();
            }
     
            static void Jeu()
            {
                // Définition
                int typeDeJeu = 301;
                int[] pointCible = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25 };
                CJoueur J1 = new CJoueur("Eric", typeDeJeu);
                CJoueur J2 = new CJoueur("Marc", typeDeJeu);
     
                // Créer la liste des joueurs vide
                List<CJoueur> Joueurs = new List<CJoueur>();
                // Ajoute les joueurs à la liste
                Joueurs.Add(J1);
                Joueurs.Add(J2);
     
                // Créer la cible
                CCible Cible = new CCible(pointCible);
     
                // Initialise le premier tour
                int tour = 1;
     
                // Boucle infini
                while (true)
                {
                    Console.WriteLine("------------- Tours " + tour + " -------------");
     
                    // Pour chaque joueurs de la liste
                    foreach (CJoueur JoueurActuel in Joueurs)
                    {
                        Console.WriteLine("A " + JoueurActuel.nom + " de jouer. Il a actuellement " + JoueurActuel.points + " point(s)");
                        int score = Cible.PointAuHasard();
                        JoueurActuel.points -= score;
                        Console.WriteLine(JoueurActuel.nom + " à fait " + score + " point(s). Il a maintenant " + JoueurActuel.points + " point(s)");
                        Console.WriteLine();
     
                        // Vérifie si le JoueurActuel à gagné
                        if (JoueurActuel.points <= 0)
                        {
                            Console.WriteLine(JoueurActuel.nom + " à gagné en " + tour + " tour !");
                            // On quitte la méthode Jeu()
                            return;
                        }
                    }
     
                    // Incrémente le tour
                    tour++;
                    Console.WriteLine("\n");
                }
            }
     
            // Le joueur
            public class CJoueur
            {
                public string nom;
                public int points;
     
                public CJoueur(string nom, int points)
                {
                    this.nom = nom;
                    this.points = points;
                }
            }
     
            // La cible. Elle gère aussi des lancés aléatoires
            public class CCible
            {
                int[] points;
                Random rnd = new Random();
     
                public CCible(int[] points)
                {
                    this.points = points;
                    if (points == null || points.Length == 0)
                        throw new Exception("La cible est vide");
                }
     
                public int PointAuHasard()
                {
                    int num = rnd.Next(0, points.Length);
                    return points[num];
                }
            }
        }

    Tu avais aussi un petit problème avec le Random qui te donnais plusieurs fois d'affilé les mêmes nombres.

    Dans l'idée, il vaut mieux le créer une seul fois Random rnd = new Random(); et le réutiliser plusieurs fois avec la méthode .Next()

  5. #5
    Membre à l'essai Avatar de VTT85
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Je rencontre à nouveau un problème...

    Bon déjà en me creusant la tête j'ai ce programme qui me permet de définir le nombre de joueurs et le nom des joueurs :

    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
     
    class Joueur
        {
            public void NomJoueur()
            {
     
                // Menu de définition du nombre de joueurs
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Menu choix nombre de joueurs");
                Console.ResetColor();
     
                //user choisit le nb de joueurs
                int nombre = 0;
                bool reel = false;
                Console.WriteLine("\nCombien de joueurs 1-8 ?");
     
                //si ce n'est pas un chiffre compris entre 1 et 8, ça boucle
                while (reel == false || nombre > 8 || nombre < 1)
                {
                    reel = int.TryParse(Console.ReadLine(), out nombre);
                    if (reel == false || nombre > 8 || nombre < 1)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Ce n'est pas un chiffre compris entre 1 et 8");
                        Console.ResetColor();
                    }
                }
     
                // définition des noms des joueurs
                List<string> assignJoueur = new List<string>();
                for (int i = 0; nombre > i; i++)
                {
                    int j = i + 1;
                    Console.WriteLine("\nNom du joueur : " + j);
                    assignJoueur.Add(Console.ReadLine());
                }
                int count = 0;
                foreach (string element in assignJoueur)
                {
                    count += 1;
                    Console.WriteLine("\nJoueur " + count + " : " + element);
                }
            }
    Mon problème ensuite est :

    -Attribuer à chaque joueur le score de 301 au départ;
    -Un jour effectue un round et lance 3 fléchettes (en appuyant sur une touche à chaque fois par exemple);
    -Le score des 3 flèches est déduit de son score actuel;
    -Même punition pour le deuxième joueur etc... (en fonction du nombre de joueurs);
    -Lorsqu'un joueur dépasse zéro il revient à son score du round d'avant
    -Le premier qui est à zéro pile poil gagne la partie

    Je ne sais pas comment m'y prendre maintenant...

    Merci par avance

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici comment je l'implémenterai dans ce que je t'ai proposé.
    As tu comprit le fonctionnent des classes CCible et CJoueur ?

    Code c# : 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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
        class Program
        {
            static void Main(string[] args)
            {
                Jeu();
                Console.ReadKey();
            }
     
            static void NomJoueur()
            {
     
                // Menu de définition du nombre de joueurs
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Menu choix nombre de joueurs");
                Console.ResetColor();
     
                //user choisit le nb de joueurs
                int nombre = 0;
                bool reel = false;
                Console.WriteLine("\nCombien de joueurs 1-8 ?");
     
                //si ce n'est pas un chiffre compris entre 1 et 8, ça boucle
                while (reel == false || nombre > 8 || nombre < 1)
                {
                    reel = int.TryParse(Console.ReadLine(), out nombre);
                    if (reel == false || nombre > 8 || nombre < 1)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Ce n'est pas un chiffre compris entre 1 et 8");
                        Console.ResetColor();
                    }
                }
     
                // définition des noms des joueurs
                List<string> assignJoueur = new List<string>();
                for (int i = 0; nombre > i; i++)
                {
                    int j = i + 1;
                    Console.WriteLine("\nNom du joueur : " + j);
                    assignJoueur.Add(Console.ReadLine());
                }
                int count = 0;
                foreach (string element in assignJoueur)
                {
                    count += 1;
                    Console.WriteLine("\nJoueur " + count + " : " + element);
                }
            }
     
            static void Jeu()
            {
                // Définition
                int typeDeJeu = 301;
                int[] pointCible = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25 };
     
                List<CJoueur> Joueurs = new List<CJoueur>();
     
                int nombre = 0;
                // Choix du nombre de joueur, tant que l'on a pas de réponse correcte
                while (true)
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("Menu choix nombre de joueurs");
                    Console.ResetColor();
     
                    int.TryParse(Console.ReadLine(), out nombre);
     
                    // Si la réponse est correct on quitte la boucle de choix
                    if (nombre >= 1 && nombre <= 8)
                        break;
     
                    // Afficahge en cas de réponse incorrecte
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Ce n'est pas un chiffre compris entre 1 et 8\n");
                    Console.ResetColor();
                }
     
                // Choix du nom des joueurs
                for (int i = 0; nombre > i; i++)
                {
                    Console.WriteLine("\nNom du joueur : " + (i + 1));
                    // Récupère le nom
                    string nom = Console.ReadLine();
     
                    // Crée le joueur
                    CJoueur J = new CJoueur(nom, typeDeJeu);
                    // Ajoute le joueur
                    Joueurs.Add(J);
                }
     
                // Créer la cible
                CCible Cible = new CCible(pointCible);
     
                // Initialise le premier tour
                int tour = 1;
     
                Console.WriteLine();
                // Boucle infini
                while (true)
                {
                    Console.WriteLine("------------- Tours " + tour + " -------------");
     
                    // Pour chaque joueurs de la liste
                    foreach (CJoueur JoueurActuel in Joueurs)
                    {
                        Console.WriteLine("A " + JoueurActuel.nom + " de jouer. Il a actuellement " + JoueurActuel.points + " point(s)");
     
                        // Points total des 3 lancés
                        int pointslancer = 0;
     
                        // Pour chaque lancé
                        for (int lancer = 1; lancer <= 3; lancer++)
                        {
                            // Point du lancé
                            int points = Cible.PointAuHasard();
                            // Ajoute au point total des 3 lancés
                            pointslancer += points;
                            Console.WriteLine(" - Lancer " + lancer + " : " + points + " point(s). Total des 3 lancés : " + pointslancer + " point(s)");
     
                            // Si son score est inférieur ou égale à 0 il arrête de lancé
                            if (JoueurActuel.points - pointslancer <= 0)
                            {
                                Console.WriteLine(" - Le joueur arrête de lancer des fléchettes");
                                break;
                            }
                        }
     
                        // Si son score n'est pas négatif ou soustrait
                        if (JoueurActuel.points - pointslancer >= 0)
                            JoueurActuel.points -= pointslancer;
     
                        Console.WriteLine(" - " + JoueurActuel.nom + " a maintenant " + JoueurActuel.points + " point(s)");
                        Console.WriteLine();
     
                        // Vérifie si le JoueurActuel à gagné
                        if (JoueurActuel.points <= 0)
                        {
                            Console.WriteLine(JoueurActuel.nom + " à gagné en " + tour + " tour !");
                            // On quitte la méthode Jeu()
                            return;
                        }
                    }
     
                    // Incrémente le tour
                    tour++;
                    Console.WriteLine();
                }
            }
     
            // Le joueur
            public class CJoueur
            {
                public string nom;
                public int points;
     
                public CJoueur(string nom, int points)
                {
                    this.nom = nom;
                    this.points = points;
                }
            }
     
            // La cible. Elle gère aussi des lancés aléatoire
            public class CCible
            {
                int[] points;
                Random rnd = new Random();
     
                public CCible(int[] points)
                {
                    this.points = points;
                    if (points == null || points.Length == 0)
                        throw new Exception("La cible est vide");
                }
     
                public int PointAuHasard()
                {
                    int num = rnd.Next(0, points.Length);
                    return points[num];
                }
            }
        }

Discussions similaires

  1. Quel style de DirectX pour un jeu 2D ?
    Par delire8 dans le forum DirectX
    Réponses: 34
    Dernier message: 31/07/2003, 00h47
  2. Réponses: 7
    Dernier message: 18/06/2003, 15h20
  3. [socket][tcp] jeu en reseau
    Par souris_sonic dans le forum Développement
    Réponses: 2
    Dernier message: 30/05/2003, 07h31
  4. [C réseau débutant] jeu
    Par Heimdall dans le forum Développement
    Réponses: 6
    Dernier message: 22/05/2003, 13h58
  5. Une déclaration pour la survie du jeu vidéo en France
    Par Freakazoid dans le forum DirectX
    Réponses: 1
    Dernier message: 30/10/2002, 14h31

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