Powtórz litery i liczby
W
tym przykładzie prezentujemy trzeci wariant zabawy polegającej na
powtórzeniu znaków wygenerowanych przez program. Uatrakcyjniamy
nasz projekt i pozwalamy, aby program wybierał do powtórzenia
zarówno litery jak i liczby. Cały interfejs programu, jak i
procedury początkowe pozostają bez zmian.
Oto kod programu:
unit
Unit1;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs,
StdCtrls;
type
TForm1
= class(TForm)
Edit1:
TEdit;
Button1:
TButton;
Button2:
TButton;
Label1:
TLabel;
Label2:
TLabel;
Label3:
TLabel;
Label4:
TLabel;
Label5:
TLabel;
Label6:
TLabel;
Label7:
TLabel;
procedure
FormClose(Sender: TObject; var
Action: TCloseAction);
procedure
Button1Click(Sender: TObject);
procedure
Button2Click(Sender: TObject);
private
{ Private declarations }
public
{
Public declarations }
end;
var
Form1:
TForm1;
WYNIK:
String; //zmienna przechowująca
znaki do odgadnięcia
Poprawne:
Integer; //zmienna przechowująca
ilość poprawnych
odpowiedzi
Niepoprawne:
Integer ; //zmienna
przechowująca ilość niepoprawnych
odpowiedzi
implementation
{$R
*.dfm}
//przy
zamykaniu programu oceń uzyskane wyniki
procedure
TForm1.FormClose(Sender: TObject; var
Action: TCloseAction);
begin
if
(Poprawne<Niepoprawne) or
(Poprawne=Niepoprawne) then
begin
ShowMessage('Musisz
jeszcze trochę potrenować');
//wyświetl
komunikat
end
//bez średnika
else
//w przeciwnym wypadku...
ShowMessage('Gratuluję!
Uzyskałeś dobry wynik');
//wyświetl
komunikat
end;
//gdy
naciśniesz przycisk START
procedure
TForm1.Button1Click(Sender: TObject);
const
Tablica:
array [1..33]
of String
=('a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','r','s','t','u','w','y','z','1','2','3','4','5','6','7','8','9','0');
var
Znak1:
String;
//zmienna przechowująca pierwszy znak
Znak2:
String; //zmienna
przechowująca drugi znak
Znak3:
String;
//zmienna przechowująca trzeci znak
Znak4:
String; //zmienna
przechowująca czwarty znak
Znak5:
String;
//zmienna przechowująca piąty znak
Znak6:
String ;
//zmienna przechowująca szósty znak
begin
Edit1.Clear;
//wyczyść pole edycyjne (Do
podawania Odpowiedzi)
Randomize;
//uruchom
maszynę losującą
Znak1:=
Tablica[Random(33)+1];
//wylosuj pierwszy znak do
powtórzenia
Znak2:=
Tablica[Random(33)+1];
//wylosuj drugi znak do
powtórzenia
Znak3:=
Tablica[Random(33)+1];
//wylosuj trzeci znak do
powtórzenia
Znak4:=
Tablica[Random(33)+1];
//wylosuj czwarty znak do
powtórzenia
Znak5:=
Tablica[Random(33)+1];
//wylosuj piąty znak do
powtórzenia
Znak6:=
Tablica[Random(33)+1];
//wylosuj szósty znak do
powtórzenia
WYNIK:=(Znak1+Znak2+Znak3+Znak4+Znak5+Znak6);
//zapisz
wylosowane znaki do zmiennej
globalnej
Label2.Caption:=WYNIK;
//wyświetl znaki do powtórzenia
Label2.Update;
//uaktualnij komponent
label
Button2.Enabled:=false;
//zablokuj przycisk Sprawdź
Sleep(3000);
//czekaj 3 sekundy
Label2.Caption:='powtórz';
//zamiast liczby wyświetl napis 'powtórz'
Button2.Enabled:=true;
//odblokuj przycisk Sprawdź
Edit1.SetFocus;
//ustaw focus w Polu do
Odpowiedzi
end;
//gdy
naciśniesz przycisk Sprawdź
procedure
TForm1.Button2Click(Sender: TObject);
var
Odp:
String;
//zmienna przechowująca naszą odpowiedź
begin
Odp:=
Edit1.Text; //odczytaj podaną
odpowiedź i przypisz ją do zmiennej
if
Odp=WYNIK then
//jeżeli odpowiedź jest poprawna to ...
begin
ShowMessage('Bardzo
dobrze!'); //wyświetl
komunikat o poprawnej odpowiedzi
Label2.Caption:=
'------'; //wyczyść
działanie
Poprawne:=Poprawne + 1;
//dodaj punkt do poprawnych odpowiedzi
end
//bez
średnika
else
//w
przeciwnym wypadku ...
begin
ShowMessage('Niestety
źle'); //wyświetl komunikat o
złej odpowiedzi
Niepoprawne:=Niepoprawne
+ 1; //dodaj
punkt do niepoprawnych odpowiedzi
end;
Edit1.Clear;
//wyczyść
pole do podawania Odpowiedzi)
Edit1.SetFocus;
//ustaw
focus w Polu do Odpowiedzi
Label6.Caption:=
IntToStr(Poprawne) ; //wyświetl ilość
poprawnych
odpowiedzi
Label7.Caption:=
IntToStr(Niepoprawne); //wyświetl
ilość niepoprawnych
odpowiedzi
end;
end.
Komentarz:
1. Gdy naciśniesz przycisk START
Chcąc używać razem
litery i liczby, musimy je wszystkie umieścić w jednym zbiorze, w
tym przypadku pozostajemy przy tablicy stałych o nazwie Tablica.
Zauważmy, że tablica ta w dalszym ciągu jest typu string co
powoduje, że umieszczone w niej liczby będą traktowane jako znaki
tekstowe, stąd też przypisujemy je do zmiennych Znak (typu string),
podobnie jak litery, czyli bez konwersji. Z uwagi na to, że program
odczytuje z pola edycyjnego odpowiedź także jako typ string, więc
w naszym projekcie -pomimo stosowania liczb- ani razu nie użyjemy
konwersji!
Po wzbogaceniu tablicy o
nowe elementy, musimy podać aktualną ilość znaków (w naszym
przypadku „33”), oraz po kolei wymienić w apostrofach wszystkie
te elementy.
Zmieniamy nazwy zmiennych
lokalnych z Litera na bardziej uniwersalne, czyli Znak, ponieważ
oprócz liter będą umieszczone w niej także liczby. Nie jest to
oczywiście warunek. Możemy zmienne, jak i stałe nazywać dowolnie,
według własnego uznania, najlepiej jednak tak, aby informowały do
czego służą.
Poza tą niewielką
zmianą program niczym więcej nie różni się od poprzedniej
wersji, ani w budowie, ani w działaniu, więc kończymy komentarz do
naszego potrójnego projektu pod wspólną nazwą „Powtórz za
mną”. W kolejnym przykładzie zapoznamy się już z nowym typem
zabawy.
Artykuł pochodzi z mojej książki pt. "Delphi w przykładach dla początkujących". Zapraszam na Stronę książki.
Ciekawe artykuły:
- Zagadki logiczne i inne zagadki
- Gry matematyczne w Delphi
- Zabawy matematyczne w Delphi
- Przechwyt klawiatury w Delphi
- Nauki płynące z mądrości pokoleń
Zapoznaj się z innymi utworami. Przejdź do zakładki Spis artykułów.
Brak komentarzy:
Prześlij komentarz