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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Accordeur de piano
    Inscrit en
    Juillet 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Accordeur de piano

    Informations forums :
    Inscription : Juillet 2010
    Messages : 112
    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.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    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
    Membre actif
    Homme Profil pro
    Accordeur de piano
    Inscrit en
    Juillet 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Accordeur de piano

    Informations forums :
    Inscription : Juillet 2010
    Messages : 112
    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

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 654
    Billets dans le blog
    65
    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

  5. #5
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 520
    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 520
    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 520
    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 520
    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
    Membre actif
    Homme Profil pro
    Accordeur de piano
    Inscrit en
    Juillet 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Accordeur de piano

    Informations forums :
    Inscription : Juillet 2010
    Messages : 112
    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.

  8. #8
    Membre actif
    Homme Profil pro
    Accordeur de piano
    Inscrit en
    Juillet 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Accordeur de piano

    Informations forums :
    Inscription : Juillet 2010
    Messages : 112
    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.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    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.

Discussions similaires

  1. Jeu du nombre mystère
    Par parice02 dans le forum C
    Réponses: 7
    Dernier message: 03/07/2016, 23h08
  2. demande information pour formation web master
    Par MarjoBrest29 dans le forum Etudes
    Réponses: 0
    Dernier message: 17/12/2015, 09h32
  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, 15h53
  4. demande information pour débutant
    Par PaulLab dans le forum Dreamshield
    Réponses: 0
    Dernier message: 14/07/2010, 18h08

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