Powtórz litery
Przedstawiona tu zabawa w
założeniach podobna jest do tej, którą prezentowaliśmy
poprzednio (Powtórz liczby). W obu chodzi o to, aby powtórzyć ciąg znaków, jakie
program dla nas wygeneruje. Pomimo tego podobieństwa, użycie liter
jako znaków do odgadnięcia implikuje użycie bardziej
skomplikowanej formy kodu. Uwarunkowane jest to naturą tychże
znaków. W przypadku poprzedniej zabawy, znakami tymi były liczby,
więc program -jako maszyna matematyczna- nie miał problemu z ich
obróbką. Wystarczyło wylosować jedną liczbę pięcioznakową,
aby spełnić nasze oczekiwanie. W sytuacji gdy mamy do czynienia z
literami (a więc znakami niematematycznymi), program nie jest w
stanie sam od siebie niczego wygenerować. Musimy mu z poziomu kodu
zaimplementować jakiś zbiór znaków (w tym przypadku liter), aby
mógł na nim dokonywać działań. Poprzez swoje funkcje Delphi
zaczyna traktować te znaki w sposób matematyczny, pamiętając
jednak, że są to znaki typu string.
Oto
peny kod zabawy:
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 litery 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
begin //jeżeli
uzyskałeś więcej złych odpowiedzi lub tyle samo co dobrych
wtedy...
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..23]
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');
//tablica liter
var
Litera1:
String; //zmienna
przechowująca pierwszą literę
Litera2:
String;
//zmienna przechowująca drugą literę
Litera3:
String;
//zmienna przechowująca trzecią literę
Litera4:
String; //zmienna
przechowująca czwartą literę
Litera5:
String; //zmienna
przechowująca piątą literę
Litera6:
String; //zmienna
przechowująca szóstą literę
begin
Edit1.Clear;
//wyczyść pole edycyjne
(Do podawania Odpowiedzi)
Randomize;
//uruchom
maszynę losującą
Litera1:=
Tablica[Random(23)+1];
//wylosuj 1 literę
Litera2:=
Tablica[Random(23)+1];
//wylosuj 2 literę
Litera3:=
Tablica[Random(23)+1];
//wylosuj 3 literę
Litera4:=
Tablica[Random(23)+1];
//wylosuj 4 literę
Litera5:=
Tablica[Random(23)+1];
//wylosuj 5 literę
Litera6:=
Tablica[Random(23)+1];
//wylosuj 6 literę
WYNIK:=
(Litera1+Litera2+Litera3+Litera4+Litera5+Litera6);
//zapisz
wylosowane litery do zmiennej globalnej
Label2.Caption:=WYNIK;
//wyświetl liczbę 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.
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 rozwijające pamięć 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