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 :

Aide pour programme sur C#


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Aide pour programme sur C#
    Bonjour,

    Voilà j'ai un petit projet à faire pour l'école, faut que je fasse un jeu de dés sous c# qui fonctionne avec l'invite de commandes (via visual studio 2005). Le problème c'est que je suis pas très doué en c#, je nage un peu.

    Faut que je réalise 3 phases du jeu via un menu:
    Jeu 1: 2 joueurs jouent à tour de rôle, le premier arrivé à 50 a gagné
    Jeu 2: 2 joueurs jouent à tour de rôle, le premier arrivé à 50 a gagné, un 6 permet de rejouer
    Jeu 3: 2 joueurs jouent des séries qui s'arrêtent avec un 1 ou par la demande du joueur ou par victoire de 100 points.

    J'ai commencé le premier jeu, et il marche, mais ma fonction random n'est pas si aléatoire que ça, j'aimerai l'améliorer.

    using System;

    public class jeu1
    {
    public static void Main()
    {
    int desjoueura, desjoueurb, sommea = 0, sommeb = 0, i, delay = 990000000;
    Console.WriteLine("Bienvenue dans le jeu 1");
    while (sommea <= 50 & sommeb <= 50)
    {
    for (i = 0; i < delay; i++) ;
    Console.WriteLine("Le joueur A lance le dé");
    Random rdmz = new Random();
    desjoueura = rdmz.Next() % 7;
    Console.WriteLine("Le joueur A a fait " + desjoueura);
    Console.WriteLine("Le joueur B lance le dé");
    desjoueurb = rdmz.Next() % 7;
    Console.WriteLine("Le joueur B a fait " + desjoueurb);
    sommea = sommea + desjoueura;
    sommeb = sommeb + desjoueurb;
    }
    if (sommea >= 50) { Console.WriteLine("Le joueur A a gagné avec " + sommea + " points"); }
    else
    { Console.WriteLine("Le joueur B a gagné avec " + sommeb + " points"); }
    }
    }


    J'ai commencé le jeu 2 mais ca marche pas vraiment car je sais pas où mettre la condition du 6, dans le tant que, le si?

    Help

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Bonjour,

    Random renvoie une séquence de nombres pseudo-aléatoires et non pas aléatoires. Il est par contre possible, en utilisant la surchage Random(int Seed) de spécifier un nombre utilisé pour calculer sa valeur initiale. Pour avoir quelque chose d'assez aléatoire, il suffit par exemple de prendre DateTime.Now.Ticks qui représente le nombre de ticks (intervalles de 100 ns depuis le 1er janvier 0001) de la date / heure actuelle.

    Pour gérer le 6, tu peux utiliser une boucle sur la phase de jeu de chaque joueur par exemple ici pour le joueur A:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    do {
       desjoueura = rdmz.Next() % 7;
       Console.WriteLine("Le joueur A a fait " + desjoueura);
    } while(desjoueura == 6);
    Ce code boucle tant que le dé joué par le joueur A est 6.

    Après, y'a pas mal d'autres trucs à revoir dans le code à mon avis, mais ce n'était pas l'objet de ta question

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tu peux toujours les dire, ca me ferait pas de mal.

  4. #4
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Après, y'a pas mal d'autres trucs à revoir dans le code à mon avis, mais ce n'était pas l'objet de ta question
    oui c'est clair, au moins change ça :


    for (i = 0; i < delay; i++) ;
    par un
    Thread.Sleep(nbMilliSeconde)
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ah c'est parce que j'ai mis un & au lieu d'un || non?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Non, c'est moi qui me suis trompé... lol
    D'ailleurs, il faudrait remonter l'ajout à la somme dans la boucle do { } while(); dans le jeu 2.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Pourquoi est ce que le random peut générer la valeur 0?

  8. #8
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Pourquoi est ce que le random peut générer la valeur 0?
    utilise plutôt :

    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Non mais il faut bien qu'à chaque fois qu'un joueur rejoue, la valeur du dé lancé soit ajouté à la somme totale de ses lancés non ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Oui, mais il faut exclure la valeur 0 qui n'éxiste pas sur un dé.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Je viens d'écrire ça pour le jeu 2:

    Console.WriteLine("Le joueur A lance le dé");
    Random rdmz = new Random();
    desjoueura = rdmz.Next(1,7);
    Console.WriteLine("Le joueur A a fait " + desjoueura);
    if (desjoueura == 6) { Console.WriteLine("Le joueur A rejoue"); desjoueura = rdmz.Next(1, 7); Console.WriteLine("Le joueur A a fait "+desjoueura); }


    Le problème c'est que si le dé ressort 6 de nouveau, ca ne va pas faire rejouer de nouveau le joueur, donc c'est pas if qu'il faut utiliser?

  12. #12
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Il va falloir que tu revoies les bases communes à la programmation en général, comme les boucles pour ne citer que celles-ci, car à priori il te manque pas mal de "théorie" pour te poser cette question.

    Tu peux aussi exprimer ton algo en pseudo langage, comme ca d'une part tu fais ton algo et d'autres part tu n'auras plus qu'à chercher comment ca se traduit dans un langage précis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mettre dans A nombre entre 1 et 6
    si conditionA est vraie alors ... sinon ... fin si
    tant que conditionB est vraie faire ... fin tant que
    faire ... tant que conditionC est vraie
    ...
    Citation Envoyé par Kaidan
    Random renvoie une séquence de nombres pseudo-aléatoires et non pas aléatoires. Il est par contre possible, en utilisant la surchage Random(int Seed) de spécifier un nombre utilisé pour calculer sa valeur initiale. Pour avoir quelque chose d'assez aléatoire, il suffit par exemple de prendre DateTime.Now.Ticks qui représente le nombre de ticks (intervalles de 100 ns depuis le 1er janvier 0001) de la date / heure actuelle.
    Par défaut, si l'on ne précise pas le seed, c'est ce qui est fait. Par contre si l'on instancie plusieurs objets Random, le ticks n'a pas forcément le temps de changer entre chaque instanciation et là effectivement le comportement aléatoire n'est plus. A ce moment il faut utiliser la seconde version du constructeur ou bien passer par un Thread.Sleep(1) pour s'assurer que le tick ne sera plus le même
    Pas de questions techniques par MP

  13. #13
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Le problème c'est que si le dé ressort 6 de nouveau, ca ne va pas faire rejouer de nouveau le joueur, donc c'est pas if qu'il faut utiliser?
    C'est pour ça que Kaidan te proposait une boucle while.
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  14. #14
    Invité
    Invité(e)
    Par défaut
    Oui apparemment ca marche, voilà une partie du code:

    Console.WriteLine("Le joueur B lance le dé");
    desjoueurb = rdmz.Next(1, 7);
    Console.WriteLine("Le joueur B a fait " + desjoueurb);
    sommeb = sommeb + desjoueurb;
    while (desjoueurb==6)
    {
    Console.WriteLine("Le joueur B relance le dé"); desjoueurb = rdmz.Next(1, 7); Console.WriteLine("Le joueur B a fait " + desjoueurb); sommeb = sommeb + desjoueurb;

  15. #15
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Bonjour,

    Le do ... while est plus indiqué dans ton cas. Le code passe forcément une fois par la boucle puis boucle temps que la condition est vraie. Ca permet de factoriser ton code (de ne pas écrire deux fois le fait que le joueur A ou B lance le dé). D'ailleurs il est possible de factoriser ton code pour : à partir de la même boucle, faire les 3 jeux et écrire une seule fois le code pour les deux joueurs.

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    il est préférable de n'instancier qu'une fois le Random, et d'utiliser toujours la meme instance, sinon ca n'a guere d'intéret et effectivement ta séquence en théorie aléatoire ne le sera plus du tout et générallement identique.

  17. #17
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Sinon... est-ce que le but du tp est de découvrir le C#, la programmation procédurale, la programmation objet ? Si c'est le 3e cas, de nombreuses choses sont à revoir (préviens moi alors qu'il s'agit d'un exo de POO).

    Sinon 2 conseils :

    1) découpe ton programme en procédures : cela augmente la lisibilité, facilité l'evolution.

    2) emploie des paramètres : mêmes avantages

    Exemple pour le 1) : fait une fonction int JetterDe() qui te renvoie un nombre aléatoire de 1 a 6 inclus. Ensuite fait une fonction int JouerUneFois() qui te renvoie le résultat d'un tour de jeu (c'est ici que tu mettra la condition "tant que 6 rejoue") .....

    Exemple pour le 2) : pour commencer, déclare des constantes (le "si resultat = 6 alors rejoue" devient "si resultat = BONUS alors rejoue") ensuite on en reparlera.

    En utilisant les principes objets, on peut encore améliorer le tout, mais applique déjà cela, on verra pour la suite.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Bah j'ai commencé le c# en septembre donc on en est aux tableaux mais je crois pas qu'il faille en mettre dans cet exo.

  19. #19
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Ok, donc ni programmation orientee objet (POO) ni struc tures de données complexes.

    MAis renvoie nous ton nouveau programme en suivant nos conseil, et nous repartirons de là.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

Discussions similaires

  1. Aide pour programmer sur R
    Par youchlure dans le forum R
    Réponses: 2
    Dernier message: 17/09/2009, 11h38
  2. Réponses: 2
    Dernier message: 19/04/2008, 00h02
  3. [Dev-C++] Aide pour programmer avec Qt 4
    Par stone dans le forum EDI
    Réponses: 3
    Dernier message: 02/02/2006, 08h58
  4. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  5. aide pour requete sur 2 tables avec clé étranere
    Par richton95 dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/12/2005, 13h32

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