wtorek, 25 listopada 2014

Zabawy rozwijające pamięć w Delphi cz 1

Powtórz liczby


     Jest to kolejna zabawa rozwijająca nasz umysł. W tej, trenujemy i rozwijamy pamięć. Program będzie podawał szereg liczb, które będziemy musieli z pamięci powtórzyć.


Założenia i opis zabawy:


     Podobnie jak w poprzednich przypadkach, przyjmujemy możliwość wpisywania odpowiedzi po raz drugi, gdy pierwsza nasza odpowiedź będzie błędna. Pozostawiamy także sprawdzone rozwiązania z poprzednich przykładów, czyli możliwość oceny naszych wyników przez program na zakończenie gry i wyświetlanie na bieżąco wyników, ile odpowiedzi udzieliliśmy poprawnych, a ile niepoprawnych. 
 
     Zachowujemy także ograniczenia dla pola do wpisywania odpowiedzi: dopuszczamy tylko możliwość wpisywania liczb oraz ich kasowanie. W poprzednich zabawach istniała możliwość wpisywania minusa, w tej zabawie minus nie jest nam potrzebny, więc usuwamy tę możliwość.

     Aby ułatwić sobie zadanie, nie będziemy losować każdej liczby osobno. Wylosujemy jedną dużą liczbę, składającą się z pięciu znaków, które będziemy musieli wpisać jedna za drugą, tworząc w ten sposób na powrót jedną dużą liczbę. Jest to dobry kompromis między trudnością zabawy a naszą niewyćwiczoną pamięcią. Nic nie stoi jednak na przeszkodzie, aby zwiększyć ilość liczb do powtórzenia.


Potrzebne komponenty:


     Generalnie będziemy używać tych samych komponentów, co w poprzednich zabawach, różnice będą tylko w sposobie ich oprogramowania. Na formie głównej umieszczamy więc następujące komponenty, nadając im odpowiednie nazwy:

 
                                     komponent            Nazwa (Caption)

Edit1         (usuwamy nazwę)
Button1            START
Button2           Sprawdź
Label1        Powtórz liczby:
Label2              Wyniki
Label3           Poprawne:
Label4         Niepoprawne:
Label5                  0
Label6                  0
Label7               00000


A oto interfejs programu i pełny 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 Edit1KeyPress(Sender: TObject; var Key: Char);
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: Integer;             //zmienna przechowująca liczby do powtórzenia
Poprawne: Integer;        //zmienna przechowująca ilość poprawnych odpowiedzi
Niepoprawne: Integer;   //zmienna przechowująca ilość niepoprawnych odpowiedzi

implementation

{$R *.dfm}



                //pozwól na wpisywanie tylko liczb i Backpace w polu odpowiedzi

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if not (Key in ['0'..'9',#8]) then
       begin
           Key:=#0;
            ShowMessage('To nie jest liczba');          //wyświetl komunikat o błędzie
       end;
end;


                       //przy zamykaniu programu oceń uzyskane wyniki

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
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);
begin
Edit1.Clear;          //wyczyść pole edycyjne (Do podawania Odpowiedzi)
Randomize;                                          //uruchom maszynę losującą
WYNIK:=Random(99999);         //wylosuj plik do powtórzenia od 0 do 99999

Label7.Caption:=IntToStr(WYNIK);      //wyświetl liczbę do powtórzenia
Label7.Update;                                     //uaktualnij komponent label
Button2.Enabled:=false;                       //zablokuj przycisk Sprawdź
Sleep(3000);                                         //czekaj 3 sekundy
Label7.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);
Label KONIEC;                //Etykieta do przechodzenia w inne miejsce kodu
var
Odp: String;                     //zmienna przechowująca naszą odpowiedź

begin
Odp:= Edit1.Text;     //odczytaj podaną odpowiedź i przypisz ją do zmiennej

if Odp='' then                 //gdy nie podano odpowiedzi monituj o błędzie
    begin
        ShowMessage('Wpisz najpierw wynik'); //wyświetl komunikat informujący
        Edit1.SetFocus;        //ustaw focus w Polu do Odpowiedzi
        goto KONIEC;          //pomiń poniższy kod i przejdź od razu na koniec procedury
    end;

if Odp=(IntToStr(WYNIK)) then              //jeżeli odpowiedź jest poprawna to ...
    begin
         ShowMessage('Bardzo dobrze!');    //wyświetl komunikat o poprawnej odpowiedzi
         Label7.Caption:= '00000:';                //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

Label5.Caption:= IntToStr(Poprawne);      //wyświetl ilość poprawnych odpowiedzi
Label6.Caption:= IntToStr(Niepoprawne); //wyświetl ilość niepoprawnych odpowiedzi

KONIEC:       //etykieta do której przechodzi kod, gdy ktoś nie wpisze żadnej liczby
end;
end.

                         Strona    1/5    Dalej >

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