|
||||
|
||||
|
Capitolo 2Indovina numeroQuesta è la prima applicazione del capitolo 2. Per poterla capire a fondo è indispensabile aver visto il capitolo 1, poiché la descrizione del programma sarà data, d'ora in poi, in forma molto generica e si limiterà alla spiegazione dei concetti nuovi. Inoltre non verrà più fornito l'elenco dei nomi e delle proprietà da assegnare agli oggetti, poiché il lettore dovrebbe ormai aver acquisito le regole per rendere il codice leggibile. Ribadiamo, comunque per l'ultima volta, che il nome da assegnare agli oggetti tramite la proprietà Name deve essere auto-esplicativo, anche per chi non ha sviluppato il programma. Pensate a rivedere dopo solo 1 mese un programma fatto da voi stessi senza dei nomi chiari: « Cosa conterrà Edit1? Che cosa è Label3? Cosa fa Button2? »
Torniamo al programma. Qui sopra è rappresentato l'aspetto del programma all'avvio; da notare che il bottone Prova è inizialmente disattivato (la proprietà Enabled è preimpostata a False). Cliccando su Nuovo si genera un numero casuale segreto fra 0 e 999, che viene memorizzato internamente dal programma in una variabile intera nella sezione private della dichiarazione della form e che l'utente dovrà indovinare. Il bottone Prova si attiva (la proprietà Enabled passa da False a True), il messaggio "Clicca su Nuovo per generare un numero casuale minore di 1000" si modifica in: "Questo messaggio ti aiuterà ad indovinare il numero generato". A questo punto l'utente inserisce un numero nel campo Edit e clicca si Prova (o meglio preme il tasto Invio, perché la proprietà Default del bottone è stata impostata a True). Il programma confronta il numero inserito con quello segreto e in base all'esito visualizza uno dei 3 messaggi seguenti:
L'utente continua ad inserire altri numeri fino ad indovinare il numero segreto. A questo punto o esce dal programma o clicca nuovamente su Nuovo e ricomincia. Vediamo il listato nella sua completezza, poiché vi sono alcuni elementi nuovi che dobbiamo analizzare a proposito della visibilità delle variabili. unit UnitIndovinaNumero;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls;
type
TFormIndovinaNumero = class(TForm)
LabelIndovina: TLabel;
EditX: TEdit;
LabelMessaggio: TLabel;
ButtonNuovo: TButton;
ButtonProva: TButton;
ButtonEsci: TButton;
procedure FormCreate(Sender: TObject);
procedure ButtonNuovoClick(Sender: TObject);
procedure ButtonProvaClick(Sender: TObject);
procedure ButtonEsciClick(Sender: TObject);
private
{ Private declarations }
n: Integer;
public
{ Public declarations }
end;
var
FormIndovinaNumero: TFormIndovinaNumero;
implementation
{$R *.DFM}
procedure TFormIndovinaNumero.FormCreate(Sender: TObject);
begin
Randomize;
end;
procedure TFormIndovinaNumero.ButtonNuovoClick(Sender: TObject);
begin
LabelMessaggio.Caption:='Questo messaggio ti aiuterà
ad indovinare il numero generato';
n:=Random(1000);
ButtonProva.Enabled:=True;
end;
procedure TFormIndovinaNumero.ButtonProvaClick(Sender: TObject);
var
x: Integer;
begin
x:=StrToInt(EditX.Text);
if x>n then
LabelMessaggio.Caption:='Il numero è troppo grande'
else if x<n then
LabelMessaggio.Caption:='Il numero è troppo piccolo'
else
LabelMessaggio.Caption:='Hai indovinato!';
end;
procedure TFormIndovinaNumero.ButtonEsciClick(Sender: TObject);
begin
Application.Terminate;
end;
end.
La variabile n collocata nella sezione private contiene il numero segreto. Tutte le variabili, procedure e funzioni dichiarate come private sono accessibili solo all'interno dell'oggetto in cui sono dichiarate. Invece, le variabili, procedure e funzioni dichiarate come public sono accessibili anche all'esterno dell'oggetto in cui sono dichiarate, con la sequenza NomeOggetto.NomeVariabile. All'avvio del programma viene lanciata automaticamente la procedura FormCreate,
che contiene l'istruzione Randomize, la quale serve per inizializzare
il generatore di numeri casuali tramite l'orologio di sistema. Se non
venisse effettuata la chiamata all'istruzione Randomize, lanciando
più volte il programma verrebbe generata sempre la stessa sequenza di
numeri casuali. La procedura ButtonNuovoClick, modifica la Label del messaggio, genera un numero casuale intero minore di 1000, tramite l'istruzione Random: n:=Random(1000); e lo assegna alla variabile n. Da osservare che l'istruzione Random possiede anche la dichiarazione senza parametri; in tal caso il numero casuale restituito è un numero reale positivo strettamente minore di 1. Il resto del programma dovrebbe essere sufficientemente chiaro per chi ci ha seguito dall'inizio fin qui. Esercizio. Migliorare il programma suddetto visualizzando sulla form un contatore, che si incrementi ogni volta che l'utente fa un tentativo errato per indovinare il numero e che venga azzerato, quando viene generato un nuovo numero casuale.
|
|||
|
||||