"Эверест" - Центр Практической Информатики

представляет вводный курс

"Delphi для чайников"

 

 

 

Урок 17. "Морской бой ".

В этот раз мы создадим игрушку "Морской бой". Мы будем стрелять в корабль, который заставим двигаться.

Создание двигающегося объекта.


1. Запустите Delphi . На форме расположите 2 кнопки (элемент BitBtn- страница Additional ). С этими кнопками мы еще не работали. Их главное отличие от обычных кнопок в том, что них можно поместить графическое изображение. Кнопка Bitbtn1 будет играть роль подводной лодки, цель которой подбить вражеский корабль. Вражеским кораблем будет кнопка BibtBtn2. Наша задача состоит в том, чтобы вражеский корабль двигался. Для этого нужен еще один элемент- таймер.

2. С палитры System возьмите компонент Timer и поместите его куда угодно на форму. В результате,. Ваша форма должна напоминать мою:

Как создать движение? Нужно изменять координаты нахождения объекта. Так как корабль врага будет двигаться только по горизонтали, то будем изменять только свойство bitbtn2.left..

 

Чтобы заставить корабль двигаться, нужно через определенные промежутки времени изменять это свойство. Сделать это можно с помощью таймера.

3. Сделайте двойной щелчок по значку таймера. Откроется окно:

procedure TForm1.Timer1Timer(Sender: TObject);
begin

end;

4. Пусть вражеский корабль движется слева направо. Тогда в обработчик Таймера между begin и end необходимо написать строку: bitbtn2.Left := bitbtn2.Left-1;

Что она означает? При каждом срабатывании таймера кнопка BitBtn2 будет смещаться на 1 пиксел влево. Что и даст эффект движения. А как часто будет срабатывать таймер. За это отвечает свойство Interval в Инспекторе Объектов.
Поставьте его значение равным 150.

5. Запустите программу. Посмотрите, как она работает. Вы увидите явный недостаток: при достижении кнопкой края формы она исчезает. И все…


6. Чтобы вернуть ее с другого края добавьте в обработчик события таймера строку:
if bitbtn2.Left < 0 then bitbtn2.Left:=form1.Width-60;


7. Запустите программу, проверьте. Кнопка (вражеский корабль), должна двигаться, как мы хотели.

Делаем торпеду.


За торпеду у нас отвечает кнопка bitbtn1. Что мы хотим? Чтобы при нажатии на нее мышкой происходил выстрел. Как это сделать.

8. Добавим на форму компонент Image (Он будет снарядом). Поместите в Image какой-нибудь рисунок, можно фоновый (Свойство Picture). Разместите Image возле как у меня: (рис)

При выстреле торпеда должна тоже двигаться (как и вражеский корабль). Поэтому здесь мы поступим также, как и с Bitbtn2.


9. Поместите на форму еще один таймер. Торпеда должна двигаться быстрее корабля, поэтому интервал Таймера поставьте равным 50.

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. В обработчик события Таймера2 добавьте следующие строки:

if image1.top < 0 then
begin
image1.Top:=bitbtn1.Top;
timer2.Enabled:=false;
end;

пояснения
Если торпеда выйдет за пределы формы,
То
1. Торпеду "зарядить в лодку"
2. Остановить таймер (движение торпеды).

Далее необходимо дать понять программе, при каком условии торпеда попадет в корабль. А это произойдет тогда, когда координаты торпеды будут равны координатам цели. Т.е. условие нужно должно быть следующее:

 
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;

  То
1. Останавливаем движение торпеды
2. Останавливаем движение корабля

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

После вставки соответствующих рисунков у меня получилась такая форма:

Самостоятельно:
1. Продумайте, что еще должно произойти в момент взрыва. Измените цвета формы, торпеды и т.д., добейтесь того, чтобы игрушка смотрелась.

2. Добавьте еще пару кораблей, сделайте специально их разного размера, например, больше и меньше исходного и добейтесь, чтобы они работали.

3. Добавьте статистику: сколько выстрелов сделала подлодка, сколько попаданий.

4. Для курсантов платного курса: добавьте меню. В нем сделайте следующие пункты: Новая игра, Выход, Статистика, Об авторе….

Все рисунки к этой игре Вы можете взять с нашего сайта: http://umnik.rikt.ru/everest/distant/delphi.htm

Скачать игру можно с нашего сайта.. http://umnik.rikt.ru/projectgame/learn.html

Автор рассылки: Ишмуратов Р.К, e-mail: rk@rikt.ru

Примечание : Обращаю ваше внимание на то, что данный курс ознакомительный. Если Вы желаете действительно научиться программированию и получить в руки мощный инструмент для профессиональной работы, то приглашаем Вас на наш основной курс по Delphi.

Вся информация находится по адресу: http://umnik.rikt.ru/everest/distant/delphi_os.htm

Учиться у нас выгодно. Не верите?

Посмотреть архив данной рассылки Вы сможете на нашем сайте по адресу: http://umnik.rikt.ru/projectgame/learn.html


ШСД поможет вам открыть Свое Дело!      

 

Rambler's Top100  
  Союз образовательных сайтов     InterSib Каталог ресурсов Сибири