//если вариант первого игрока меньше загаданного числа
if znak1.Caption = '<' then begin
minimum[kolvo]:= StrToInt(ch1.Text); {добавляем число в массив наименьших чисел, выданных первым игроком}
min();//ищем наименьшее число
end;
//после всех расчетов, компьютер выдает свой вариант
ch2.Text:= IntToStr(Random(big– small)+ small);
end;
//проверяем вариант компьютера и ставим соответствующий знак
if StrToInt(ch2.Text) > num then znak2.Caption:= '>';
if StrToInt(ch2.Text) < num then znak2.Caption:= '<';
if StrToInt(ch2.Text) = num then begin znak2.Caption:= '=' ;
x.Caption:= IntToStr(num);
ShowMessage('Вы проиграли!' + #13#10 + 'В этот раз победил компьютер!' + #13#10 + ' Число угадано за ' + IntToStr(kolvo) + ' попытки');
end;
end;
По нажатию кнопки Принять вариант мы проверяем, какой режим игры установлен: с другим игроком или против компьютера. Если мы играем с человеком, то далее осуществляется проверка: кто из игроков выдал свой вариант. Если это был первый игрок, то мы сравниваем его вариант ответа с загаданным числом и после этого отображаем соответствующий знак или сообщаем о победе первого игрока, если числа равны. Затем мы блокируем ввод с клавиатуры для первого игрока и разрешаем ввести число второму игроку.
После того как второй игрок выдал свой вариант ответа, мы выполняем те же проверки, и, если число не угадано, вновь даем право попытаться угадать загаданное число первому игроку. После того как кто-то из игроков дает вариант ответа, мы пополняем счетчик kolvo, чтобы потом сообщить, сколько попыток использовалось, чтобы угадать число.
Если игра проходит против компьютера, то мы не разблокируем ввод второго игрока вообще. Там просто будут отображаться варианты, выдаваемые компьютером. Каждый раз, перед тем как компьютер решает, какой вариант ему выбрать, он анализирует вариант, выданный игроком. Если текущий вариант игрока больше загаданного числа, то мы добавляем текущий вариант первого игрока в массив наибольших чисел. В этом массиве ищется самое маленькое число среди наибольших.
Если текущий вариант игрока меньше загаданного числа, то мы добавляем его в массив наименьших чисел. В этом массиве ищется самое большое число среди наименьших. Тем самым мы постоянно сокращаем диапазон вариантов для компьютера. Все это продолжается до тех пор, пока игрок или компьютер не угадает загаданное число.
Для того чтобы можно было переключаться между режимами игры "с человеком" и "против компьютера", создадим обработчик события OnClick для флажка comp:
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))
then {проверяем, не выходит ли заданное пользователем число за допустимые пределы}
{загадаем случайное число в заданном диапазоне}
num:= Random(StrToInt(finish.Text) – StrToInt(start.Text)) + StrToInt(start.Text)
else ShowMessage('Неверный диапазон!');
//обнуляем все, и придаем программе начальный вид
znak1.Caption:= '';