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:
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.
Demande informations pour jeu du nombre mystère amélioré par mes soins
Citation:
Envoyé par
Andnotor
Code:
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
Demande informations pour jeu du nombre mystère amélioré par mes soin.s
Citation:
Envoyé par
Charly910
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.
Demande informations pour jeu du nombre mystère amélioré par mes soins.
Citation:
Envoyé par
SergioMaster
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:
1 2 3 4 5
| try
nbTest:=StrtoInt(reponse)
except
nbtest:=-1
end; |
remplaçable selon la version de Delphi par
Code:
nbTest:= nbTest:=StrtoIntDef(reponse,-1);
Simplement écrire "n'est pas satisfaisant" nous oblige à utiliser une boule de cristal mais :cristal:
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.
Demande informations pour jeu du nombre mystère amélioré par mes soins
Citation:
Envoyé par
Charly910
Bonjour,
oui, tu peux utiliser une boucle :
Code:
1 2 3
| Repeat
...
Until (NbTest = NbSecret) ; |
et aussi te ménager une porte de sortie après le InputQuery :
Code:
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:
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.
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:
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. |
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
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:
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.
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