popad.Caption:= '0'; //сброс результатов
//Придаем окну эллиптическую форму
forma:= CreateEllipticRgn(0, 0, Form1.Width, Form1.Height);
SetWindowRgn(Handle, forma, True);
//Устанавливаем начальную скорость перемещения окна
Timer1.Interval:= 1000;
Timer1.Enabled:= True; //начинаем игру
end
else Halt; //выход из игры
end;
end;
end.
⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter_08.
Глава 9
Игра "Угадывание чисел"
Разработать игру, цель которой заключается в угадывании случайного числа из заданного диапазона чисел. Дать возможность играть с соперником или против компьютера.
Создайте новый проект Delphi и присвойте свойству Caption (заголовок) формы значение Игра. Угадывание чисел. Вверху формы будут расположены элементы управления для настройки диапазона угадываемых чисел. Разместим на форме три компонента Label (метки) категории Standard и два компонента Edit (поле ввода) той же категории. Изменим их свойства согласно табл. 9.1.
Таблица 9.1. Свойства компонентов для настройки диапазона угадываемых чисел
Компонент Свойство Значение Пояснение Label1 Caption Диапазон чисел: Надпись метки Font.Style [fsBold] Начертание шрифта — полужирное Left 8 Отступ слева Top 16 Отступ сверху Label2 Caption от Надпись метки Font.Style [fsBold] Начертание шрифта — полужирное Left 104 Отступ слева Top 16 Отступ сверху Label3 Caption до Надпись метки Font.Style [fsBold] Начертание шрифта — полужирное Left 216 Отступ слева Top 16 Отступ сверху Edit1 Name start Новое имя поля, предназначенного для ввода начального числа диапазона Text 1 Содержимое поля Left 128 Отступ слева Top 8 Отступ сверху Width 57 Ширина Edit2 Name finish Новое имя поля, предназначенного для ввода конечного числа диапазона Text 1000 Содержимое поля Left 256 Отступ слева Top 8 Отступ сверху Width 57 Ширина
Разместите на форме под этими компонентами еще один компонент Label, назовите его pl1 (свойство Name), а свойству Caption присвойте значение Первый игрок:. Справа от метки pl1 разместите компонент Edit, свойству Name которого присвойте значение ch1, а свойству Text — значение 0. Справа от поля ch1 разместите еще один компонент Label. Присвойте ему имя znak1 и очистите свойство Caption.
Под компонентами pl1, ch1 и znak1 разместите аналогичные компоненты для второго игрока, присвоив им имена рl2, ch2 и znak2 соответственно. Свойству рl2.Caption присвойте значение Второй игрок:, свойству ch2.Text — значение 0, а свойство znak2.Caption очистите. Поскольку по умолчанию игру будет начинать первый игрок, мы должны заблокировать ввод для второго игрока. Для этого измените значение свойства Enabled для компонентов ch2 и р12 на False.
Разместите на форме справа от компонентов znak1 и znak2 еще один компонент Label и измените его свойства согласно табл. 9.2.
Таблица 9.2. Свойства нового компонента Label
Свойство Значение Пояснение Name
X Новое имя компонента Caption X Надпись метки Font.Color clRed Цвет шрифта — красный Font.Name Courier New Название шрифта Font.Size 36 Размер шрифта Font.Style [fsBold] Начертание шрифта — полужирное Height 54 Высота метки
Ниже всех компонентов разместите компонент Checkbox (флажок) категории Standard. Присвойте его свойству Name значение comp, a свойству Caption — значение Играть против компьютера (проследите также, чтобы свойство Checked было равно False).
Ниже разместите две кнопки (компонент Button категории Standard), присвоив их свойству Caption значения Принять вариант и Новая игра. Полученная форма должна соответствовать рис. 9.1.
Рис. 9.1. Форма для игры "Угадывание чисел"
Разработка программного кода
Прежде всего, объявим переменные, которые будем использовать на протяжении всей программы:
var
Form1: TForm1;
num, j, i, kolvo, big, small: integer;
maximum, minimum: array [1..100] of integer; {массивы максимальных и минимальных чисел}
Переменная num соответствует случайно заданное число, переменной kolvo — количество попыток, за которые число было отгадано, переменной big — наибольшее число из названных, а переменной small — наименьшее число из названных.
Теперь напишем две процедуры, которые в случае игры против компьютера будут определять границы нахождения числа. Процедура min будет определять нижнюю границу, а процедура max — верхнюю.
Объявим эти процедуры как закрытые члены класса формы:
type
TForm1 = class(TForm)
…
private
{ Private declarations }
procedure min();
procedure max();
public
{ Public declarations }
end;
После этого создадим сами процедуры в разделе implementation:
//процедура нахождения наименьшего числа
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