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

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

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

Урок 19.

Игра "Ипподром".

 

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

Мы создадим компьютерный вариант скачек. Свой ипподром, но не лошадиный, а морской. И назовем соответственно: "Морской ипподром". Почему морской? Ну, нравиться мне море. ВЫ же вольны сделать что-либо свое…Не забывайте, что Вы- бог для своего компьютера и своей программы, так же как и я для своей.

Итак, что из себя представляет игра? На игровом поле находится 5 фишек (аналоги лошадей). По команде фишки начинают двигаться по прямой на определенное количество точек. Побеждает та, которая придет к финишу первой.

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

Предварительная подготовка:

1. Скачайте с нашего сайта рисунки к игре: файл- forhip.rar
2. Распакуйте их, создайте на диске новую папку: Hippodrome и поместите рисунки в эту папку.

Расставляем компоненты.

3. Откройте Delphi.
4. Сохраните свой проект в папке Hippodrome- ту, где находятся картинки.
5. На форму поместите компонент Image и, в его свойство Picture, загрузите рисунок fonippod.jpg.
6. Свойству Stretch (растяжка) присвойте значение True (чтобы рисунок подгонялся под размеры компонента).
7. На рисунок поместите пять кнопок BitBtn (страница Additional) - это наши лодки.
8. В свойство Gryph каждой кнопки поместите изображение соответствующего корабля.

.. 9. На форму поместите компонент Panel. А на нее следующие компоненты:
9.1. Элемент RadioGroup
9.2. 5 элементов RadioButton
9.3. Кнопка "Старт"- элемент Button
9.4. Элемент GroupBox
9.5. 5 элементов Label
9.6. Элемент Label6
9.7. Таймер

На этом оформление программы пока закончено.

Приступаем к программированию.

Что будет делать программа? При нажатии на кнопку Старт, лодки начинают двигаться слева направо. Та, которая первая достигнет отметки 600 пикселов, будет победителем.

Управляет движением лодок таймер. Его и начнем программировать.

10. Сделайте двойной щелчок по таймеру. Откроется процедура обработки события:

procedure TForm1.Timer1Timer(Sender: TObject);
begin

end;

11. Между begin и end пишем код:


randomize; - запускаем процедуру генераций счетчика случайных чисел;
bitbtn1.Left:= bitbtn1.Left+random(10); - перемещаем кнопку на случайное количество точек вправо в диапазоне от 0 до 10.
bitbtn2.Left:= bitbtn2.Left+random(10);- аналогично и со всеми кнопками.
bitbtn3.Left:= bitbtn3.Left+random(10);
bitbtn4.Left:= bitbtn4.Left+random(10);
bitbtn5.Left:= bitbtn5.Left+random(10);

Эти операторы дадут нам видимость движения, а случайный выбор- видимость соревнования.

12. Интервал срабатывания таймера поставьте равный 50.
13. Запустите программу, посмотрите, что получилось. Кнопки скачут не останавливаясь? Правильно. Нужно придумать, как их остановить.
14. Вернитесь в режим проектирования.

Было бы очень просто написать: if bitbtn1.Left> 600 then Timer1.Tnabled:=false.
И все. Но! Как узнать, какая лодка пришла к финишу первой, а какая последней?

Воспользуемся свойством Tag, который есть у всех компонентов, следовательно, у BitBtn тоже. Это свойство Delphi не нужно, сделано оно специально для программистов. Хранить в нем можно любое целое число.

По умолчанию, это свойство равно 0 для всех компонентов. Мы же будем хранить в этом свойстве место, занятое лодкой.

15. Еще раз двойной щелчок по таймеру. Добавьте следующие строки:

if bitbtn1.Left> 600 then
if bitbtn1.Tag=0 then
begin
n:=n+1;
bitbtn1.Tag:=n;
label1.Caption:='Желтая - '+IntToStr (bitbtn1.Tag)+' место';
end;

16. Разберитесь с этим куском кода, здесь должно быть все понятно. Далее аналогично:

if bitbtn2.Left> 600 then
if bitbtn2.Tag=0 then
begin
n:=n+1;
bitbtn2.Tag:=n;
label2.Caption:='Розовая - '+IntToStr (bitbtn2.Tag)+' место';
end;

if bitbtn3.Left> 600 then
if bitbtn3.Tag=0 then
begin
n:=n+1;
bitbtn3.Tag:=n;
label3.Caption:='Фиолетовая - '+IntToStr (bitbtn3.Tag)+' место';
end;

if bitbtn4.Left> 600 then
if bitbtn4.Tag=0 then
begin
n:=n+1;
bitbtn4.Tag:=n;
label4.Caption:='Красная - '+IntToStr (bitbtn4.Tag)+' место';
end;

if bitbtn5.Left> 600 then
if bitbtn5.Tag=0 then
begin
n:=n+1;
bitbtn5.Tag:=n;
label5.Caption:='Голубая - '+IntToStr (bitbtn5.Tag)+' место';
end;


17. Определяем победителя по формуле:


if n>4 then
begin
timer1.Enabled:=false;
groupBox1.visible:=true;
if (radioButton1.Checked) and (bitbtn1.Tag=1) then label6.Caption:='Вы победили!';
if (radioButton2.Checked) and (bitbtn2.Tag=1) then label6.Caption:='Вы победили!';
if (radioButton3.Checked) and (bitbtn3.Tag=1) then label6.Caption:='Вы победили!';
if (radioButton4.Checked) and (bitbtn4.Tag=1) then label6.Caption:='Вы победили!';
if (radioButton5.Checked) and (bitbtn5.Tag=1) then label6.Caption:='Вы победили!';
end
else label6.Caption:='Вы проиграли...';

18. Не забудьте зарегистрировать переменную n, как тип Integer.

implementation
var n:integer;

{$R *.DFM}

19. Проверьте, работают ли кнопки так, как надо. Выскакивает ли надпись 'Вы победили!', если угадан победитель. Появляются ли места, занятые участниками гонки?

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

20. В инспекторе объектов Таймера выберите свойство Enabled:= False.
21. А в обработчик события кнопки Старт прописываем:

procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;

22. Далее все просто. Или, как говорят математики, тривиально. Наводим красоту, кое-что до поры до времени прячем, кое-что отключаем. И игра готова.


Самостоятельно: Добейтесь того, чтобы игра выглядела как моя:


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

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

На следующем уроке: Превратим игру в тотализатор…

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

P.S.

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

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

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

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


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

 

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