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

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

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

Урок 11. Создаем свою первую игру.

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

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


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

Урок 11. Создаем свою первую игру.На сегодняшнем уроке мы создадим простенькую игру, основанную на принципе случайного распределения.

Придумаем сюжет.

Итак, что собой представляет игра? При нажатии на кнопку, она сдвинется на случайное количество пиксель по горизонтали. То есть прыгнет. Так как прыжки блохи мало предсказуемы, то и мы сделаем так, чтобы после щелчка по блохе, она перескакивала на любое место по горизонтали. Если блоха (кнопка) пересечет середину экрана, то будем считать, что блоха (кнопка) выполнила свою задачу и может отдыхать ( отключается). Ваша задача: за наименьшее количество щелчков перетащить всех блох на вторую половину формы. Как только все пять кнопок пересекут "экватор", игра заканчивается.

Проектируем форму
  1. Откройте Delphi.
  2. Высота формы нам не важна, а вот ширину формы сделайте равной 675 (Width= 675).Свойство Color я сделал clAqva (Вы можете оставить его таким как есть или украсить по своему вкусу).
  3. На форму поместите 5 кнопок — Button. Размеры кнопок сделайте равными 25*25 (Width= 25 , Height= 25). Расположите их как у меня на рис 1.
  4. Свойства Caption у кнопок сделайте соответственно 1,2,3,4 и 5.
  5. Поместите на форму элемент Panel — вот как выглядит эта кнопка на панели инструментов Standard.

    рис. 1
    С помощью панели мы будем отражать текущее состояние игры.
  6. Свойству Align присвойте значение alBottom (по нижнему краю формы). Вы увидите, как панель "приклеится" к нижнему краю формы.
  7. Свойство Caption очистите. Панель должны быть чистая.
  8. На панель поместите элемент Label. На нем будут выдаваться пояснения.
Если Вы все выполнили, то ваша форма будет похожа на мою:
Конструирование формы закончено. Пора приступать к программированию.

Программируем игру:

Все действия в игре происходят при нажатии на кнопку. Так как главное событие — это щелчок по кнопке, то ее и начинаем программировать:
  1. Сделайте двойной щелчок по кнопке 1, чтобы попасть в обработчик события.

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

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

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

    Если кнопка пересечет середину экрана, то:
    • Отключаем эту кнопку;
    • Проверяем, все ли кнопки пересекли середину экрана.
  2. Отключаем кнопку: 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;
    
  3. Далее необходимо описать переменные. После раздела implementation в окне кода запишите переменные, как мы делали в предыдущем уроке:

    var
    Form1: TForm1;
    
    implementation
    var n,k:integer;
    
    {$R *.DFM}
    

  4. Запустите программу (кнопка F9). Проверьте, работает ли кнопка?
  5. Закройте программу — то есть вернитесь в режим проектирования и сохраните свою первую игру под именем GameClick.
  6. Запустите игру еще раз. Проверьте, как работает кнопка. Закройте программу. И запустите еще раз. Внимательно понаблюдайте за работой кнопки. У Вас не возникает ощущения, что ваша кнопка вместо того, чтобы случайно прыгать по экрану, все время прыгает по одинаковым местам? Дело в том, что мы не запустили генератор случайных чисел.
  7. Перейдите в режим проектирования. Щелкните кнопкой мыши по форме, чтобы она выделилась, и перейдите на вкладку Events (События) в Инспекторе объектов.
  8. Дважды щелкните рядом с событием OnCreate, чтобы создать обработчик события.
  9. Введите команду: randomize;
  10. Здесь же введем начальные значения переменных (помните, как в прошлом уроке):

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      randomize;
      k:=0;
      n:=0;
    end;
    

Программируем другие кнопки.
  1. Тот же самый обработчик нужно записать для 2-ой кнопки. Только везде вместо button1 — Вы будете писать button2.
  2. Аналогично расправьтесь с 3-ей, 4-ой, 5-ой кнопкой.
  3. Запустите программу. Теперь, когда все обработчики прописаны, игра должна заканчиваться правильно: форма окрасится в красный цвет, в Label1 будет красоваться количество сделанных ходов, а Вы увидите сообщение о победе.
  4. Обязательно сохраните вашу игру, на следующем уроке мы ее исправим (доведем до ума, модифицируем, сделаем ее для двоих, разберемся, что такое красивый и некрасивый код).
Самостоятельно:
  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. Придумайте сами какой-либо сюжет, основанный на принципе случайного распределения... и попробуйте воплотить его в жизнь.

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




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


 Обсуждение материала [ 30-03-2010 18:57 ] 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» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

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