-
Основы Delphi
- Основы программирования на Delphi
- Компоненты Delphi. Начинаем писать свои первые приложения на Delphi
- Основные принципы программирования в Delphi. Начинаем программировать самостоятельно
- Delphi и Microsoft Word
- Delphi и Microsoft Excel
- Delphi и Microsoft Access
- Delphi и OpenOffice Writer
- Delphi и OpenOffice Calc
- Создание игр на Delphi
- Игра Пристрели птичку
Delphi и MSOffice
Delphi и OpenOffice
Delphi и Интернет
Delphi и игры
Delphi Android
Школа программирования Delphi
Портал DelphiSchool является бесплатным проектом, обеспечивающим пользователям быстрый и легкий доступ к урокам программирования на Delphi. Сайт позволяет научиться программировать на Делфи любому, кто хочеть писать свои программы, игры, Android приложения, программы для MAC OC или IOS. Кроме уроков Delphi и статей Delphi, на сайте доступны также и видеоуроки. Практически к каждому уроку, пользователю доступен исходник, изучив который, он сможет наглядно посмотреть как работает та или иная программа, написанная на Делфи. Кроме того мы постараемся прилагать к каждому материалу (статье, уроку, видеоуроку) файлы Delphi, которые будут помогать изучить предоставленный материал.
Каждый кто решил написать свою программу, создать свое приложение, научиться программировать и т.д., найдет на DelphiSchool статьи Delphi, уроки Delphi, видеоуроки Delphi, исходники Delphi, файлы Delphi, изучит компоненты Delphi, посмотрит Delphi примеры и многое другое абсолютно бесплатно. Все о Delphi программировании теперь собрано на одном сайте!!!
Главная » Уроки Delphi » Delphi и игры » Создание игр на Delphi |
В прошлом уроке Игра Пристрели птичку. Часть 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. Заставляем объект перемещаться по форме и считаем клики по объекту | |
Добавить Игра Пристрели птичку. Часть 3. Заставляем объект перемещаться по форме и считаем клики по объекту в закладки: |
Диалоговые окна в Delphi. ShowMessage, MessageDlg, MessageDlgPos, InputBox и InputQuery |
Delphi и RadioGroup. Пример работы с группой компонентов RadioButton в Делфи |
Основы работы с MS Word. Создание, открытие, сохранение и закрытие документа Word с помощью Delphi |
Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 2. События кнопки |
Delphi и ComboBox. Пример работы с ниспадающими списками в Делфи |
Delphi и TEdit. Пример работы со строками ввода в Делфи |
Константы в Delphi. Объявление констант в Делфи |
Управление циклами в Delphi. Операторы Continue и Break. |
Delphi и CheckBox. Пример работы с CheckBox в Делфи |
Delphi и TPanel. Пример работы с панелями в Делфи |
Всего комментариев: 1 | |
|