Самое важное свойство таймера — Interval (Интервал). Оно указывает, когда (через сколько времени) в следующий раз таймер должен сработать. Промежуток времени задается в тысячных долях секунды — миллисекундах. По умолчанию, свойство Interval содержит число 1000, следовательно, таймер будет срабатывать каждую секунду.
Ну, довольно теории. Перейдем к практике.
1. Откройте Delphi или создайте новый проект.
2. Поместите на форму компонент Таймер. Он находится на панели компонентов System (Системные) и имеет вид:
. Таймер можно расположить где угодно на форме. Этот объект отображается на форме в виде значка фиксированного размера. В окне работающей программы его не видно.
3. На форму поместите кнопку – компонент Button.
4. Давайте сделаем так, чтобы через каждые пол-секунды кнопка прыгала куда-нибудь. А задача пользователя - ее поймать. Свойство Interval сделайте равным 500.
5. Дважды щелкните по значку Timer, чтобы открыть обработчик события. Начинаем писать код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
randomize; // включаем генератор случайных чисел
button1.Left:= random (Form1.Width- 100); // кнопка может прыгать по всей длине формы
button1.Top:= random (Form1.Height-60); // кнопка может прыгать по всей ширине формы
end;
Когда нужно закончить игру? Когда пользователь щелкнет по кнопке. То есть для кнопки произойдет событие OnClick. Его и будем программировать.
6. Щелкните 2 раза по кнопке Button1, чтобы создать процедуру обработки щелчка.
7. Введите следующий код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:= false;
Form1.Caption:='Победа!';
Button1.Caption:='Ура!';
end;
Вы не поверите, но скелет программы готов. Осталось выполнить мелкие доработки. Например, добавить кнопку Выход, сделать кнопку Медленнее и кнопку Быстрее, при нажатии на которую увеличивается или уменьшается интервал таймера.
Вот данная программа в процессе игры. Эту игру создал один из наших курсантов – ученик 8-го класса.

Рис.40. Форма приложения
Задание 6. Создать игру «Блохи»
Суть игры:
При запуске игры на поле появляется 20 блох. При каждом попадании по блохе насчитываются очки и чем раньше сделан удар, тем больше очков. Программа считает время с момента запуска. Она также считает промахи, за каждый промах она отнимает 100 очков. На одну игру дано 2 минуты, но если игрок не успеет за 1 минуту убить всех блох, то отнимается 5000 очков, и оживляются все блохи. Игра в двух уровнях: Быстро и Медленно.
Рассмотрим игру поподробнее:
Вот скриншот данной игры в начале, когда блохи готовы начать прыгать....

Рис.41. Форма игры в начале
А это - скриншот во время игры....

Рис.42. Форма приложения во время игры
Причем, игра не такая простая, поскольку:
1. Содержит несколько уровней сложности;
2. Использует компьютерную графику;
3. Варьируется в зависимости от обстоятельств (скорости попадания, времени игры и т. д.).
Задание 7. Создать игру «Морской бой»
В этот раз мы создадим игрушку «Морской бой». Мы будем стрелять в корабль, который будет двигаться.
Создание двигающегося объекта.
1. Запустите Delphi. На форме расположите 2 кнопки (элемент BitBtn - страница Additional ). С этими кнопками мы еще не работали. Их главное отличие от обычных кнопок в том, что них можно поместить графическое изображение. Кнопка Bitbtn1 будет играть роль подводной лодки, цель которой подбить вражеский корабль. Вражеским кораблем будет кнопка BibtBtn2. Наша задача состоит в том, чтобы вражеский корабль двигался. Для этого нужен еще один элемент - таймер.

Рис.43. Начальная форма приложения
2. С палитры System возьмите компонент Timer и поместите его куда угодно на форму. В результате,. Ваша форма должна напоминать мою:
Как создать движение? Нужно изменять координаты нахождения объекта. Так как корабль врага будет двигаться только по горизонтали, то будем изменять только свойство bitbtn2.left..
Чтобы заставить корабль двигаться, нужно через определенные промежутки времени изменять это свойство. Сделать это можно с помощью таймера.
3. Сделайте двойной щелчок по значку таймера. Откроется окно:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
end;
4. Пусть вражеский корабль движется слева направо. Тогда в обработчик Таймера между begin и end необходимо написать строку: bitbtn2.Left := bitbtn2.Left-1;
Что она означает? При каждом срабатывании таймера кнопка BitBtn2 будет смещаться на 1 пиксел влево. Что и даст эффект движения. А как часто будет срабатывать таймер. За это отвечает свойство Interval в Инспекторе Объектов.
Поставьте его значение равным 50.
5. Запустите программу. Посмотрите, как она работает. Вы увидите явный недостаток: при достижении кнопкой края формы она исчезает. И все…
6. Чтобы вернуть ее с другого края добавьте в обработчик события таймера строку:
if bitbtn2.Left < 0 then bitbtn2.Left:=form1.Width-60;
7. Запустите программу, проверьте. Кнопка (вражеский корабль), должна двигаться, как мы хотели.
Делаем торпеду.
За торпеду у нас отвечает кнопка bitbtn1. Что мы хотим? Чтобы при нажатии на нее мышкой происходил выстрел. Как это сделать.
8. Добавим на форму компонент Image (Он будет снарядом). Поместите в Image какой-нибудь рисунок, можно фоновый (Свойство Picture). Разместите Image возле как у меня: (рис)

