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

Delphi Discussion :

Demande informations pour jeu du nombre mystère amélioré par mes soins


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut Demande informations pour jeu du nombre mystère amélioré par mes soins
    Bonjour,

    j'essaie d'améliorer un petit jeu du nombre mystère
    qui est donné en application de base
    en y ajoutant un petit plus :
    à savoir
    j'aimerai donner la possibilité à l'utilisateur
    de connaître le nombre de coups qu'il a joué en plus du résultat final.
    Par exemple :
    Bravo, vous avez trouvé le nombre mystère en 10 coups.
    J'avais déjà réalisé ce genre d'application en c
    grâce à une variable un peu spéciale (coup++)
    qui n'est malheureusement pas possible en delphi.
    Il s'agit donc d'incrémenter ma variable coup d'autant de fois que cela est nécessaire
    mais comment cela pourrait ce faire en Delphi.

    Pour exemple voici mon code à l'état brut :
    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
     unit Principale2;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    var
    NbSecret: integer;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    NbSecret:=Trunc(Random(101));
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
    NbTest, coup: integer;
    reponse: string;
    begin
     
    coup:=0;
    NbTest:=0;
    reponse:='0';
    InputQuery('Saisissez un nombre', 'valeur', reponse);
    NbTest:=StrToInt(reponse);
    if NbTest < NbSecret then
    ShowMessage('Le nombre secret est supérieur à :' + IntToStr(NbTest))
    else if
    NbTest > NbSecret then
    ShowMessage('Le nombre secret est inférieur à :' + IntToStr(NbTest))
    else
    ShowMessage('Félicitation, vous avez trouvé le nombre secret qui est :' + IntToStr(NbSecret) + 'en ' + IntToStr(coup) + 'coup');
     
     
    end;
    end.
    Où pourrais-je placer mon incrémentation par ex :
    inc(coup);
    Si quelqu'un a une idée je suis preneur
    et ce serait sympa car ça mm'aiderait beaucoup.

    Merci de m'aider.
    Version Delphi utilisé : Rad Studio Alexandria.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    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
     unit Principale2;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        coup: integer;
      public
        { Déclarations publiques }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    var
    NbSecret: integer;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    NbSecret:=Trunc(Random(101));
    coup:=0;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
    NbTest: integer;
    reponse: string;
    begin
    
    NbTest:=0;
    reponse:='0';
    InputQuery('Saisissez un nombre', 'valeur', reponse);
    inc(coup);
    NbTest:=StrToInt(reponse);
    if NbTest < NbSecret then
    ShowMessage('Le nombre secret est supérieur à :' + IntToStr(NbTest))
    else if
    NbTest > NbSecret then
    ShowMessage('Le nombre secret est inférieur à :' + IntToStr(NbTest))
    else
    ShowMessage('Félicitation, vous avez trouvé le nombre secret qui est :' + IntToStr(NbSecret) + 'en ' + IntToStr(coup) + 'coup');
    
    
    end;
    end.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut Demande informations pour jeu du nombre mystère amélioré par mes soins
    Citation Envoyé par Andnotor Voir le message
    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
     unit Principale2;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        coup: integer;
      public
        { Déclarations publiques }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    var
    NbSecret: integer;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    NbSecret:=Trunc(Random(101));
    coup:=0;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
    NbTest: integer;
    reponse: string;
    begin
    
    NbTest:=0;
    reponse:='0';
    InputQuery('Saisissez un nombre', 'valeur', reponse);
    inc(coup);
    NbTest:=StrToInt(reponse);
    if NbTest < NbSecret then
    ShowMessage('Le nombre secret est supérieur à :' + IntToStr(NbTest))
    else if
    NbTest > NbSecret then
    ShowMessage('Le nombre secret est inférieur à :' + IntToStr(NbTest))
    else
    ShowMessage('Félicitation, vous avez trouvé le nombre secret qui est :' + IntToStr(NbSecret) + 'en ' + IntToStr(coup) + 'coup');
    
    
    end;
    end.
    Bonsoir,
    Merci pour votre réponse
    toute fois, je cherche encore car mon résultat n'est pas satisfaisant.
    Merci encore
    Version Delphi utilisé : Rad Studio Alexandria.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Monromero1 Voir le message
    toute fois, je cherche encore car mon résultat n'est pas satisfaisant.
    Peut-être parce qu'il manque une boucle à l'intérieur de votre procédure Button2Click ainsi que la possibilité d'abandonner (par exemple avec la saisie d'un 'Q')
    peut-être aussi que la ligne 47 NbTest:=StrToInt(reponse); est un peu "légère" car elle ne prend pas en compte les erreurs de saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try 
     nbTest:=StrtoInt(reponse)
    except
     nbtest:=-1   
    end;
    remplaçable selon la version de Delphi par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     nbTest:= nbTest:=StrtoIntDef(reponse,-1);
    Simplement écrire "n'est pas satisfaisant" nous oblige à utiliser une boule de cristal mais
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,

    peux tu expliquer pourquoi tu cherches encore et en quoi ton résultat n'est pas satisfaisant ?

    A+
    Charly

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,

    pour s'amuser si on veut laisser l'ordi jouer tout seul avec un bouton Auto (en ajoutant un Memo à la Form) :

    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
    Procedure TForm1.BtnAutoClick(Sender: TObject);
    Const
      Tab = Chr(9) ;
    Var
      Nombre : Integer ;
      Maxi , Mini : Integer ;
      Maximum , Minimum : Integer ;
      Milieu : Integer ;
    Begin
      Memo1.Clear ;
      Randomize ;
      Maximum := 100 ;
      Minimum := 0 ;
      Maxi := 100 ;
      Mini := 0 ;
      NbSecret :=  Random(Maxi+1);
      Nombre :=  Random(Maxi);
      Memo1.Lines.Add('Nombre secret : '+IntToStr(NbSecret)+' - Nombre Choisi initialement : '+InttoStr(Nombre));
      Memo1.Lines.Add(' ');
      coup:=1;
      if (Nombre = NbSecret) Then
        Begin
          Memo1.Lines.Add(' ');
          Memo1.Lines.Add('  ==> Bingo !    Nombre secret trouvé : '+IntToStr(NbSecret)+' du premier coup !');
          Exit ;
        End;
      while (Nombre <> NbSecret) do
        Begin
          Inc(Coup) ;
          if (Nombre < NbSecret) then
            Begin
              Memo1.Lines.Add('   - Coup : '+InttoStr(Coup)+Tab+' Nombre choisi : '+IntToStr(Nombre) + Tab + ' inférieur au nombre secret (entre : '
                               + IntToStr(Mini)+' et : '+IntToStr(Maxi)+')');
              Mini := Nombre
            End
          Else
            Begin
              Memo1.Lines.Add('   - Coup : '+InttoStr(Coup)+Tab+' Nombre Choisi : '+IntToStr(Nombre) + Tab + ' supérieur au nombre secret (entre : '
                               + IntToStr(Mini)+' et : '+IntToStr(Maxi)+')');
              Maxi := Nombre ;
            End;
          If((Maxi-Mini) = 1) Then    //  Pour éviter une boucle perpetuelle
            Begin
               If ( Maxi = Maximum) Then Nombre := Maxi
                 Else Nombre := Mini ;
            End
          Else  Nombre := Mini +1 + Random(Maxi-Mini-1) ;        // Au hazard entre les bornes
    //      Else Nombre := ((Mini+Maxi) div 2)  ;     // Plus rapide : Si on veut faire de la dichotomie
          if (Nombre = NbSecret) Then
            Begin
              Memo1.Lines.Add(' ');
              Memo1.Lines.Add('  ==> Bingo !    Nombre secret trouvé : '+IntToStr(NbSecret)+' en  : '+InttoStr(Coup)+' coups');
              Exit ;
            End;
          // Par sécurité ... on ne sait jamais !! (l'informatique n'est peut être pas une science exacte ...  :-)) )
          if (Coup = 500 ) Then Exit ;
        End;
    End;
    A+
    Charly

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut Demande informations pour jeu du nombre mystère amélioré par mes soin.s
    Citation Envoyé par Charly910 Voir le message
    Bonjour,

    peux tu expliquer pourquoi tu cherches encore et en quoi ton résultat n'est pas satisfaisant ?

    A+
    Charly
    Bonjour,

    Je cherche encore car disais-je, le résultat n'est pas satisfaisant :
    en effet, lorsque j'exécute le code
    corrigé selon votre information
    j'obtiens l'affichage suivant :
    Félicitation, vous avez trouvé le nombre secret qui est (x) en 1 coup
    et ce, même si j'en suis au 10eme essai.
    Je poursuis donc mes recherches
    Merci quand-même.
    Version Delphi utilisé : Rad Studio Alexandria.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut Demande informations pour jeu du nombre mystère amélioré par mes soins.
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Peut-être parce qu'il manque une boucle à l'intérieur de votre procédure Button2Click ainsi que la possibilité d'abandonner (par exemple avec la saisie d'un 'Q')
    peut-être aussi que la ligne 47 NbTest:=StrToInt(reponse); est un peu "légère" car elle ne prend pas en compte les erreurs de saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try 
     nbTest:=StrtoInt(reponse)
    except
     nbtest:=-1   
    end;
    remplaçable selon la version de Delphi par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     nbTest:= nbTest:=StrtoIntDef(reponse,-1);
    Simplement écrire "n'est pas satisfaisant" nous oblige à utiliser une boule de cristal mais
    Bonjour,

    Concernant la boucle manquante je pense éventuellement à une boucle repeat -- until
    qu'en pensez-vous ?
    Il s'agit toujours d'incrémenter la variable coup nous sommes bien d'accord ?
    Il s'agit aussi d'obtenir
    l'affichage qui félicite l'utilisateur
    d'avoir trouvé un nombre secret en (x) coups.

    Je poursuis donc mes recherches
    en ayant pour référence les informations que vous me donnez dans votre dernière réponse
    merci pour cette réponse.
    Version Delphi utilisé : Rad Studio Alexandria.

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Reprenons
    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
    unit Principale2;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        coup: integer;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    var
    NbSecret: integer;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    NbSecret:=Trunc(Random(101));
    coup:=0;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
    NbTest: integer;
    reponse: string;
    begin
     
    coup:=0;
    NbTest:=0;
    reponse:='0';
    InputQuery('Saisissez un nombre', 'valeur', reponse);
    inc(coup);
    NbTest:=StrToInt(reponse);
    if NbTest < NbSecret then
    ShowMessage('Le nombre secret est supérieur à :' + IntToStr(NbTest))
    else if
    NbTest > NbSecret then
    ShowMessage('Le nombre secret est inférieur à :' + IntToStr(NbTest))
    else
    ShowMessage('Félicitation, vous avez trouvé le nombre secret qui est :' + IntToStr(NbSecret) + 'en ' + IntToStr(coup) + 'coup');
     
     
    end;
    end.

  10. #10
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,
    oui, tu peux utiliser une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Repeat
    ...
    Until (NbTest = NbSecret) ;
    et aussi te ménager une porte de sortie après le InputQuery :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (NbTest = -1)  Then Exit ;  // Sortie de la procedure
    A+
    Charly

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut Demande informations pour jeu du nombre mystère amélioré par mes soins
    Citation Envoyé par Charly910 Voir le message
    Bonjour,
    oui, tu peux utiliser une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Repeat
    ...
    Until (NbTest = NbSecret) ;
    et aussi te ménager une porte de sortie après le InputQuery :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (NbTest = -1)  Then Exit ;  // Sortie de la procedure
    A+
    Charly
    Bonjour,

    Que dois-je insérer comme code entre la boucle repeat ... until (nbTest = nbSecret);
    Revoici mon code incomplet :
    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
    unit Principale2;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
            coup: integer;
        { Déclarations privées }
      public
            { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    var
    NbSecret: integer;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    NbSecret:=Trunc(Random(101));
    coup:=0;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
    NbTest, coup: integer;
    reponse: string;
    begin
    coup:=0;
    NbTest:=0;
    reponse:='0';
    InputQuery('Saisissez un nombre', 'valeur', reponse);
    if nbTest = -1 then
    exit;
    inc(coup);
    nbTest:=StrToInt(reponse);
    repeat
    if NbTest < NbSecret then
             ShowMessage('Le nombre secret est supérieur à :' + IntToStr(NbTest))
    else if
    NbTest > NbSecret then
    ShowMessage('Le nombre secret est inférieur à :' + IntToStr(NbTest))
    else
    ShowMessage('Félicitation, vous avez trouvé le nombre secret qui est :' + IntToStr(NbSecret) + 'en ' + IntToStr(coup) + 'coup');
    until (nbTest = nbSecret);
     
    end;
    end.
    Je précise qu'avec un tel code ma boucle tourne sans arrêt dès le premier essai.
    Version Delphi utilisé : Rad Studio Alexandria.

  12. #12
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    Rapidement et principalement, il faut redemander la saisie à chaque tour, donc l'inclure dans le code la boucle.
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  13. #13
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Il faut inclure le InputQuery dans la boucle

  14. #14
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,

    Essaye de chercher par toi même, mais sinon voici la solution :

    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
    procedure TForm1.Button2Click(Sender: TObject);
    var
      NbTest, coup: integer;
      reponse: string;
    begin
      coup:=0;
      NbTest:=0;
      reponse:='0';
      repeat
        InputQuery('Saisissez un nombre ou -1 pour arrêter', 'valeur', reponse);
        nbTest:=StrToInt(reponse);
        if nbTest = -1 then exit;
        inc(coup);
        if NbTest < NbSecret then
                 ShowMessage('Le nombre secret est supérieur à : ' + IntToStr(NbTest))
        else if
        NbTest > NbSecret then
        ShowMessage('Le nombre secret est inférieur à : ' + IntToStr(NbTest))
        else
        ShowMessage('Félicitation, vous avez trouvé le nombre secret qui est : ' + IntToStr(NbSecret) + ' en ' + IntToStr(coup) + ' coup');
      until (nbTest = nbSecret);
    
    end;
    Prend aussi l'habitude d'indenter le code c'est plus lisible

    A+
    Charly
    PS : essaye aussi la solution automatique ...

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut Demande informations pour jeu du nombre mystère amélioré par mes soins
    Bonjour,

    Cette fois-ci,
    nous y sommes, en effet,
    le résultat escompté est bien au rendez-vous
    Je me suis inspiré d'une de vos dernières réponses
    avec la suggestion suivante :
    placer la boucle avant (InputQuery)
    Merci beaucoup pour toutes vos suggestions ainsi que vos conseils pertinents.

    Voici donc pour la forme
    mon code revu et corrigé :

    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
    unit Principale2;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
            coup: integer;
        { Déclarations privées }
      public
            { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    var
    NbSecret: integer;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    NbSecret:=Trunc(Random(101));
    coup:=0;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
    NbTest, coup: integer;
    reponse: string;
    begin
    coup:=0;
    NbTest:=0;
    reponse:='0';
    repeat
    InputQuery('Saisissez un nombre', 'valeur', reponse);
    if nbTest = -1 then
    exit;
    nbTest:=StrToInt(reponse);
    inc(coup);
    if NbTest < NbSecret then
             ShowMessage('Le nombre secret est supérieur à :' + IntToStr(NbTest))
    else if
    NbTest > NbSecret then
    ShowMessage('Le nombre secret est inférieur à :' + IntToStr(NbTest))
    else
    ShowMessage('Félicitation, vous avez trouvé le nombre secret qui est :' + IntToStr(NbSecret) + 'en ' + IntToStr(coup) + 'coup');
    until (nbTest <= nbSecret);
     
    end;
    end.
    Version Delphi utilisé : Rad Studio Alexandria.

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Il y encore des améliorations lignes 48 à 50
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if nbTest = -1 then
    exit;
    nbTest:=StrToInt(reponse);
    le test de -1 avant de changer la valeur ?
    toujours un StrToInt pouvant lever une erreur si la saisie est mauvaise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nbtest:=strtointdef(reponse,-1)
    if nbtest=-1 then exit;


    Une instruction Randomize; ne serait pas un luxe
    et il faudrait m'expliquer pourquoi vous avez besoin de deux boutons

    voici ma version
    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
     
    unit Unit1;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.math, System.Types;
     
    type
      TForm1 = class(TForm)
        Jouer: TButton;
        procedure JouerClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.JouerClick(Sender: TObject);
    var
      nbSecret, NbTest, coup: integer;
      reponse, msg: string;
    begin
      coup := 0;
      randomize;
      nbSecret := Trunc(Random(101));
     //  showmessage(nbSecret.tostring);
      repeat
        InputQuery('Saisissez un nombre', 'valeur', reponse);
        NbTest := strtointdef(reponse, -1);
        if NbTest = -1 then
          exit;
        inc(coup);
        case CompareValue(NbTest, nbSecret) of
         LessThanValue:
            msg := format('Le nombre secret est supérieur à %d ',[NbTest]);
         EqualsValue  :
            begin
              if coup = 1 then
                msg := format('Nombre secret  %d trouvé du premier coup !',
                  [nbSecret])
              else
                msg := format
                  ('Félicitation, vous avez trouvé le nombre secret qui est : %d en %d coups',
                  [nbSecret, coup]);
            end;
          GreaterThanValue :
            msg := format('Le nombre secret est inférieur à %d', [NbTest]);
        end;
        Showmessage(msg);
      until (NbTest = nbSecret);
    end;
     
     
    end.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut Demande informations pour jeu du nombre mystère amélioré par mes soins
    Bonjour,

    Je constate que vous avez revu et corrigé cette application avec un seul bouton.
    Bon !
    Disons que pour répondre à votre question ?

    pourquoi utiliser deux boutons ?
    Je suis tenté de vous répondre : pourquoi pas !
    Il me semble qu'au début de la discussion
    j'avais précisé qu'il s'agissait d'une ébauche d'application et donc d'un teste en somme.
    Par contre,
    Si on recherche l'optimisation d'une application qu'on voudrait véritable, (release) par ex.
    c'est votre version qui a raison
    je n'ai encore pas eu le temps de réfléchir à toutes les améliorations possibles
    mais je retiens la vôtre.
    Vous m'avez devancé pendant ma réflexion
    mais je vous suis très reconnaissant pour l'aide apportée durant cette discussion.
    Merci encore.

    Cordialement
    Version Delphi utilisé : Rad Studio Alexandria.

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut Demande informations pour jeu du nombre mystère amélioré par mes soins
    Bonjour,
    je reviens vers vous
    car je ne parviens pas à compiler votre 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
    unit Unit1;
    *
    interface
    *
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.math, System.Types;
    *
    type
      TForm1 = class(TForm)
        Jouer: TButton;
        procedure JouerClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    *
    var
      Form1: TForm1;
    *
    implementation
    *
    {$R *.dfm}
    *
    procedure TForm1.JouerClick(Sender: TObject);
    var
      nbSecret, NbTest, coup: integer;
      reponse, msg: string;
    begin
      coup := 0;
      randomize;
      nbSecret := Trunc(Random(101));
     //  showmessage(nbSecret.tostring);
      repeat
        InputQuery('Saisissez un nombre', 'valeur', reponse);
        NbTest := strtointdef(reponse, -1);
        if NbTest = -1 then
          exit;
        inc(coup);
        case CompareValue(NbTest, nbSecret) of
         LessThanValue:
            msg := format('Le nombre secret est supérieur à %d ',[NbTest]);
         EqualsValue  :
            begin
              if coup = 1 then
                msg := format('Nombre secret  %d trouvé du premier coup !',
                  [nbSecret])
              else
                msg := format
                  ('Félicitation, vous avez trouvé le nombre secret qui est : %d en %d coups',
                  [nbSecret, coup]);
            end;
          GreaterThanValue :
            msg := format('Le nombre secret est inférieur à %d', [NbTest]);
        end;
        Showmessage(msg);
      until (NbTest = nbSecret);
    end;
    *
    *
    end.
    Pouvez-vous m'expliquer sommairement votre code ?
    pourquoi des variables non déclarées apparaissent après une boucle case ? par ex : comparevalue
    Merci.
    Version Delphi utilisé : Rad Studio Alexandria.

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    comparevalue n'est pas une variable mais une fonction qui prend deux variables en paramètre et te donne en sortie inferieur,egale ou superieur l'une par rapport a l'autre

    ce qui explique le case qui entoure la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
         case CompareValue(NbTest, nbSecret) of
          LessThanValue : ... ;
          EqualsValue   :   ... ;
          GreaterThanValue : ...;
     End;
    donc les status LessThanValue,EqualsValue, GreaterThanValue sont des valeur ordinal retourné par CompareValue


    la function comparValue est du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      Function CompareValue(Val1,Val2 : Integer) : StatusValue;
      begin 
        If Val1 = Val2 Then 
          Result := EqualsValue
       else if  Val1 > Val2 Then 
         Result := GreaterThanValue
       else  Result := LessThanValue ;
     end;
    mais bon un code qui fonctionne pas ne nous donne pas le type d'erreur que tu as et il est difficile pour nous de repondre
    sans connaitre la cause
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut Demande informations pour jeu du nombre mystère amélioré par mes soins
    Bonjour,

    Ok pour les explications
    Je suis novis en programmation
    et donc je fais facilement des erreurs dans ce domaine.
    Je confirme que mon compilateur
    bloque sur le début de la ligne comparevalue précisément
    ce qui n'est apriori pas normal
    car après avoir consulté l'aide sur le fameux comparevalue
    je me suis bien vite rendu compte qu'il s'agissait d'une fonction comme tu me l'a indiqué
    et non une variable encore mes excuses aux confirmés dans ce domaine.
    J'ai une autre erreur sur la ligne LessChanValue
    ainsi que sur la ligne equalvalue(
    Je poursuis donc mes recherches afin de solutionner le problème.
    Merci encore
    Version Delphi utilisé : Rad Studio Alexandria.

Discussions similaires

  1. Jeu du nombre mystère
    Par parice02 dans le forum C
    Réponses: 7
    Dernier message: 04/07/2016, 00h08
  2. demande information pour formation web master
    Par MarjoBrest29 dans le forum Etudes
    Réponses: 0
    Dernier message: 17/12/2015, 10h32
  3. [Demande] Icone pour jeu Android
    Par myke38 dans le forum Création de jeux vidéo
    Réponses: 0
    Dernier message: 21/01/2014, 16h53
  4. demande information pour débutant
    Par PaulLab dans le forum Dreamshield
    Réponses: 0
    Dernier message: 14/07/2010, 19h08

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