Delphi. Учимся на примерах - [13]

Шрифт
Интервал

>unit Unit1;


>interface


>uses

> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;


>type TForm1 = class(TForm)

> Label2: TLabel;

> popad: TLabel;

> Label3: TLabel;

> Timer1: TTimer;

> procedure FormCreate(Sender: TObject);

> procedure Timer1Timer(Sender: TObject);

> procedure popadMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

>private

> { Private declarations }

>public

> { Public declarations }

>end;


>var

> Form1: TForm1;

> forma: HRGN;


>implementation

>{$R *.dfm}


>procedure TForm1.FormCreate(Sender: TObject)

>begin

> Randomize;//включаем генератор случайных чисел

> forma:= CreateEllipticRgn(0, 0, Form1.Width, Form1.Height); //вид окна

> //применяем новый вид окна

> SetWindowRgn(Handle, forma, True);

>end;


>procedure TForm1.Timer1Timer(Sender: TObject);

>begin

> Form1.Top:= Random(Screen.Height) + 1; //случайная высота

> Form1.Left:= Random(Screen.Width) + 1; //случайная ширина

>end;


>procedure TForm1.popadMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

>begin

> if StrToInt(popad.Caption) < 10 then begin //если попаданий меньше 10

>  //Перемещаем окно в случайную позицию по вертикали

>  Form1.Top:= Random(Screen.Height) + 1;

>  //Изменяем положение по горизонтали

>  Form1.Left:= Random(Screen.Width) + 1;

>  //Увеличиваем счетчик "попаданий" на единицу

>  popad.Caption:= IntToStr(StrToInt(popad.Caption) + 1);

>  //Увеличиваем скорость перемещения окна на 100 мс

>  Timer1.Interval:= Timer1.Interval – 100;

> end;

> if popad.Caption = '0' then begin //если игрок попал 10 раз

>  Timer1.Enabled:= False; //останавливаем игру

>  Form1.Position:= poDesktopCenter; //окно – в центр экрана

>  //сообщаем о победе

>  ShowMessage('Вы попали по окну 10 раз!');

>  if Application.MessageBox('Игра', 'Играть еще раз?', mb_yesno + mbtaskmodal + mb_iconQuestion) = idYes

>  then {предлагаем сыграть еще раз}

>  begin

>   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 Отступ сверху
Width57Ширина

Разместите на форме под этими компонентами еще один компонент 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] Начертание шрифта — полужирное
Height54Высота метки

Ниже всех компонентов разместите компонент Checkbox (флажок) категории


Рекомендуем почитать
Графика DirectX в Delphi

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.