Рис.44. Форма торпеды
При выстреле торпеда должна тоже двигаться (как и вражеский корабль). Поэтому здесь мы поступим также, как и с Bitbtn2.
9. Поместите на форму еще один таймер. Торпеда должна двигаться быстрее корабля, поэтому интервал Таймера поставьте равным 5.
10. Дважды щелкните по таймеру2, и введите следующий код:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
image1.top:= image1.top-5;
end;
11. Запустите программу. Проверьте, работает ли торпеда. Работает, но как-то по-своему. Торпеда произвольно стреляет. Так быть не должно. Поэтому свойству Enabled Таймера2 присвойте значение False. Торпеда выстрелит только в том случае, когда Таймер2 включен.
12. Чтобы включить Таймер2, а значит, запустить торпеду, в обработчик кнопки Bitbtn1 поставьте следующий оператор:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Timer2.Enabled:=true;
end;
13. Запустите программу, проверьте. Что Вам не нравиться? Лично мне не нравятся 2 вещи: то, что можно запустить только одну торпеду и то, что при встрече с кораблем не происходит никакого эффекта. Будем это исправлять.

14. Добавьте в объект Image рисунок torpeda. jpg (свойство Picture в Object Inspector). Вы получите торпеду в полной красе.
15. На кнопки Bitbtn1 и Bitbtn2 поместите соответственно рисунки lodka. jpg и ships. jpg. (свойство Glyph).
16. Создайте объект Image2 на весь экран и создайте фон моря (рисунок fon. jpg).
После вставки соответствующих рисунков должно получиться следующее:

Рис.45. Конечная форма приложения
Игра в действии.
Посмотрите еще раз на операторы, которые мы записали. На этом механизме можно писать различные увлекательные игры, те, которые придумываете Вы.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
bitbtn2.Left := bitbtn2.Left-1;
if bitbtn2.Left <0 then bitbtn2.Left:=form1.Width-60;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
timer2.Enabled:=true;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
image1.top:= image1.top-5;
if image1.top < 0 then
begin
image1.Top:=bitbtn1.Top;
timer2.Enabled:=false;
end;
if ((image1.Top > bitbtn2.Top)and (image1.Top <bitbtn2.Top+ bitbtn2.height)
and (image1.left > bitbtn2.left) and (image1.left < bitbtn2.left+bitbtn2.Width))
then
begin
timer2.Enabled:= false;
timer1.Enabled:= false;
end;
end;
Самостоятельно.
1. Продумайте, что еще должно произойти в момент взрыва. Измените цвета формы, торпеды и т. д., добейтесь того, чтобы игрушка смотрелась.
2. Добавьте еще пару кораблей, сделайте специально их разного размера, например, больше и меньше исходного и добейтесь, чтобы они работали.
3. Добавьте статистику: сколько выстрелов сделала подлодка, сколько попаданий.
4. Для курсантов платного курса: добавьте меню. В нем сделайте следующие пункты: Новая игра, Выход, Статистика, Об авторе….
Совершенствуем "Морской бой "
1 способ. Подключаем клавиатуру
Вообще в Delphi есть несколько событий, которые обрабатывают сообщения, посылаемые клавиатурой. Чтобы не утомлять Вас подробностями, предлагаем Вам использовать обработчик события OnKeyDown (при нажатии клавиши).
Рассмотрим ситуацию на примере:
procedure TForm1.BitBtn1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if key = VK_Left then BitBtn1.left:=BitBtn1.left-2 ;
// Если нажата кнопка "стрелочка влево" на клавиатуре, то переместить кнопку на 2 точки влево
if key = VK_Right then BitBtn1.left:=BitBtn1.left+2 ;
// Если нажата кнопка "стрелочка вправо" на клавиатуре, то переместить кнопку на 2 точки вправо
Но учтите, что для того, чтобы ваша лодка обрабатывала эти кнопки, элемент должен быть активен. Сделать активным вашу кнопку можно командой: BitBtn1.SetFocus.
Для нашей игры достаточно сведений.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Основные порталы (построено редакторами)
