4.  Свойства Caption у кнопок сделайте соответственно 1,2,3,4 и 5.

5.  Поместите на форму элемент Panel. – кнопка 7-1 на панели инструментов Standart. С помощью панели мы будем отражать текущее состояние игры.

6.  Свойству Align присвойте значение alBottom (по нижнему краю формы). Вы увидите, как панель «приклеится» к нижнему краю формы.

7.  Свойство Caption очистите. Панель должны быть чистая.

8.  На панель поместите элемент Label. На нем будут выдаваться пояснения.

7-2

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

Конструирование формы закончено. Пора приступать к программированию.

Все действия в игре происходит при нажатии на кнопку.

Так как, главное событие-это щелчок по кнопке, то ее и начинаем программировать:

9.  Сделайте двойной щелчок по кнопке 1, чтобы попасть в обработчик события.

При щелчке кнопка должна переместится на случайное количество пикселов по горизонтали. Следовательно, менять будет свойство left. Но как сделать случайность? В Delphi для таких случаев используют функцию Random (Х). Данная функция генерирует случайное число в диапазоне от 0 до Х. Но, чтобы запустить генератор случайных чисел, вначале необходимо выполнить процедуру Randomize. Учтем это позже, а сейчас нам нужно указать, какое максимальное число использовать в функции. Ширина формы – 675 пикселов. Первые 25 пикселов заняты под кнопку (Помните, размер кнопки - 25*25), а 675-25= 650.

Значит наш оператор примет вид: button1.Left:= Random (650)+25; Почему +25 догадайтесь сами.

10.  Далее, считаем количество щелчков. Как их считать? Самый простой вариант - закрепить за этим делом специальную переменную, которая будет отвечать только за количество щелчков. Я введу переменную k. А в обработчике события напишем: k:= k+1; (k - количество щелчков)

НЕ нашли? Не то? Что вы ищете?

Если кнопка пересечет середину экрана, то:

·  Отключаем эту кнопку;

·  Проверяем, все ли кнопки пересекли середину экрана.

11.  Отключаем кнопку: button1.enabled:= false;

А как проверить, все ли кнопки пересекли середину? Как в 10 пункте, введем еще один счетчик, который будет отсчитывать количество кнопок, пересекающих середину. Эту переменную я назову n. Теперь необходимо написать оператор: n:= n+1; То есть, при пересечении кнопки середины формы, n автоматически увеличиться на единицу. И теперь понятно, как указать программе: все ли кнопки пересекли границу: достаточно проверить переменную n. Если n = 5, то наша цель достигнута.

А теперь посмотрите внимательно на код кнопки 1. Вам все должно быть понятно:

procedure TForm1.Button1Click(Sender: TObject);

begin

button1.Left := random (650)+25;

k:=k+1;

if button1.Left > 325 then

begin

button1. enabled:=false;

n:=n+1;

if n=5 then

begin

form1.Color:=clred;

ShowMessage (' Победа ');

end;

end;

label1.Caption:= 'Вы сделали '+ IntToStr(k)+' ходов';

end;

12.  Далее необходимо описать переменные. После раздела implementation в окне кода запишите переменные, как мы делали в предыдущем уроке:

Подпись:

13.  Запустите программу (кнопка F9). Проверьте, работает ли кнопка?

14.  Закройте программу - то есть вернитесь в режим проектирования и сохраните свою первую игру под именем GameClick.

15.  Запустите игру еще раз. Проверьте, как работает кнопка. Закройте программу. И запустите еще раз. Внимательно понаблюдайте за работой кнопки. У Вас не возникает ощущения, что ваша кнопка вместо того, чтобы случайно прыгать по экрану, все время прыгает по одинаковым местам? Дело в том, что мы не запустили генератор случайных чисел.

16.  Перейдите в режим проектирования. Щелкните кнопкой мыши по форме, чтобы она выделилась, и перейдите на вкладку Events (События) в Инспекторе объектов.

17.  Дважды щелкните рядом с событием OnCreate, чтобы создать обработчик события.

18.  Введите команду: randomize;

19.  Здесь же введем начальные значения переменных (помните, как в прошлом уроке):

Подпись:

20.  Тот же самый обработчик нужно записать для 2-ой кнопки. Только везде вместо button1- Вы будете писать button2.

21.  Аналогично расправьтесь с 3-ей, 4-ой, 5-ой кнопкой.

22.  Запустите программу. Теперь, когда все обработчики прописаны, игра должна заканчиваться правильно: форма окраситься в красный цвет, в Label1 будет красоваться количество сделанных ходов, а Вы увидите сообщение о победе.

