1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 26
    Points : 11
    Points
    11

    Par défaut Plus que débutante, en mode initiation et je sèche..

    Bonjour à tous,

    Je n'ai jamais fais de développement de ma vie mais ce domaine m'intéresse et j'ai postulé pour un BTS SIO l'an prochain pour lequel j'ai été acceptée.
    Du coup je voulais essayer de m'initier un peu aux pratiques en suivant des tutos même si je ne comprends pas tout ce que je fais mais voilà je sèche dès la deuxième application console que j'essaie de réaliser.

    C'est un tuto "le développement pour les vrais débutants". Le premier module je n'ai pas eu de souci, tout a fonctionné et j'ai réussi les tests. Par contre ça se complique pour le deuxième module où je dois cette fois ci réaliser la fameuse appli du nombre mystère en mode console pour commencer.

    Mais voilà j'ai bien suivi tout le cours et tout revérifier après, j'ai l'impression d'avoir fait ce qu'il faut mais voilà ça ne fonctionne pas... Et comme je n'y connais ABSOLUMENT RIEN, bah je vois pas ce qui cloche...

    Pouvez vous m'aider ? Histoire que je ne me dégoûte pas avant même de commencer J'ai très envie de comprendre mais là j'ai recommencé trois fois ce weekend et j'ai toujours plus ou moins le même résultat...

    Voilà ce que j'ai fait :

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace NombreMystère_Console_
    {
        class Program
        {
            static void Main(string[] args)
            {
                int randomed = new Random().Next(20) + 1;
                Console.WriteLine("Devine à quel nombre entre 1 et 20 je pense là ?");
                string picked = Console.ReadLine();
                int pickedNum;
     
                while (int.TryParse(picked, out pickedNum) == false)
                {
                    Console.WriteLine("Oooops ! Il ne s'agit pas d'un nombre ! Essaie encore !");
                    picked = Console.ReadLine();
                }
     
                while (pickedNum != randomed)
                {
                    if (pickedNum > randomed)
                    {
                        Console.WriteLine("C'est moins, essaie encore !");
                    }
     
                    else
                    {
                        Console.WriteLine("C'est plus, essaie encore !");
                    }
                }
                Console.WriteLine("Bien joué ! Tu as trouvé le nombre, c'était : " + randomed);
            }
        }
    }
    Merci d'avance, et désolé ma question doit vous paraître ridicule vu ça reste du très basique mais bon... je débute

  2. #2
    Membre éprouvé
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    janvier 2014
    Messages
    355
    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 : 355
    Points : 1 144
    Points
    1 144

    Par défaut

    Bonjour,

    Alors plusieurs choses :

    1) Ton deuxième while bouclera tout le temps (a part si tu trouves du premier coup), car la condition n'est jamais réévaluer.

    2) Mise a part pour l'évaluation de l'erreur , si l'utilisateur a mis autre chose pour un nombre, tu ne redemandes jamais de rentrer a nouveau un nombre.

    3) Attention aux conditions pour les "Moins" et "Plus"

    Sinon, a part rajouter 2 / 3 lignes et bouger un peu tes while, tu devrais vite finir ce TP
    Keep calm and debug it

    www.pixel-juice.net

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 26
    Points : 11
    Points
    11

    Par défaut

    Merci beaucoup pour ta réponse
    Ok... Donc c'est mieux, mais je crois juste savoir quoi faire pour ton n°2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     while (pickedNum != randomed)
                {
                    if (pickedNum > randomed)
                    {
                        Console.WriteLine("C'est moins, essaie encore !");
                        picked = Console.ReadLine();
                    }
    
                    else
                    {
                        Console.WriteLine("C'est plus, essaie encore !");
                        picked = Console.ReadLine();
                    }
                }
    Enfin du moins ça marche un peu mieux depuis que j'ai ajouté ces deux lignes. Par contre je ne vois pas quoi changer dans mes conditions.
    Et je ne comprends pas non plus pourquoi quand je compile le projet, si je lui propose 1 par exemple, il me dira indéfiniment que c'est plus et si je lui propose 20 il me dira indéfiniment que c'est moins... et pas du tout dans la limite de 1 à 20. C'est dû à ma 2e boucle ou bien il y a un problème avec le nombre généré ?

    Ah la la, pas facile quand on y connait rien

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    septembre 2006
    Messages
    3 573
    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 573
    Points : 5 166
    Points
    5 166

    Par défaut

    tu compares PickedNum alors que tu affectes la lecture à Picked
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 26
    Points : 11
    Points
    11

    Par défaut

    Merci à tous d'avoir pris le temps de me répondre, malheureusement comme je n'y connais vraiment pas grand chose, j'ai d'abord pris le temps de réétudier les bases du c# pour coder un application console.

    J'ai donc ensuite tout repris depuis le début. Et je ne sais pas si c'est correct, mais ça fonctionne nickel !

    Maintenant le TP suivant que je dois réaliser est en WPF, j'ai quasiment réussi, mais ça bug encore pour un seul truc. Je reprécise que je souhaite concevoir une application du Nombre Mystère en C#/WPF.

    Donc voilà mon souci : Quand je propose une valeur <0 ou >100 j'aimerais que le TextBlock dédié me dise "Propose un nombre compris entre 0 et 100(inclus)". Ça fonctionnait au début quand j'ai écrit le code en question au départ mais par la suite un bug est survenu et à la place j'ai "C'est plus" ou "C'est moins".

    Avez vous un conseille à me donner ?

    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
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
     
    namespace WpfApp1
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            int randomed;
            int NbEssais;
     
            public MainWindow()
            {
                InitializeComponent();
            }
     
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                NouvellePartie();
            }
     
            private void BtnValider_Click(object sender, RoutedEventArgs e)
            {
                int pickedNum = PickANumber();
                if (pickedNum > 0)
                {
                    if (pickedNum != randomed)
                    {
                        pickedNum = TryAgain(pickedNum);
                    }
                    else
                    {
                        YouWin();
                    }
                }
            }
     
            private void BtnNouvellePartie_Click(object sender, RoutedEventArgs e)
            {
                NouvellePartie();
            }
     
            void YouWin()
            {
                TextBlockInfo.Text = "Bravo ! tu as gagné !! Le nombre mystère était : " + randomed;
            }
     
            int PickANumber()
            {
                string picked = TextBoxTentative.Text;
     
                int pickedNum;
                bool isNumeric = int.TryParse(picked, out pickedNum);
                if (isNumeric == false)
                {
                    TextBlockInfo.Text = "Oups, ce n'est pas un nombre. Essaie encore.";
                }
                else if (pickedNum < 0
                            || pickedNum > 100)
                {
                    TextBlockInfo.Text = "Propose un nombre compris entre 1 et 100 (inclus).";
                }
                else
                {
                    TextBlockInfo.Text = string.Empty;
                }
     
                return pickedNum;
            }
     
            void NouvellePartie()
            {
                randomed = GenereNombreAleatoire();
                TextBlockInfo.Text = string.Empty;
                TextBoxTentative.Text = string.Empty;
                NbEssais = 0;
                UpdateTry();
            }
     
            void UpdateTry()
            {
                TextBlockNbEssais.Text = "Nombre d'essais " + NbEssais;
            }
     
            int GenereNombreAleatoire()
            {
                return new Random().Next(1, 101);
            }
     
            int TryAgain(int pickedNum)
            {
     
                if (pickedNum > randomed)
                {
                    TextBlockInfo.Text = "C'est moins";
                }
                else if (pickedNum < randomed)
                {
                    TextBlockInfo.Text = "C'est plus";
                }
     
                NbEssais = NbEssais + 1;
                UpdateTry();
     
                return pickedNum;
            }
        }
    }
    Merci d'avance !!

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juin 2007
    Messages : 329
    Points : 496
    Points
    496

    Par défaut

    Dans ta méthode PickANumber() tu renvoies toujours un int ; or selon ce que le joueur a saisi tu peux avoir un réponse invalide. Il vaut mieux que tu renvoies un Nullable<int> (abrégé int?) auquel tu n'assigneras une valeur que si la saisie du joueur est correcte. Et dans la méthode BtnValider_Click() tu testes si ton Nullable<int> a bien une valeur if(!pickedNum.HasValue) return;.

    Je ne vois pas pourquoi il y a une méthode TryAgain() qui fasse plus que nettoyer le round et mettre à jour l'affichage, tu n'es plus dans une application console, si l'utilisateur doit réessayer tout repartira de l'UI.

    Accessoirement tu demandes de choisir un nombre entre 0 et 100 mais dans ta méthode GenereNombreAleatoire() tu renvoies un nombre entre 1 et 100.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 26
    Points : 11
    Points
    11

    Par défaut

    Merci pour ta réponse Noxen.

    Malheureusement, comme je l'ai expliqué, je n'ai jamais codé de ma vie et les seules notions que j'ai viennent du cours que j'ai suivi (qui n'est conçu que dans le but de développer cette application WPF). Bref, je n'ai pas vu ce dont tu parles et je ne sais pas comment l'utiliser.

    En fait je suis un tutoriel afin de me familiarisé avec tout ça, il y a des concepts que je comprends et que j'arrive à réutiliser, d'autres moins. Et donc là si je ne souhaitais pas qu'il y ait un message lorsque la tentative est au dessus de 100 ou en dessous de 1, à priori tout a l'air de fonctionner.
    J'aimerais m'en tenir à ce code afin de pouvoir poursuivre mon tuto où je vais m'initier à Blend pour Visual Studio.
    Malgré tout si cela ne modifie pas trop le code, je ne suis pas fermée à ta proposition de correction, mais pourrais-tu m'expliquer plus en détail où interviennent les modifications ?

    Désolé tu dois penser que je suis une vraie noob ! Et c'est le cas

    Ah, et merci pour la dernière info, erreur d’inattention !

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juin 2007
    Messages : 329
    Points : 496
    Points
    496

    Par défaut

    Citation Envoyé par Romenag Voir le message
    Désolé tu dois penser que je suis une vraie noob ! Et c'est le cas
    Et il n'y a aucune honte à ça, c'est normal de ne pas savoir quand on n'a pas appris. Peut-être mon style t'a-t-il paru abrupt, mais il ne s'agissait que d'une façon concise de soulever différents points, il est inutile de te flageller C'est une excellente initiative d'avoir voulu anticiper sur tes études à venir et je ne peux que t'encourager à cela

    Sans entrer dans les détails, les Nullable<T> sont des structures qui peuvent stocker la valeur d'un Type Valeur, mais autorise aussi une comparaison avec null pour prendre en charge un valeur indéterminée. La valeur de retour pickedNum de ta fonction PickANumber sera initialisée à 0 si le TryParse échoue, mais l'appelant ne pourra pas savoir si ce 0 est un échec ou la saisie d'un 0 par l'utilisateur. À la place tu peux faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private int? ReadUserInput(string input)
    {
      int result;
      return  int.TryParse(input, out result) ? result : null;
    }
    Dans le code appelant tu peux contrôler la valeur de retour et agir en conséquence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void OnClick(...)
    {
      int min = 0;
      int max = 100;
      int? input = ReadUserInput(InputTextBlock.Text);
      if(input == null) // ce n'est pas un nombre
      else if(input.Value < min ||input.Value > max) // en dehors des valeurs admises
      else if(input.Value < target) // trop petit
      else if(input.Value > target) // trop grand
      else // gagné !!
    }
    Je n'ai pas vu le tutoriel que tu suis, mais cette structure ma paraît un peu plus simple que celle proposée ; de plus selon le code la valeur 0 est valide mais n'est pas prise en charge. Ne connaissant pas ton code je te laisse remplir les blancs. Des articles de la MSDN permettent d'aller plus loin sur les Nullable<T> (définition et guide d'emploi) et la différence entre Type Valeur et Type Référence.

    N'hésite surtout pas à revenir poser des questions si tu as des doutes ou des incompréhensions, nous ferons de notre mieux pour t'aider

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 26
    Points : 11
    Points
    11

    Par défaut

    Merci pour ta réponse je vais voir ce que je peux faire avec ça. Je reviens vers le forum si jamais je galère.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2017
    Messages : 26
    Points : 11
    Points
    11

    Par défaut

    Citation Envoyé par Romenag Voir le message
    Je reviens vers le forum si jamais je galère.
    Et voilà j'ai de nouveau un problème... un peu différent malgré tout, c'est un problème d'affichage dans un émulateur...

    Je devais pour clôturé mon cours faire migrer mon code WPF vers Windows Universal. A priori tant que je suivais le cours tout aller bien mais j'ai voulu testé ce que j'avais appris de Blend pour Visual Studio et voilà maintenant ce que j'obtiens quand j'utilise un émulateur windows phone :


    Nom : blend2.png
Affichages : 59
Taille : 13,6 Ko

    J'ai eu beau revoir toutes mes dimensions rien y fait.... Des suggestions ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juin 2007
    Messages : 329
    Points : 496
    Points
    496

    Par défaut

    Ne connaissant pas du tout Windows Universal je ne peux malheureusement pas t'aider sur ce point

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/04/2009, 17h16
  2. [plus que débutant]Comment limiter la saisie d'un Edit?
    Par Askarod dans le forum Composants VCL
    Réponses: 3
    Dernier message: 20/12/2005, 08h27
  3. height: encore plus que 100%
    Par Anduriel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/06/2005, 13h56

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