4. Свойства Caption у кнопок сделайте соответственно 1,2,3,4 и 5.
5. Поместите на форму элемент Panel. – кнопка
на панели инструментов Standart. С помощью панели мы будем отражать текущее состояние игры.
6. Свойству Align присвойте значение alBottom (по нижнему краю формы). Вы увидите, как панель «приклеится» к нижнему краю формы.
7. Свойство Caption очистите. Панель должны быть чистая.
8. На панель поместите элемент Label. На нем будут выдаваться пояснения.

Рис.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 |
Основные порталы (построено редакторами)
