Policz, ile to jest- wersja trudniejsza
Poniższy
przykład jest trudniejszą wersją poprzednio zaprezentowanej gry (Policz, ile to jest- wersja prosta). W
tamtej, działania odbywały się z użyciem dwóch liczb, a w tej, z
użyciem aż czterech, na przykład: „Ile to jest: 2 + 8 x 11 – 7
?”. Wszystkie inne nasze założenia i rozwiązania pozostają bez
zmian.
A
oto pełny 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;
procedure
FormCreate(Sender: TObject);
procedure
FormClose(Sender: TObject; var
Action: TCloseAction);
procedure
Edit1KeyPress(Sender: TObject; var
Key: Char);
procedure
Button1Click(Sender: TObject);
procedure
Button2Click(Sender: Tobject);
private
{ Private declarations }
public
{
Public declarations }
end;
var
Form1:
TForm1;
WYNIK:
Integer;
//zmienna przechowująca
wynik działania
Poprawne:
Integer; //zmienna przechowująca ilość
poprawnych odpowiedzi
Niepoprawne:
Integer; //zmienna
przechowująca ilość niepoprawnych odpowiedzi
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 razie
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;
//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ę
Liczba3:
Integer; //zmienna przechowująca
trzecią liczbę
Liczba4:
Integer; //zmienna przechowująca
czwartą liczbę
Dzialanie:
Integer; //zmienna pomocnicza do losowania
znaku działania
Znak1:
String; //zmienna
przechowująca pierwszy znak działania
Znak2:
String; //zmienna
przechowująca drugi znak działania
Znak3:
String; //zmienna
przechowująca trzeci znak działania
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ę
Liczba3:=Random(21);
//losuj trzecią liczbę
Liczba4:=Random(21);
//losuj czwartą liczbę
//wygeneruj pierwszą
część działania
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
Znak1:=
'+';
//jeżeli wylosowano dodawanie to pokaż znak '+'
if
Dzialanie=1 then
Znak1:=
'-';
//jeżeli wylosowano odejmowanie to pokaż znak '-'
if
Dzialanie=2 then
Znak1:=
'x'; //jeżeli
wylosowano mnożenie to pokaż znak 'x'
//wygeneruj
drugą część działania
Dzialanie:=Random(3);
//losuj znak działania
matematycznego
case
Dzialanie of
//gdy zostanie wylosowana dana liczba to...
0:
WYNIK:= WYNIK+Liczba3; //...wykonaj
dodawanie
1:
WYNIK:= WYNIK-Liczba3; //...wykonaj
odejmowanie
2:
WYNIK:= WYNIK*Liczba3; //...wykonaj
mnożenie
end;
if
Dzialanie=0 then
Znak2:=
'+'; //jeżeli
wylosowano dodawanie to pokaż znak '+'
if
Dzialanie=1 then
Znak2:=
'-';
//jeżeli wylosowano odejmowanie to pokaż znak '-'
if
Dzialanie=2 then
Znak2:=
'x'; //jeżeli
wylosowano mnożenie to pokaż znak 'x'
//wygeneruj
trzecią część działania
Dzialanie:=Random(3);
//losuj znak działania
matematycznego
case
Dzialanie of
//gdy zostanie wylosowana dana liczba to...
0:
WYNIK:= WYNIK+Liczba4; //...wykonaj
dodawanie
1:
WYNIK:= WYNIK-Liczba4; //...wykonaj
odejmowanie
2:
WYNIK:= WYNIK*Liczba4; //...wykonaj
mnożenie
end;
if
Dzialanie=0 then
Znak3:=
'+'; //jeżeli
wylosowano dodawanie to pokaż znak '+'
if
Dzialanie=1 then
Znak3:=
'-';
//jeżeli wylosowano odejmowanie to pokaż znak '-'
if
Dzialanie=2 then
Znak3:=
'x'; //jeżeli
wylosowano mnożenie to pokaż znak 'x'
//wyświetl
działanie
Label6.Caption:=
('Ile jest: '+ IntToStr(Liczba1) +
' ' + znak1 + ' '
+IntToStr(Liczba2) + ' ' + znak2 + ' ' + IntToStr(Liczba3) + ' ' +
znak3 + ' ' +IntToStr(Liczba4) + ' ?');
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 podaną odpowiedź
i przypisz ją do zmiennej
if
Odp='' then //gdy
nie podano odpowiedzi monituj o wpisaniu wyniku
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
Label6.Caption:=
'Ile jest:'; //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
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.
Komentarz:
W
tej części pomijamy te elementy wraz z komentarzem, które zostały
już opisane w poprzedniej wersji. Omówimy tylko te elementy, które
się zmieniają.
Gdy naciśniemy przycisk START
Najważniejszą
zmianą, jaką wprowadzamy to ilość liczb. Zamiast dwóch, mamy je
teraz cztery. Sytuacja generalnie jednak nie zmienia się: wartość
każdej z nich wyznaczamy losowo z przedziału od 0 do 20 za pomocą
instrukcji Random(21). Nie zmienia się także procedura wyznaczająca
znak działania, musimy ją tylko zastosować trzy razy, ponieważ
tyle znaków będziemy potrzebować na obsługę czterech liczb.
Każdy znak działania przypisujemy do innej zmiennej tekstowej
(Znak1, Znak2, Znak3), dzięki czemu całe działanie będziemy mogli
wyświetlić na etykiecie Label6.
Procedura
dla przycisku „Sprawdź” nie zmienia się, gdyż w dalszym ciągu
będzie ona sprawdzała wpisany przez nas wynik działania, bez
względu na to, jakie działanie wygeneruje procedura przycisku
START.
W
następnym przykładzie ożywimy nieco nasz program i sprawimy, że
przemówi on do nas ludzkim głosem.
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