wtorek, 9 grudnia 2014

Zabawy rozwijające pamięć w Delphi cz 5

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.



                               < Wstecz    1...5/5

Artykuł pochodzi z mojej książki pt. "Delphi w przykładach dla początkujących". Zapraszam na Stronę książki.

poradnik programowania Delphi



Brak komentarzy:

Prześlij komentarz

Wspomóż mnie lub zostań moim patronem już od 5 zł - sprawdź szczegóły

Moje e-booki

Kliknij w okładkę, aby przejść do strony książki

Przejdź do strony książki Przejdź do strony książki