"Эверест" - Центр Практической Информатики

представляет вводный курс

"Delphi для чайников"

Урок 12. Параметр 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, то получим код, действующий правильно для всех кнопок:

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)
form1.Canvas.LineTo(325,form1.Height); - рисуем линию из точки (325,0) в точку с координатами (325, form1.Width). form1.Heigth - высота формы, то есть получим вертикальную линию во всю высоту формы.

10. Поместите данные операторы в код кнопки Button1.
11. Запустите программу, проверьте. После щелчка по любой из кнопок, должна появиться вертикальная черта (рис)


12. Самостоятельно сделайте так, чтобы слева появилась еще одна черта- линия Старта (как на рис).

А как сделать игру для двоих? Это уже не трудно. Для этого нужно:

  • Поместить еще 5 кнопок справа у самого края формы, отключить их- свойство Enabled.
  • Изменить обработчик события 1-ой кнопки, чтобы при достижении всех пяти кнопок финиша, включались другие пять кнопок.
  • Написать для них соответствующих обработчик события, чтобы при помещении их в левую половину формы кнопки отключались, а новые переменные фиксировали количество ходов второго игрока и количество кнопок, достигших финиша.
  • При достижении всех кнопок финиша сравнивить количество ходов 1-го и второго игрока (соответствующие переменные) и Вывести информацию о победителе.

13. Рекомендую сделать это самим. Всей информацией для этого Вы обладаете.

Посмотреть, как эта игрушка выглядит у меня, Вы сможете на нашем сайте: http://umnik.rikt.ru/projectgame/learn.html

Если у Вас что-либо не получается- скачайте исходники данной игры с нашего сайта

Самостоятельно: придумайте сами какую-либо подобную игру и воплотите ее в жизнь.


Примечание : Обращаю ваше внимание на то, что данный курс ознакомительный. Если Вы желаете действительно научиться программированию и получить в руки мощный инструмент для профессиональной работы, то приглашаем Вас на наш основной курс по Delphi.

Вся информация находится по адресу: http://umnik.rikt.ru/everest/distant/delphi_os.htm

Учиться у нас выгодно. Не верите?

Внимание : Центр практической информатики "Эверест" объявляет об увеличении стоимости обучения на платных курсах с 1-го августа 2004 года на 10%. Для тех, кто уже проходит обучение, либо оплатит обучение до 1.08.04. цена менятся не будет.

У Вас есть шанс учиться осенью по ценам лета. Не упускайте Ваш шанс....

На следующем уроке : мы начнем проектировать Игровой автомат.

Посмотреть архив данной рассылки Вы сможете на нашем сайте по адресу: http://umnik.rikt.ru/projectgame/learn.html


ШСД поможет вам открыть Свое Дело!      

 

Rambler's Top100  
  Союз образовательных сайтов     InterSib Каталог ресурсов Сибири