Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PM_02_09_02_04_UP_02.---osnovy-algoritmizacii-i-programmirovanija-artyuhina-korenkova — копия.doc
Скачиваний:
47
Добавлен:
09.12.2018
Размер:
3.37 Mб
Скачать

Компонент Image

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

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

  1. Создайте новый проект и сохраните его в папке automation.

  2. Скачайте с нашего сайта файл forGame, распакуйте ее, и все рисунки поместите в папку automation.

Итак начнем:

  1. Размер формы измените на 335*465 (помните свойства Width и Height).

  2. На форму поместите компонент Image. Он находится на вкладке Additional (дополнительные) и имеет вид:

  1. Рисунок растянем на всю форму, для этого свойству Align присвойте значение alClient.

В рисунок поместим изображение игрового автомата. Для этого:

  1. нажмите кнопку … справа от свойства Picture. Откроется окно Picture Editor – редактора изображений.

  2. Нажмите в этом окне кнопку Load… и выберите файл fon1.jpg. из той папки, куда Вы переписали рисунки.

Рис.37. Форма приложения

  1. Нажмите кнопку ОК и рисунок заполнит всю область формы.

  2. На данный рисунок сверху поместите еще 3 рисунка (image2 , image3, image4).

  3. Размер этих компонентов сделайте равным: 105*73 и расположите их так, чтобы они располагались на как у меня (выделены красным цветом)….

Рис.38. Форма приложения

  1. У всех этих Image-ей свойство Strech поставьте равным True (загружаемая картинка будет точно походить под размеры компонента).

Добавляем кнопки с рисунками

  1. Поставьте на форму 2 кнопки с рисунками. За это отвечает компонент ВitBtn- он находится на вкладке Additional.

  2. Свойство Caption у этих кнопок очистите.

  3. У первой кнопки выберите свойство Glyph и загрузите в него файл btn1. Так же как мы делали с компонентом Image.

  4. У второй кнопки в Glyph поместите файл btn2.

Рис.39. Форма приложения

Начинаем программирование.

Что мы будем делать? При нажатии на кнопку Играем программа запускает генератор чисел, случайным образом выбирает 3 числа и помещает их в память ПК или в label-ы…В общем все так же как в программе, написанной нами на предыдущем уроке... Единственное, что нового, так это 3 контейнера для изображений. Я предлагаю такой ход:

Если выпадает цифра 1, то в Image я помещаю картинку pic1, если выпадает цифра 2, то помещаю pic2, иначе – pic3.

Код для этого выражения выглядит так:

Для переменной х:

If x=1 then image2.picture.loadFromFile (‘pic1.jpg’);

Но учтите, что если Вы будет использовать Label-ы, то их необходимо сначала поставить на форму.

Самостоятельно сделайте игру.

Задание 5. Создать игру «Поймай кнопку»

Знакомство с компонентом Таймер

Все компоненты, которые мы использовали ранее в своих программах, были визуальные. Что это значит? А то, что любой компонент, который мы помещали на форму, был виден и выполнял какую-либо видимую роль.

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

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

Самое важное свойство таймера — Interval (Интервал). Оно указывает, когда (через сколько времени) в следующий раз таймер должен сработать. Промежуток времени задается в тысячных долях секунды — миллисекундах. По умолчанию, свойство Interval содержит число 1000, следовательно, таймер будет срабатывать каждую секунду.

Ну, довольно теории. Перейдем к практике.

  1. Откройте Delphi или создайте новый проект.

  1. Поместите на форму компонент Таймер. Он находится на панели компонентов System (Системные) и имеет вид: . Таймер можно расположить где угодно на форме. Этот объект отображается на форме в виде значка фиксированного размера. В окне работающей программы его не видно.

  1. На форму поместите кнопку – компонент Button.

  2. Давайте сделаем так, чтобы через каждые пол-секунды кнопка прыгала куда-нибудь. А задача пользователя- ее поймать. Свойство Interval сделайте равным 500.

  3. Дважды щелкните по значку Timer, чтобы открыть обработчик события. Начинаем писать код:

procedure TForm1.Timer1Timer(Sender: TObject);

begin

randomize; // включаем генератор случайных чисел

button1.Left:= random (Form1.Width- 100); // кнопка может прыгать по всей длине формы

button1.Top:= random (Form1.Height-60); // кнопка может прыгать по всей ширине формы

end;

Когда нужно закончить игру? Когда пользователь щелкнет по кнопке. То есть для кнопки произойдет событие OnClick. Его и будем программировать.

  1. Щелкните 2 раза по кнопке Button1, чтобы создать процедуру обработки щелчка.

  2. Введите следующий код:

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. Начальная форма приложения

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

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

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

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

procedure TForm1.Timer1Timer(Sender: TObject);

begin

end;

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

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

Поставьте его значение равным 50.

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

  2. Чтобы вернуть ее с другого края добавьте в обработчик события таймера строку:

if bitbtn2.Left < 0 then bitbtn2.Left:=form1.Width-60;

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

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

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

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

Рис.44. Форма торпеды

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

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

  1. Дважды щелкните по таймеру2, и введите следующий код:

procedure TForm1.Timer2Timer(Sender: TObject);

begin

image1.top:= image1.top-5;

end;

  1. Запустите программу. Проверьте, работает ли торпеда. Работает, но как-то по-своему. Торпеда произвольно стреляет. Так быть не должно. Поэтому свойству Enabled Таймера2 присвойте значение False. Торпеда выстрелит только в том случае, когда Таймер2 включен.

  1. Чтобы включить Таймер2, а значит, запустить торпеду, в обработчик кнопки Bitbtn1 поставьте следующий оператор:

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

Timer2.Enabled:=true;

end;

  1. Запустите программу, проверьте. Что Вам не нравиться? Лично мне не нравятся 2 вещи: то, что можно запустить только одну торпеду и то, что при встрече с кораблем не происходит никакого эффекта. Будем это исправлять.

  1. Добавьте в объект Image рисунок torpeda.jpg (свойство Picture в Object Inspector). Вы получите торпеду в полной красе.

  2. На кнопки Bitbtn1 и Bitbtn2 поместите соответственно рисунки lodka.jpg и ships.jpg. (свойство Glyph).

  3. Создайте объект 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. Продумайте, что еще должно произойти в момент взрыва. Измените цвета формы, торпеды и т.д., добейтесь того, чтобы игрушка смотрелась.

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

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

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

Совершенствуем "Морской бой "