Королевство Дельфи"Knowledge itself is power"
F.Bacon
 Лицей
  
Главная
О лицее

Список семинаров

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  20:13[Войти] | [Зарегистрироваться]

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

Радик Ишмуратов
дата публикации 30-01-2004 14:00

урок из цикла: Delphi для чайников, или как научиться программировать.


предыдущий урок содержание семинара следующий урок

Урок 12. Параметр Sender. Совершенствуем игру.На прошлом уроке мы создавали свою первую игру. Я говорил о том, что сегодня нам предстоит изменить ее, усовершенствовать. Что же в ней плохо?
  1. Вы обратили внимание, что для всех 5-ти кнопок мы писали один и тот же код, за исключением номера кнопки, т.е. для первой - Button1, для второй- Вutton2 и т.д. Так настоящие программисты не поступают. Они пишут одну процедуру, а для всех остальных делают на нее ссылку. Помните, как в шутливой памятке: п1. Начальник всегда прав; п2. Если начальник не прав, смотри п1.
  2. На игровое поле надо нанести какую-либо разметку, например, нарисовать черту посередине поля.
  3. Глупо играть одному в такую игру. Значит нужно предусмотреть вариант игры для двоих.
Цель ясна? Начинаем творить.
  1. Открываем Delphi и загружаем туда наш проект, который мы делали на прошлом уроке, командой File/Open Project…и выберите ваш проект.
  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;
    

Теперь необходимо данную процедуру назначить всем остальным кнопкам. Для этого:
  • Выделите вторую кнопку.
  • В инспекторе объектов перейдите на закладку Events.
  • Рядом с надписью OnClick щелкните по стрелочке и из списка возможных процедур выберите Button1.
  • Повторите п 5-7 для кнопок 3,4,5.
  • Запустите программу, проверьте, она должна работать как надо.
Так, с первым заданием покончили. Теперь на очереди - создание линии.
За рисование на форме отвечает свойство 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 - высота формы, то есть получим вертикальную линию во всю высоту формы.
Поместите данные операторы в код кнопки Button1.
Запустите программу, проверьте. После щелчка по любой из кнопок, должна появиться вертикальная черта (рис)
Самостоятельно сделайте так, чтобы слева появилась еще одна черта — линия Старта (как на рис).

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

Посмотреть, как эта игрушка выглядит у меня, Вы сможете здесь: http://umnik.rikt.ru/everest/distant/delphi.htm Если у Вас что-либо не получается — скачайте исходники данной игры с нашего сайта

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




Смотрите также материалы по темам:


 Обсуждение материала [ 25-07-2010 11:20 ] 6 сообщений
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования