Информация

Школа программирования Delphi

Портал DelphiSchool является бесплатным проектом, обеспечивающим пользователям быстрый и легкий доступ к урокам программирования на Delphi. Сайт позволяет научиться программировать на Делфи любому, кто хочеть писать свои программы, игры, Android приложения, программы для MAC OC или IOS. Кроме уроков Delphi и статей Delphi, на сайте доступны также и видеоуроки. Практически к каждому уроку, пользователю доступен исходник, изучив который, он сможет наглядно посмотреть как работает та или иная программа, написанная на Делфи. Кроме того мы постараемся прилагать к каждому материалу (статье, уроку, видеоуроку) файлы Delphi, которые будут помогать изучить предоставленный материал.

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

DelphiSchool

Полезное
Книга
Форма входа
Поиск по сайту
Статистика сайта


Онлайн всего: 1
Гостей: 1
Пользователей: 0
Новости
Рекламный блок
Главная » Уроки Delphi » Delphi и игры » Создание игр на Delphi

Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту

Вы искали Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту и специально для вас мы подготовили этот урок Delphi. К каждому уроку мы стараемся предоставлять исходники Delphi, поэтому в конце статьи Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту вы можете посмотреть пример Delphi, или код Delphi, что позволит изучить Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту более детально.
Изучайте программирование онлайн на сайте www.DelphiSchool.3dn.ru и освойте основы программирования. Обучение программированию на DelphiSchool это программирование для начинающих и опытных программистов.
Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту В прошлом уроке Игра Пристрели птичку. Часть 2. Проект игры, мы подготовили проект игры Пристрели птичку и теперь нам осталось только написать код на Delphi. Долго откладывать не будем, и откроем наш проект.
Перед тем как перейти к написанию кода, нужно создать еще один модуль и соответственно форму (File | New | Form). У этой новой формы меняем свойство Name на ResultForm, а Caption на Результат. На форму добавляем 4 компонента TLabel и 3 кнопки (TButton). У Label1 меняем заголовок на "Ваш результат", у Label2 – на "Количество выстрелов:", Label3 - "Количество попаданий:", Label4 - "Количество промахов:". У кнопок Button1, Button2 и Button3 меняем свойство Caption на "Перейти на следующий уровень", "Сохранить игру", "Закрыть таблицу результатов" соответственно. Ну и нужно назвать понятнее эти кнопки. Потому меняем свойство Name у Buttont1 на NextLevelButton, у Button2 – на SaveResultButton, у Button3 – на CloseFormButton. Сохраняем созданный нами модуль под названием ResultUnit. Для кнопки "Перейти на следующий уровень" (NextLevelButton) свойство Enabled устанавливаем false. Ну и в завершение нужно добавить нашу новую форму и новый модуль в проект. Для этого переходим в Unit1, нажимаем меню File | Use Unit и добавляем ResultUnit. К сожалению, в уроке Игра Пристрели птичку. Часть 2. Проект игры я упустил этот момент и не создал форму результатов, поэтому сейчас исправляюсь.
Теперь давайте объявим глобальные переменные, которые мы будем использовать в программе.
Код
  
fx,fy: integer; // координаты движущегося объекта
n: integer; // количество промахов
p: integer; // количество попаданий
t: integer; // время до окончания игры
TimeForShoot:integer; // время для совершения выстрела
Level:Integer; // уровень
RunGame:Boolean; // переменная для паузы и возобновления игры
s: TStringList; // переменная для сохранения уровня игры в текстовый файл

Для чего та или иная переменная прекрасно видно из комментариев.
Первым делом создаем обработчик события OnCreate для формы и пишем такой код:
Код
procedure TMainForm.FormCreate(Sender: TObject);
begin
DoubleBuffered:=true;//чтобы не было мерцания при перемещении картинки
RunGame:=False;// чтобы игра не начиналась при запуске программы
Randomize;// инициализируем генератора случайных чисел
end;

Далее нам нужно создать процедуры запуска игры, окончания игры и перехода на новый уровень.
Код
procedure TMainForm.StartGame();
begin
ShootTimer.Enabled := true; // включаем таймер выстрелов
TimeTimer.Enabled := true; // запускаем отсчет времени
n:=0; // обнуляем количество промахов
p:=0; // обнуляем количество попаданий
t:=100; // устанавливаем начальное значение для отсчета времени
// устанавливаем исходное положение рисунка
fx:=100;
fy:=100;
// Задаем текст панели
StatusBar1.Panels[0].text:='Уровень: '+IntToStr(Level);// указываем уровень игры
StatusBar1.Panels[1].text:='Попаданий: '+IntToStr(p); // указываем количество попаданий
StatusBar1.Panels[2].text:='Промахов: '+IntToStr(n); // указываем количество промахов
StatusBar1.Panels[3].text:='Время: '+IntToStr(t); // выводим отсчет времени до конца игры
RunGame:=True; // игра запущена
end;

procedure TMainForm.NextLevel();
begin
If TimeForShoot <> 100 then begin
ShootTimer.Enabled := true; // включаем таймер выстрелов
TimeTimer.Enabled := true; // запускаем отсчет времени
n:=0; // обнуляем количество промахов
p:=0; // обнуляем количество попаданий
t:=100; // устанавливаем начальное значение для отсчета времени
// устанавливаем исходное положение рисунка
fx:=100;
fy:=100;
// Задаем текст панели
StatusBar1.Panels[0].text:='Уровень: '+IntToStr(Level);// указываем уровень игры
StatusBar1.Panels[1].text:='Попаданий: '+IntToStr(p); // указываем количество попаданий
StatusBar1.Panels[2].text:='Промахов: '+IntToStr(n); // указываем количество промахов
StatusBar1.Panels[3].text:='Время: '+IntToStr(t); // выводим отсчет времени до конца игры
RunGame:=True; // игра запущена
end else
ShowMessage ('Поздравляю. Вы победили!!!');
end;

К каждой строчке кода есть комментарий, потому повторяться и описывать каждое действие не буду. Единственное что стоит пояснить, это условие в коде перехода на следующий уровень (procedure TMainForm.NextLevel). Здесь стоит условие If TimeForShoot <> 0 then begin. Так как мы будем каждый раз при переходе на новый уровень уменьшать интервал таймера на 100, то когда этот интервал станет равен 0, наша птичка перестанет перемещаться по форме. Потому и сделано условие, при котором, когда переменная TimeForShoot станет равна 0, будет выведено сообщение о том, что игрок победил.
Теперь можно продолжить писать код. Для завершения игры пишем:
Код
procedure TMainForm.EndGame();
begin
if t=0 then begin
// игра закончена
// остановка таймеров
ShootTimer.Enabled := false;
TimeTimer.Enabled := false;
RunGame:=false;// останавливаем игру
// Выводим сообщение о результате
ResultForm.ShowModal;
end;
end;

Здесь, когда переменная t станет равна 0, появится форма с результатом игры, которую мы создали в начале этого урока. По комментариям я думаю все понятно.
Чтобы запустить игру, в меню Игра мы создали пункт меню Новая игра. Давайте создадим обработчик события OnClick для этого пункта и напишем:
Код
procedure TMainForm.N5Click(Sender: TObject);
begin
// Устанавливаем начальные настройки
Level:=1;//задаем уровень для первой игры
TimeForShoot:=1000; // устанавливаем время передвижения объекта
StartGame(); // запускаем игру
end;

Давайте теперь создадим обработчик события OnTimer для TimeTimer и напишем в нем следующий код:
Код
procedure TMainForm.TimeTimerTimer(Sender: TObject);
begin
// запускаем обратный отсчет времени
  // условие при котором таймер работает
if (t>0) and (RunGame=True) then begin
dec(t); // уменьшение переменной на единицу
StatusBar1.Panels[3].text:='Время: '+IntToStr(t); // вывод в панели статуса отсчета времени
EndGame(); // завершение игры
end;
end;