23.  Обязательно сохраните вашу игру, на следующем шаге мы ее исправим (доведем до ума, модифицируем, сделаем ее для двоих, разберемся, что такое красивый и некрасивый код).

Самостоятельно:

1.  Очень внимательно разберитесь с каждой строчкой кода. Поймите, зачем нужно каждое действие.

2.  Постарайтесь самостоятельно еще раз написать данную игру, не подсматривая в материал урока.

3.  Усовершенствуйте программу по своему вкусу ( например, измените вид курсора мыши, измените цвета, шрифты).

4.  Поставьте на панель еще одну метку (Label2) и сделайте так, чтобы она отражала текущую информацию (комментировала игру- например, при достижении 1-ой кнопки заветной середины, выдавала бы надпись: «1-ая кнопка закончила»).

5.  Сделайте кнопки более информативными (например, чтобы свойство Caption кнопки отражало координату Left этой кнопки).

6.  Разберите внимательно код кнопки 1. Сделайте пояснения на русском языке, что делает каждая строчка в этой процедуре так, как это делал я в материалах прошлых уроков.

Вместо вопросиков Вам нужно сделать краткие пояснения

procedure TForm1.Button1Click(Sender: TObject); // ?

Begin // ?

button1.Left := random (650)+25; // ?

k:=k+1; // ?

if button1.Left > 325 then // ?

Begin // ?

button1. enabled:=false; // ?

n:=n+1; // ?

if n=5 then // ?

Begin // ?

form1.Color:=clred; // ?

ShowMessage (' Победа '); // ?

end; // ?

end; // ?

label1.Caption:= 'Вы сделали '+ IntToStr(k)+' ходов'; // ?

end; // ?

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

Ваше домашнее задание Вы сможете отправить мне по адресу: *****@***ru

Самостоятельно:

5.  Доделайте программу, чтобы она при неправильном пароле выводила надпись: У вас осталась 1 попытка ( или 2 или 3).

6.  Ответьте на вопрос: «Почему нельзя задавать начальное значение счетчика в процедуре нажатия клавиши?». Если не догадались, вставьте его туда, и посмотрите, что происходит.

7.  Напишите обработчик для второй кнопки Закрыть, чтобы при нажатии на нее, форма закрывалась.

8.  Измените программу таки образом, чтобы на правильные и неправильные действия программа еще как-то реагировала (цветом формы, размером шрифта и т. д.).

Параметр Sender. Совершенствуем игру.

На предыдущем шаге мы создавали свою первую игру. Сейчас нам необходимо ее усовершенствовать.

1.  Вы обратили внимание, что для всех 5-ти кнопок мы писали один и тот же код, за исключением номера кнопки, т. е. для первой – Button1, для второй - Вutton2 и т. д. Так настоящие программисты не поступают. Они пишут одну процедуру, а для всех остальных делают на нее ссылку. Помните, как в шутливой памятке: п1. Начальник всегда прав; п2. Если начальник не прав, смотри п1.

2.  На игровое поле надо нанести какую-либо разметку, например, нарисовать черту посередине поля.

3.  Нужно предусмотреть вариант игры для двоих.

Ход работы

1.  Открываем Delphi и загружаем туда наш проект, который мы делали на прошлом уроке, командой File/OpenProect…и выберите ваш проект.

2.  Откройте обработчик события – щелчка 1-ой кнопки, дважды щелкнув по ней. Откроется процедура, которую мы уже писали ранее. Давайте на нее посмотрим еще раз:

procedure TForm1.Button1Click(Sender: TObject);

Begin

button1.Left := random (650)+25;

k:=k+1;

if button1.Left > 325 then

Begin

button1.enabled:=false;

n:=n+1;

if n=5 then

Begin

form1.Color:=clred;

ShowMessage (' Победа ');

end;

end;

label1.Caption:= 'Вы сделали '+ IntToStr(k)+' ходов';

end;

3.  Нам необходимо, чтобы данная процедура была универсальна, т. е. использовалась всеми пятью кнопками. Но как это сделать, если везде присутствует запись Button1? В данном примере мы использовали статистическую ссылку на объект, а надо использовать динамическую- то есть узнать объект, который вызвал событие. Это записывается так: (Sender as TButton). И теперь, если мы запишем (Sender as TButton) вместо Button1, то получим код, действующий правильно для всех кнопок.

4.  Измените свою процедуру таким образом, чтобы вместо Button1 была запись: Sender as TButton):

procedure TForm1.Button1Click(Sender: TObject);

begin

(sender as Tbutton).Left := random (650);

