piątek, 17 października 2014

Gry matematyczne w Delphi cz 3

Oto pełny kod programu:

unit Unit1;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, MmSystem, MPlayer;



type

TForm1 = class(TForm)

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

MediaPlayer1: TMediaPlayer;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Button2Click(Sender: TObject);

procedure Wylosuj_i_odtworz;



private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;

WYNIK: Integer;              //zmienna przechowująca wynik

Poprawne: Integer;          //zmienna przechowująca ilość poprawnych odpowiedzi

Niepoprawne: Integer;      //zmienna przechowująca ilość niepoprawnych odpowiedzi

Ilosc_plikow: Integer;       //zmienna przechowująca ilość plików w katalogu

Katalog: String;               //zmienna przechowująca ścieżkę dostępu do katalogu



implementation



{$R *.dfm}







              //przy uruchomieniu programu wyzeruj punktację

procedure TForm1.FormCreate(Sender: TObject);

   begin

       Poprawne:=0;                 //wyzeruj ilość poprawnych odpowiedzi

       Niepoprawne:=0;            //wyzeruj ilość niepoprawnych odpowiedzi

       Label4.Caption:= '0';       //wyświetl '0' poprawnych odpowiedzi

       Label5.Caption:= '0';       //wyświetl '0' niepoprawnych odpowiedzi

  end;






              //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ć');

          end                 //bez średnika

             else             //w przeciwnym wypadku...

                 ShowMessage('Gratuluję! Uzyskałeś dobry wynik');

  end;











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

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

   begin

       if not (Key in ['0'..'9',#45,#8]) then

           begin

               Key:=#0;

               ShowMessage('To nie jest liczba');         //wyświetl komunikat o błędzie

           end;

   end;








               // Procedura losująca i odtwarzająca plik dźwiękowy

var

Plik: Integer;            //zmienna przechowująca numer pliku do odtworzenia



procedure TForm1.Wylosuj_i_odtworz;

    begin

        Randomize;

        Plik:= Random(Ilosc_plikow);    //wylosuj plik z katalogu

        MediaPlayer1.FileName:= Katalog+IntToStr(Plik)+'.mp3';    //odtwórz plik

        MediaPlayer1.Open;               //otwórz pliku

        MediaPlayer1.Wait:=True;       //czekaj aż skończy się wybrzmiewać plik

        MediaPlayer1.Play;                //odtwórz plik

  end;







                     //gdy naciśniesz przycisk START

procedure TForm1.Button1Click(Sender: TObject);

var

   Liczba1: Integer;      //zmienna przechowująca pierwszą liczbę

   Liczba2: Integer;      //zmienna przechowująca drugą liczbę

   Dzialanie: Integer;     //zmienna pomocnicza do losowania znaku działania

   Numer_pliku: Integer; //zmienna przechowująca numer pliku 'Ile jest'

   Znak: String;           //zmienna przechowująca znak działania

   Sciezka1: String;    //zmienna przechowująca ścieżkę dostępu do pliku dźwiękowego

   Sciezka2: String;    //zmienna przechowująca ścieżkę dostępu do pliku dźwiękowego

   Sciezka3: String;    //zmienna przechowująca ścieżkę dostępu do pliku dźwiękowego

   Sciezka4: String;    //zmienna przechowująca ścieżkę dostępu do pliku dźwiękowego



begin

    Edit1.Clear;                      //wyczyść pole edycyjne (Do podawania Odpowiedzi)

     Randomize;                                       //uruchom maszynę losującą

    Liczba1:=Random(21);                        //losuj pierwszą liczbę

    Liczba2:=Random(21);                        //losuj drugą liczbę

    Numer_pliku:=Random(5);                   //wylosuj numer pliku Ile jest

    Dzialanie:=Random(3);                        //losuj znak działania matematycznego

        case Dzialanie of                            //gdy zostanie wylosowana dana liczba to...

             0: WYNIK:= Liczba1+Liczba2;     //...wykonaj dodawanie

             1: WYNIK:= Liczba1-Liczba2;      //...wykonaj odejmowanie

             2: WYNIK:= Liczba1*Liczba2;      //...wykonaj mnożenie

        end;


if Dzialanie=0 then

    Znak:= '+';                   //jeżeli wylosowano dodawanie to pokaz znak '+'

if Dzialanie=1 then

    Znak:= '-';                    //jeżeli wylosowano odejmowanie to pokaz znak '-'

if Dzialanie=2 then

    Znak:= 'x';                   //jeżeli wylosowano mnożenie to pokaz znak 'x'



         //przypisz do zmiennych Sciezka ścieżki dostępu do plików

Sciezka1:='c:\Gry\Policz ile jest\'+IntToStr(Numer_pliku)+'.wav';

Sciezka2:= 'c:\Gry\WSPOLNE\Liczby i znaki\'+IntToStr(Liczba1)+'.wav';

Sciezka3:= 'c:\Gry\WSPOLNE\Liczby i znaki\'+Znak+'.wav';

Sciezka4:= 'c:\Gry\WSPOLNE\Liczby i znaki\'+IntToStr(Liczba2)+'.wav';

PlaySound(PChar(Sciezka1),0,SND_FILENAME);     //odtwórz plik Ile jest

PlaySound(PChar(Sciezka2),0,SND_FILENAME);     //odtwórz plik 1 liczba

PlaySound(PChar(Sciezka3),0,SND_FILENAME);     //odtwórz plik Znak działania

PlaySound(PChar(Sciezka4),0,SND_FILENAME);     //odtwórz plik 2 liczba



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 miejsca kodu

var

Odp: String;                //zmienna przechowująca naszą odpowiedź



begin

    Odp:= Edit1.Text;      //odczytaj podana odpowiedz i przypisz ja do zmiennej


    if Odp='' then            //gdy nie podano odpowiedzi monituj o wpisaniu wyniku

       begin 
         PlaySound('c:\Gry\WSPOLNE\Komunikaty\WpiszLiczbe.wav',0,SND_FILENAME);

            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

        Ilosc_plikow:=7;                         //liczba plików w katalogu

        Katalog:='c:\Gry\WSPOLNE\Komunikaty\Dobrze\';          //ścieżka dostępu

        Wylosuj_i_odtworz;                    //włącz procedurę odtwarzającą plik

        Poprawne:=Poprawne + 1;          //dodaj punkt do poprawnych odpowiedzi

   end                                               //bez średnika



else                                                 //w przeciwnym wypadku ...



begin

     Ilosc_plikow:=8;                           //liczba plików w katalogu

    Katalog:='c:\Gry\WSPOLNE\Komunikaty\Zle\';         //ścieżka dostępu

    Wylosuj_i_odtworz;                        //włącz procedurę odtwarzającą plik

    Niepoprawne:=Niepoprawne + 1;     //dodaj punkt do niepoprawnych odpowiedzi

end;



Edit1.Clear;                                   //wyczyść pole do podawania Odpowiedzi

Edit1.SetFocus;                            //ustaw focus w Polu do Odpowiedzi



Label4.Caption:= IntToStr(Poprawne);         //wyświetl ilość poprawnych odpowiedzi

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



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

end; 
end.





< Wstecz    3/4    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