> //если флажок установлен
> //блокируем ввод от второго игрока
> ch2.Enabled:= False;
> рl2.Enabled:= False;
> //включаем ввод от первого игрока
> ch1.Enabled:= True;
> pl1.Enabled:= True;
> end
> else begin
> //если игра идет с человеком, то
> //включаем ввод для второго игрока
> ch2.Enabled:= True;
> рl2.Enabled:= True;
> end;
>end;
Осталось только обработать нажатие кнопки Новая игра:
>procedure TForm1.Button1Click(Sender: TObject);
>begin
> if ((StrToInt(finish.Text) > StrToInt(start.Text)) and (StrToInt(start.Text) > 0) and (StrToInt(finish.Text) < 60000))
> then {проверяем, не выходит ли заданное пользователем число за допустимые пределы}
> {загадаем случайное число в заданном диапазоне}
> num:= Random(StrToInt(finish.Text) – StrToInt(start.Text)) + StrToInt(start.Text)
> else ShowMessage('Неверный диапазон!');
> //обнуляем все, и придаем программе начальный вид
> znak1.Caption:= '';
> znak2.Caption:= '';
> ch1.Enabled:= True;
> ch2.Enabled:= False;
> pl1.Enabled:= True;
> pl2.Enabled:= False;
> x.Caption:= 'X';
> ch1.Text:= '0';
> ch2.Text:= '0';
> //очистим массивы наибольших и наименьших чисел
> for i:= 1 to kolvo+1 do begin
> minimum[i]:= 0;
> maximum[i]:= 0;
> big:= StrToInt(finish.Text); //наибольшее число
> small:= StrToInt(start.Text); //наименьшее число
> end;
> kolvo:= 0; //количество использованных попыток
>end;
После того как пользователь указал диапазон, в котором должно находиться случайное число, мы проверяем, не является ли конечное значение меньше начального. Проверяем также, не является ли начальное значение меньше нуля и не превышает ли конечное значение 60000. Если все нормально, то загадываем число в заданном диапазоне. После этого обнуляем все значения и приводим программу к начальному виду.
Компилируем и запускаем программу на выполнение. Игра в действии показана на рис. 9.2.
Рис. 9.2. Игра "Угадывание чисел" в действии
Полный исходный код модуля
Полный исходный код программного модуля игры "Угадывание чисел" представлен в листинге 9. 1.
Листинг 9.1. Программный модуль игры "Угадывание чисел"
>unit Unit1;
>interface
>uses
> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
>type TForm1 = class(TForm)
> Button1: TButton;
> Label1: TLabel;
> Label2: TLabel;
> start : TEdit;
> finish: TEdit;
> Label3: TLabel;
> pl1: TLabel;
> ch1: TEdit;
> pl2: TLabel;
> ch2: TEdit;
> comp: TCheckBox;
> Button2: TButton;
> x: TLabel;
> znak1: TLabel;
> znak2: TLabel;
> procedure FormCreate(Sender: TObject);
> procedure compClick(Sender: TObject);
> procedure Button1Click(Sender: TObject);
> procedure Button2Click(Sender: TObject);
>private
> { Private declarations }
> procedure min();
> procedure max();
>public
> { Public declarations }
>end;
>var
> Form1: TForm1;
> num, j, i, kolvo, big, small: integer;
> maximum, minimum: array [1..100] of integer; {массивы максимальных и минимальных чисел}
>implementation
>{$R *.dfm}
>//процедура нахождения наименьшего числа
>procedure TForm1.min();
>begin
> for i:=1 to kolvo do begin
> for j:=1 to kolvo do begin
> {Если число меньше наименьшего, то оно становится наименьшим}
> if minimum[j] > small then small:= minimum[j];
> end;
> end;
>end;
>//процедура нахождения наибольшего числа
>procedure TForm1.max();
>var temp: integer;
>begin
> temp:= StrToInt(finish.Text);
> for i:=1 to kolvo do begin
> for j:=1 to kolvo do begin
> if temp > maximum[j] then
> if maximum[j] > 0 then temp:= maximum[j]; {если число больше наибольшего…}
> end;
> end;
> if ( (temp<>0) and (temp<>StrTolnt(finish.Text)) ) then
> {… и если число входит в допустимый диапазон, то оно становится наибольшим}
> big:= temp;
>end;
>procedure TForm1.compClick(Sender: TObject);
>begin
> if comp.Checked then begin //если флажок установлен
> //блокируем ввод от второго игрока
> ch2.Enabled:= False;
> рl2.Enabled:= False;
> //включаем ввод от первого игрока
> ch1.Enabled:= True;
> pl1.Enabled:= True;
> end
> else begin
> //если игра идет с человеком, то
> //включаем ввод для второго игрока
> ch2.Enabled:= True;
> рl2.Enabled:= True;
> end;
>end;
>procedure TForm1.Button1Click(Sender: TObject);
>begin
> if ((StrToInt(finish.Text) > StrToInt(start.Text)) and (StrToInt(start.Text) > 0) and (StrToInt(finish.Text) < 60000))