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.
W
schemacie wypowiedzi programu mamy cztery części, więc tyle też
musimy mieć zmiennych. Zmienna „Sciezka1” przechowuje ścieżkę
dostępu do plików odpowiedzialnych za pierwszą część
wypowiedzi, czyli „Ile to jest”. Kolejne zmienne przechowują z
kolei ścieżkę dostępu do wspólnego katalogu o nazwie „Liczby i
znaki”, w którym zawarte są pliki umożliwiające wypowiadanie
liczb i znaków matematycznych.
Mając już ustalone
ścieżki dostępu plików do odtworzenia, nie pozostaje nic innego,
jak ich załadowanie do funkcji PlaySound i odtworzenie. Przy
wprowadzaniu zmiennej musimy użyć funkcji konwertującej PChar,
aby typ zmiennej „Sciezka”, czyli string, był zrozumiały
dla funkcji PlaySound. Na koniec, tradycyjnie już, ustawiamy kursor
(focus) na polu do podawania odpowiedzi.
Jak widać z tego
fragmentu, w porównaniu z wersją prostą programu, jest to tylko
wymiana polecenia ShowMessage na zbiór poleceń PlaySound.
4. Gdy naciśniesz przycisk Sprawdź
Odp:=
Edit1.Text;
//odczytaj podaną odpowiedź i przypisz ją 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
W
sekcji tej wymieniamy tylko komunikat tekstowy (ShowMessage) na
głosowy (PlaySound). Z uwagi na to, że komunikat ten rzadko kiedy
będzie wykorzystywany, więc przygotowaliśmy tylko jedną jego
wersję. Może to być proste stwierdzenie typu „Wpisz najpierw
wynik” lub podobne. Skoro mamy tylko jeden plik do odtworzenia,
więc w funkcji PlaySound wpiszemy pełną ścieżkę dostępu, nie
zapominając, że musi się ona znaleźć pomiędzy apostrofami.
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;
Podobnie, jak w
poprzednim przypadku, w sekcji tej następuje tylko wymiana rodzaju
komunikatu z tekstowego na głosowy. W tym jednak przypadku
zastosujemy odtwarzacz MediaPlayer, aby móc skorzystać z plików
mp3. Za każdym razem, chcąc z niego skorzystać będziemy
wykorzystywać stworzoną przez nas procedurę Wylosuj_i_odtworz.
Wymaga ona podania dwóch parametrów: ścieżki dostępu do
odpowiedniego katalogu, oraz podania informacji, ile w tym katalogu
znajduje się plików, toteż na początku deklarujemy obie zmienne
globalne, a następnie wydajemy polecenie, aby program uruchomił
naszą procedurę odtwarzającą. Wykona się ona poprawnie, ponieważ
w zmiennych globalnych znajdzie potrzebne dla swego działania dane.
Bez ich wcześniejszego zadeklarowania program zgłosiłby błąd.
Deklarując zmienną
„Ilosc_plikow” musimy już wiedzieć, ile tych plików w danym
katalogu jest. Musimy zatem przygotować je wcześniej, przed
przystąpieniem do pisania kodu. Jeżeli do katalogu dołożymy nowe
pliki, już po napisaniu kodu, program nie skorzysta z nich, ponieważ
w swoim kodzie będzie posiadał stare dane. W tym przypadku będziemy
musieli zmodyfikować kod, wpisując zaktualizowane deklaracje, ile w
tej chwili znajduje się plików w katalogu, a następnie od nowa
skompilować program.
W
przykładzie rozwinięcia podstawowej wersji programu jaki tutaj
zaprezentowaliśmy, wymieniliśmy tylko część komunikatów na ich
głosowe odpowiedniki. Nic jednak nie stoi na przeszkodzie, aby w
sposób pokazany wyżej nie pozamieniać pozostałych komunikatów,
chociażby tych, które przy wyłączeniu programu oceniają nasze
wyniki. Możemy także nadać programowi cechę, aby po udzielonej
odpowiedzi informował, jaki jest aktualny wynik lub wprowadzić inne
elementy i rozwiązania, które zwiększą komfort pracy lub
możliwości programu. Wszystko zależy od naszych oczekiwań.
< Wstecz 4/4
Artykuł pochodzi z mojej książki pt. "Delphi w przykładach dla początkujących". Zapraszam na Stronę książki.
Ciekawe artykuły:
Zapoznaj się z innymi utworami. Przejdź do zakładki Spis artykułów.
- Zagadki logiczne i inne zagadki
- Zabawy matematyczne w Delphi
- Zabawy rozwijające pamięć w Delphi
- Przechwyt klawiatury w Delphi
- Zakładanie hooka w Delphi- metoda Short Cut
Zapoznaj się z innymi utworami. Przejdź do zakładki Spis artykułów.
Brak komentarzy:
Prześlij komentarz