k:=k+1;

if (sender as Tbutton).Left> 325 then

begin

(sender as Tbutton).enabled := false;

n:=n+1;

if n=5 then

Begin

form1.Color:=clred;

ShowMessage (' Победа ');

end;

end;

label1.Caption:= 'Вы сделали '+ IntToStr(k)+' ходов';

end;

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

5.  Выделите вторую кнопку.

6.  В инспекторе объектов перейдите на закладку Events.

7.  Рядом с надписью OnClick щелкните по стрелочке и из списка возможных процедур выберите Button1.

8.  Повторите п 5-7 для кнопок 3,4,5.

9.  Запустите программу, проверьте, она должна работать как надо.

Так, с первым заданием покончили. Теперь на очереди – рисование линии.

За рисование на форме отвечает свойство Canvas (Канва).

form1.Canvas. Pen. Color:=clRed;- Устанавливаем для карандаша красный цвет

form1.Canvas. MoveTo(325,0); - Помещаем карандаш в точку с координатами (325,0)

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Основные порталы (построено редакторами)

Домашний очаг

ДомДачаСадоводствоДетиАктивность ребенкаИгрыКрасотаЖенщины(Беременность)СемьяХобби
Здоровье: • АнатомияБолезниВредные привычкиДиагностикаНародная медицинаПервая помощьПитаниеФармацевтика
История: СССРИстория РоссииРоссийская Империя
Окружающий мир: Животный мирДомашние животныеНасекомыеРастенияПриродаКатаклизмыКосмосКлиматСтихийные бедствия

Справочная информация

ДокументыЗаконыИзвещенияУтверждения документовДоговораЗапросы предложенийТехнические заданияПланы развитияДокументоведениеАналитикаМероприятияКонкурсыИтогиАдминистрации городовПриказыКонтрактыВыполнение работПротоколы рассмотрения заявокАукционыПроектыПротоколыБюджетные организации
МуниципалитетыРайоныОбразованияПрограммы
Отчеты: • по упоминаниямДокументная базаЦенные бумаги
Положения: • Финансовые документы
Постановления: • Рубрикатор по темамФинансыгорода Российской Федерациирегионыпо точным датам
Регламенты
Термины: • Научная терминологияФинансоваяЭкономическая
Время: • Даты2015 год2016 год
Документы в финансовой сферев инвестиционнойФинансовые документы - программы

Техника

АвиацияАвтоВычислительная техникаОборудование(Электрооборудование)РадиоТехнологии(Аудио-видео)(Компьютеры)

Общество

БезопасностьГражданские права и свободыИскусство(Музыка)Культура(Этика)Мировые именаПолитика(Геополитика)(Идеологические конфликты)ВластьЗаговоры и переворотыГражданская позицияМиграцияРелигии и верования(Конфессии)ХристианствоМифологияРазвлеченияМасс МедиаСпорт (Боевые искусства)ТранспортТуризм
Войны и конфликты: АрмияВоенная техникаЗвания и награды

Образование и наука

Наука: Контрольные работыНаучно-технический прогрессПедагогикаРабочие программыФакультетыМетодические рекомендацииШколаПрофессиональное образованиеМотивация учащихся
Предметы: БиологияГеографияГеологияИсторияЛитератураЛитературные жанрыЛитературные героиМатематикаМедицинаМузыкаПравоЖилищное правоЗемельное правоУголовное правоКодексыПсихология (Логика) • Русский языкСоциологияФизикаФилологияФилософияХимияЮриспруденция

Мир

Регионы: АзияАмерикаАфрикаЕвропаПрибалтикаЕвропейская политикаОкеанияГорода мира
Россия: • МоскваКавказ
Регионы РоссииПрограммы регионовЭкономика

Бизнес и финансы

Бизнес: • БанкиБогатство и благосостояниеКоррупция(Преступность)МаркетингМенеджментИнвестицииЦенные бумаги: • УправлениеОткрытые акционерные обществаПроектыДокументыЦенные бумаги - контрольЦенные бумаги - оценкиОблигацииДолгиВалютаНедвижимость(Аренда)ПрофессииРаботаТорговляУслугиФинансыСтрахованиеБюджетФинансовые услугиКредитыКомпанииГосударственные предприятияЭкономикаМакроэкономикаМикроэкономикаНалогиАудит
Промышленность: • МеталлургияНефтьСельское хозяйствоЭнергетика
СтроительствоАрхитектураИнтерьерПолы и перекрытияПроцесс строительстваСтроительные материалыТеплоизоляцияЭкстерьерОрганизация и управление производством