Этот код осуществляет отсчет времени до окончания игры. Здесь если переменная t больше 0 и (одновременно) переменная RunGame равна true, то игра запущена и происходит отсчет времени (переменная t уменьшается на 1). Когда переменная t станет равной 0, то игра закончится и будет вызвана процедура EndGame.
Для второго таймера (ShootTimer) также создадим обработчик события OnTimer и напишем следующее:
Код
procedure TMainForm.ShootTimerTimer(Sender: TObject);
begin
  // условие при котором таймер работает
If RunGame=True then begin
// интервал таймера равен заданному нами значению TimeForShoot
ShootTimer.Interval:=TimeForShoot;
// новое положение рисунка
// отнимаем ширину и высоту
fx:= Random(ClientWidth-32); // 32 - это ширина рисунка
fy:= Random(ClientHeight-52); // 32 - это высота рисунка, 20 - это высота панели StatusBar
BirdImage.Left:=fx;
BirdImage.Top:=fy;
end;
end;

Почему отнимаем ширину и высоту рисунка? Это делается для того чтобы птичка перемещалась только по форме. Если этого не сделать, то она будет уходить за пределы формы.
Если теперь запустить нашу игру и нажать в меню Новая игра, то птичка начнет передвигаться по форме, а в строке состояния будет отображаться отсчет времени. Но если кликать мышкой по птичке, то ничего не происходит. Нам нужно как-то считать попадания и промахи. Для этого создаем обработчик события OnMouseDown для BirdImage и в нем пишем код:
Код
procedure TMainForm.BirdImageMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
// Условие запуска обработчика события
If RunGame=True then begin
inc(p); // считаем попадания по объекту
StatusBar1.Panels[1].text:='Попаданий: '+IntToStr(p);// записываем в панель попадания
EndGame(); // вызываем процедуру конец игры
end;
end;

Этим кодом мы отсчитываем удачные клики (попадания) по компоненту BirdImage.
Для FonImage также создаем обработчик события OnMouseDown и пишем:
Код
procedure TMainForm.FonImageMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // условие при котором обработчик события работает
If RunGame=True then begin
inc(n); // считаем промахи (попадания по фоновому рисунку)
StatusBar1.Panels[2].text:='Промахов: '+IntToStr(n);//записываем в панель промахи
EndGame(); // вызываем процедуру конец игры
end;
end;

Этим мы считаем промахи (попадания по фоновой картинке).
Теперь если запустить нашу игру, то клики будут считаться, и результат будет отображаться в строке состояния (StatusBar).
На этом я закончу этот урок. В следующем уроке мы усложним игру, добавляя новые уровни игры и увеличивая скорость передвижения птички с каждым новым уровнем. Если вам что-либо не понятно из написанного выше, то к уроку я прилагаю исходник, скачав который вы можете посмотреть как и где написан код игры.

К уроку (статье) Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту прилагается исходник, посмотрев который, вы можете ознакомиться с полным исходным кодом программы и посмотреть как работает созданная программа. Исходный код сопровождается комментариями, благодаря чему вы сможете легко в нем разобраться. Но я настоятельно рекомендую делать все самостоятельно. Так вы лучше и быстрее усвоите то, о чем говорилось в этом уроке

Для того чтобы получить возможность скачать исходник Delphi к этому уроку, необходимо посетить сайт рекламодателя. После этого, появится ссылка на исходник Delphi к уроку Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту
Нажмите на эту ссылку Ссылка

Категория: Создание игр на Delphi | Добавлено: 10.05.2014 | Просмотров: 2934 | Комментарии: 2 | Рейтинг: 0.0/0

Добавить Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту в закладки:



Не забывайте писать свои отзывы об уроке Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту. Ваша информация об уроке Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту может помочь другим людям изучить программирование на Delphi. Также не забывайте проставлять рейтинг урока, ведь от этого зависит его попадание в список лучших уроков Delphi
Всего комментариев: 1
0
1 SergAdept   (25.01.2024 13:52) [Материал]
<a href=http://zmkshop.ru/>вега металлоконструкции</a>

dth="100%" cellspacing="1" cellpadding="2" class="commTable">
Имя *:
Email:
Код *: