Komentarz:
1.
Zmienne globalne
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
Poza znanymi nam już
zmiennymi globalnymi, deklarujemy dwie nowe, które będzie
wykorzystywała nasza procedura „Wylosuj i odtwórz”. Jest to
konieczne, ponieważ pliki dźwiękowe znajdują się w różnych
katalogach (zmienna Katalog), a każdy z nich zawiera inną liczbę
plików (zmienna Ilosc_plikow).
2.
Procedura Wylosuj i odtwórz
Z
uwagi na to, iż chcemy, aby program za każdym razem losował swoją
wypowiedź jedną z wielu, stąd też na początku naszej procedury
musimy uruchomić maszynę losującą (Randomize). W dalszej
kolejności następuje losowanie numeru pliku do odtworzenia, dlatego
właśnie plikom dźwiękowym nadaliśmy nazwy w postaci liczb.
Ponieważ w tej chwili nie wiemy z jakiego katalogu program skorzysta
(bo to zależy od rodzaju wypowiedzi), więc w tej ogólnej postaci
musimy wprowadzić pierwszą zmienną globalną, czyli Ilosc_plikow,
którą wypełnimy bezpośrednio w danej procedurze. Nasza procedura
pobierze ten parametr i wstawi u siebie, losując określony plik.
Jako drugi parametr zostanie pobrana druga zmienna, Katalog, która
będzie zawierać ścieżkę dostępu do konkretnego katalogu z
wypowiedziami.
Po pobraniu potrzebnych
informacji następuje uruchomienie odtwarzacza Media Player i
wprowadzenie do niego ścieżki dostępu (czyli adresu miejsca na
twardym dysku) pliku, która ma zostać odtworzony. Ścieżka ta w
naszym przykładzie składa się z trzech części: ścieżki dostępu
do katalogu, zmiennej „Plik”, która zawiera numer pliku do
odtworzenia i części tekstowej (.mp3), aby powiązać zmienną
„Plik” z plikiem dźwiękowym, ponieważ co prawda my nadaliśmy
plikowi nazwę liczby, ale pełna nazwa pliku zawiera jeszcze jego
rozszerzenie (w naszym przypadku .mp3), stąd też do zmiennej
„Plik”, która przechowuje samą liczbę dokładamy końcówkę
„.mp3”.
Mając podaną poprawną
ścieżkę dostępu następuje załadowanie pliku do odtwarzacza
(MediaPlayer1.Open) i jego odtworzenie (Play). Pomiędzy tymi
poleceniami wstawiamy jeszcze polecenie MediaPlayer1.Wait: True,
które aktywuje właściwość Wait (czekaj). Dzięki niej
Media Player musi czekać z zamknięciem pliku do zakończenia jego
odtwarzania. Funkcja ta przydaje się szczególnie mocno, gdy chcemy
odtwarzać kilka plików pod rząd. Bez tego polecenia Media Player
uruchamiałby kolejne utwory i zaraz je zamykał, nie pozwalając im
wybrzmieć.
3.
Gdy naciśniesz przycisk START
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
W
porównaniu z wersją prostą, w sekcji zmiennych (var) mamy
umieszczone dodatkowe cztery zmienne typu string przechowujące
ścieżkę dostępu do poszczególnych plików dźwiękowych, oraz
zmienną Numer_pliku, która przechowuje numer pliku do odtworzenia
dla wypowiedzi „Ile jest”. Na ich podstawie program będzie
tworzył swoją wypowiedź według następującego schematu:
(Ile
jest) (Liczba1) (znak) (Liczba2)
Kolejną sekcję, po
deklaracjach zmiennych nie komentujemy, ponieważ jest ona taka sama,
jak w wersji oryginalnej. Jedyną zmianą jest dodanie linii
Numer_pliku:=Random(5).
Odpowiada ona za wylosowanie numeru pliku do
odtworzenia dla początku wypowiedzi, to znaczy „Ile jest”.
Wspominaliśmy już o tym, że robimy to po to, aby bardziej ożywić
nasz program. Dzięki losowaniu odpowiedzi jednej z kilku możliwych,
uatrakcyjniamy program. W naszym przypadku w katalogu „Policz ile
to jest” mamy przygotowanych pięć wariantów tej wypowiedzi, stąd
też program losuje plik właśnie z tego przedziału.
//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
W
przedstawionym powyżej fragmencie kodu, najpierw tworzymy ścieżkę
dostępu do odpowiednich katalogów i plików, gdyż funkcja
PlaySound nie umożliwia łączenia tekstu ze zmiennymi, a to musimy
zrobić chcąc za każdym razem losować inny plik. W normalnych
warunkach, w miejsce Pchar(sciezka) moglibyśmy wpisać pełną
ścieżkę do pliku, na przykład: „C:\Gry\Policz ile to
jest\1.wav”.
W
pierwszej kolejności, do zmiennych „sciezka” przypisujemy
ścieżkę dostępu do odpowiedniego katalogu, a następnie za pomocą
zadeklarowanych wcześniej zmiennych (Numer_pliku, Liczba1 i 2, Znak)
ustalamy konkretny plik do odtworzenia.