Радик Ишмуратов дата публикации 30-01-2004 13:13 урок из цикла:
Урок 11. Создаем свою первую игру.На сегодняшнем уроке мы создадим простенькую игру, основанную на принципе случайного распределения.
Итак, что собой представляет игра? При нажатии на кнопку, она сдвинется на случайное количество пиксель по горизонтали. То есть прыгнет. Так как прыжки блохи мало предсказуемы, то и мы сделаем так, чтобы после щелчка по блохе, она перескакивала на любое место по горизонтали. Если блоха (кнопка) пересечет середину экрана, то будем считать, что блоха (кнопка) выполнила свою задачу и может отдыхать ( отключается). Ваша задача: за наименьшее количество щелчков перетащить всех блох на вторую половину формы. Как только все пять кнопок пересекут "экватор", игра заканчивается.
- Откройте Delphi.
- Высота формы нам не важна, а вот ширину формы сделайте равной 675 (Width= 675).Свойство Color я сделал clAqva (Вы можете оставить его таким как есть или украсить по своему вкусу).
- На форму поместите 5 кнопок — Button. Размеры кнопок сделайте равными 25*25 (Width= 25 , Height= 25). Расположите их как у меня на рис 1.
- Свойства Caption у кнопок сделайте соответственно 1,2,3,4 и 5.
- Поместите на форму элемент Panel — вот как выглядит эта кнопка на панели инструментов Standard.
рис. 1
С помощью панели мы будем отражать текущее состояние игры.
- Свойству Align присвойте значение alBottom (по нижнему краю формы). Вы увидите, как панель "приклеится" к нижнему краю формы.
- Свойство Caption очистите. Панель должны быть чистая.
- На панель поместите элемент Label. На нем будут выдаваться пояснения.
Если Вы все выполнили, то ваша форма будет похожа на мою:
Конструирование формы закончено. Пора приступать к программированию.
Все действия в игре происходят при нажатии на кнопку.
Так как главное событие — это щелчок по кнопке, то ее и начинаем программировать:
- Сделайте двойной щелчок по кнопке 1, чтобы попасть в обработчик события.
При щелчке кнопка должна переместится на случайное количество пикселов по горизонтали. Следовательно, менять будет свойство left. Но как сделать случайность? В Delphi для таких случаев используют функцию Random (Х). Данная функция генерирует случайное число в диапазоне от 0 до Х. Но, чтобы запустить генератор случайных чисел, вначале необходимо выполнить процедуру Randomize. Учтем это позже, а сейчас нам нужно указать, какое максимальное число использовать в функции. Ширина формы — 675 пикселов. Первые 25 пикселов заняты под кнопку (Помните, размер кнопки — 25*25), а 675-25= 650.
Значит наш оператор примет вид: button1.Left:= Random (650)+25; Почему +25 догадайтесь сами.
Далее, считаем количество щелчков. Как их считать? Самый простой вариант — закрепить за этим делом специальную переменную, которая будет отвечать только за количество щелчков. Я введу переменную k. А в обработчике события напишем: k:= k+1; (k — количество щелчков)
Если кнопка пересечет середину экрана, то:
- Отключаем эту кнопку;
- Проверяем, все ли кнопки пересекли середину экрана.
- Отключаем кнопку: 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;
- Далее необходимо описать переменные. После раздела implementation в окне кода запишите переменные, как мы делали в предыдущем уроке:
var
Form1: TForm1;
implementation
var n,k:integer;
| |
- Запустите программу (кнопка F9). Проверьте, работает ли кнопка?
- Закройте программу — то есть вернитесь в режим проектирования и сохраните свою первую игру под именем GameClick.
- Запустите игру еще раз. Проверьте, как работает кнопка. Закройте программу. И запустите еще раз. Внимательно понаблюдайте за работой кнопки. У Вас не возникает ощущения, что ваша кнопка вместо того, чтобы случайно прыгать по экрану, все время прыгает по одинаковым местам? Дело в том, что мы не запустили генератор случайных чисел.
- Перейдите в режим проектирования. Щелкните кнопкой мыши по форме, чтобы она выделилась, и перейдите на вкладку Events (События) в Инспекторе объектов.
- Дважды щелкните рядом с событием OnCreate, чтобы создать обработчик события.
- Введите команду: randomize;
- Здесь же введем начальные значения переменных (помните, как в прошлом уроке):
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
k:=0;
n:=0;
end;
| |
- Тот же самый обработчик нужно записать для 2-ой кнопки. Только везде вместо button1 — Вы будете писать button2.
- Аналогично расправьтесь с 3-ей, 4-ой, 5-ой кнопкой.
- Запустите программу. Теперь, когда все обработчики прописаны, игра должна заканчиваться правильно: форма окрасится в красный цвет, в Label1 будет красоваться количество сделанных ходов, а Вы увидите сообщение о победе.
- Обязательно сохраните вашу игру, на следующем уроке мы ее исправим (доведем до ума, модифицируем, сделаем ее для двоих, разберемся, что такое красивый и некрасивый код).
- Очень внимательно разберитесь с каждой строчкой кода. Поймите, зачем нужно каждое действие.
- Постарайтесь самостоятельно еще раз написать данную игру, не подсматривая в материал урока.
- Усовершенствуйте программу по своему вкусу ( например, измените вид курсора мыши, измените цвета, шрифты).
- Поставьте на панель еще одну метку (Label2) и сделайте так, чтобы она отражала текущую информацию (комментировала игру — например, при достижении 1-ой кнопки заветной середины, выдавала бы надпись: "1-ая кнопка закончила").
- Сделайте кнопки более информативными (например, чтобы свойство Caption кнопки отражало координату Left этой кнопки).
- Разберите внимательно код кнопки 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;
| |
- Придумайте сами какой-либо сюжет, основанный на принципе случайного распределения... и попробуйте воплотить его в жизнь.
Обсуждение материала [ 30-03-2010 18:57 ] 6 сообщений |