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ź