Отправляет email-рассылки с помощью сервиса Sendsay

Самоучитель по Delphi

  Все выпуски  

Самоучитель по Delphi Самочуитель по Делфи - выпуск 7


 Здравствуйте дорогие читатели! С вами Артём, автор рассылки "Самоучитель по Delphi".

Сегодня 11 августа 2006 года и это 7 выпуск моей рассылке.

Контакты

Автор и выпускающий редактор рассылки - NC.Luthermail.ru

Сайт - http://tibrazco.info.
Предложения и замечания по рассылке отсылайте по e-mail: NC.Luthermail.ru. Я обязательно учту ваши пожелания предложения при составлении рассылки.

Выпуск  7

Теперь вы можете скачать исходники и файлы к рассылке на сайте http://tibrazco.info/df.htm

Константы

              Идентификаторы - это имена констант, переменных, меток, типов, обьектов, классов, свойств, процедур, функций, модулей, программ и полей в записях. Идентификатор всегда начинается буквой, за которой могут следовать буквы и цифры. Буквой так же считается символ подчеркивания, поэтому идентификатор может начинаться этим символом и даже состоять только из одного или нескольких символов подчеркивания. Пробелы и специальные символы алфавита должны входить в идентификатор. Идентификаторы могут иметь проозвольную длину.

Примеры правильных идентификаторов:

     a

     MyProgramIsBest

    external

    ALPHA

   date_17_sep_55

   _beta

Примеры неправильных идентификаторов:

   1Program                    // начинается цифрой

   block#1                      // содержит специальный код

   My Program               // содержит пробел

   mod                           // зарезирвированное слово

                     Константы

       В качестве констант в Object Pascal могут использоваться целые, вещественные и шестнадцатиричные числа, логические константы, символы, строки символов, конструкторы множеств и признак неопределенного указателя NIL.

      Целые числа записываются со знаком или без него по обычным правилам могут иметь значение от - 2 147 483 648 до + 2 147 483 647. Следует отметить, что, если целоисчислительная константа выходит за указанные границы, компилятор автоматически приводит её к вещественному типу.

     Вещественные числа записываются со знаком или без него с использованием десятичной точки и/или экспоненциональной части. Экспоненциональная часть начинается символом e или E, за которым могут следовать "+" или "-" и десятичный порядок. Символ e(E) означает десятичный порядок и имеет смысл "умножить на 10 в степени. Например, 3.14E5 - 3.14 умножить на 10 в степени 5.

     Шестадцатеричное число состоит из 16 цифр, которым предшествует знак доллара $(код символа 36). Диапазон шестнадцатеричных цифр - от $00000000 до $FFFFFFFF.

    Логическая константа имеет значение или False(ложь) или True(истина).

   Символьная константа - это любой символ, представленный на клавиатуре компьютера, заключенный в апострофы:

   'z' - символ z.

   Если же необходимо записать непосредственно символ апострофа, он удваивается(не путайте с символом двойной ковычки). например '' - символ апострофа(').

  Можно записывать символ с помощью указания его внутреннего представления, которому предшествует символ #(код 35), например:

  #97 - символ а.

  Строковая константа - любая последовательность символов(кроме символа CR - возврат каретки) заключенная в апострофы, например:

  'Это - строка символов'

  Если же в строке надо указать сам апостроф, то он удваивается.

 'That''s string '

 Конструктор множеств - список элементов множества, обрамленный квадратными скобками, например

[1,2,3]

[blue, red]

[]

Пишем программу!

 В этом выпуске я расскажу вам как написать игру "Слови кнопку".

        Для начала откроем Делфи и создадим новый проект. Выделим форму и  в свойстве caption напишем "Слови кнопку". Мы изменили заголовок нашей формы.

        Добавим компоненты, которые будут нам нужны для работы программы: 2 кнопки(TButton) и таймер(он находится на панели System). В значениях кнопок пишем для Buttton1 "Нажми меня". Для Button2 "Выход".

        Для кнопки с надписью "Нажми меня" задаём следущие свойства:

  •   TabStop(доступна по клавише TAB). Это свойство разрешает выбирать данный объект клавишей TAB. В этой игре мы не будем пользоваться клавиатурой. Если использовать это, то в игре не будет никакого смысла. Меняем значение этого свойства на False(ложь).
  •   Visible(Видима). Сначала кнопка должна быть невидима, чтобы пользователь не знал где она находится. Задаем этому свойству значени False(ложь).

       Конечно можно выбирать координаты для кнопки случайно, но мы сделаем по-другому. Представим, что на форме есть 9 мест для кнопки в которых она может появится.

       Для того, чтобы всё выглядело красиво, мы должны указать нужные нам размеры формы и кнопки. Для кнопки задаем следущие размеры:

       Свойство Hieght(Высота) меняем на 30.

       Width(Ширина) меняем на 80.

      Теперь для формы:

      ClientWidth(внутренняя ширина) = 300.

      ClientHeight(внутренняя высота) = 200.

      Чтобы размер окна нельзя было изменить во время игры меняем свойство формы BorderStyle(Тип границы) на bsSingle(Тонкая).

      Нам осталось разобраться только с кнопкой "Выход", так как компонент таймер виден не будет. Для кнопки "Выход" зададим следущие свойства:

     Left(слева) = 110;

     Top(сверху) = 160;

     Width(ширина) - 80;

     Height(высота) - 30;

     Переходим к таймеру. Если вы ещё его не добавили, он находится на панели System, компонент TTimer. Это самый очень важный компонент нашего проекта. Свойство Interval(интервал) нужно поменять на 500. Промежуток времени задается в миллискундах - тысячных долях секунды. Это 0.5 секунды(1000 - 1 секунда). Наша кнопка будет пригать каждые полсекунды.

    Теперь приступим непосредственно к программированию. Щелкнем двойным щелчком по таймеру. При обработке этого события кнопка должна менять положение. Пусть все положения кнопки будут пронумерованы, как показано ниже в таблице.

0

1

2

3

4

5

6

7

8

   Нумерация начинается с нуля - в этом случае программа будет проще. Обратите внимание, что если к номеру прибавить 3, то мы оказываемся в следующей строке, а если число 1, то в следующем столбце. Исходя из этого вычисляем положение кнопки для заданой позиции:

   Button1.Top := 10 + 50*(i div 3);

   Button1.Left := 10 + 100*(i mod 3);

   div - оператор целочисленного деления. Если при делении получается дробное число, то дробная часть отбрасывается. Например 8 / 3 = 2.66666

  8 div 3 = 2.

  Оператор mod вычисляет остаток деления одного числа на другое. Например 6 mod 3 = 0 или 7 mod 3 = 1.

Перед оператором  begin нужно записать такой код

   var i : Integer;

   Мы добавили в процедуру переменную i. Она содержит номер клетки.С помощью умножения и сложения мы переходим от номера клетки к положению кнопки на форме. Значение переменных нужно выбирать случайным образом и конечно перед выше описанными операторами.

i := Random(9);              // Мы будем случайным образом(из 9) выбирать число.

Вся процедура будет выглядеть так:

procedure TForm1.Timer1Timer(Sender: TObject);

var i : integer;

begin

  i := Random(9);

  Button1.Visible := True;

  Button1.Top := 10 + 50*(i div 3);

  Button1.Left := 10 + 100*(i mod 3);

end;

     Теперь будем программировать событие, которое будет исполняться при нажатии на кнопку "Нажми меня".

     Дважды щелкните на кнопке и напишите следущий код:

     Button1.Caption := 'Готово!';                          // Меняем надпись на с "Нажми меня" на "Готово!"

     Button1.Enabled := False;                                // Отключаем кнопку

     Timer1.Enabled := False;                                 // Отключаем таймер

    Практически всё. Попробуйте запустить программу нажав F9. Всё работает, но кнопка "выход" нет.

    Дважды жмем на кнопку "выход" и пишем:

    Close;                  // Закрытие окна

    И ещё, для того, чтобы случайные числа не повторялись кликаем два раз на форму и пишем:

   Randomize;

   Всё готово! Всё должно работать, а если нет, то заходите на сайт Tibrazco в раздел исходников и скачиваем. В исходнике всё должно быть правильно. Чуть не забыл! Надо же вам задание задать домашнее.

  Задание: Создайте пару кнопок(Быстрее и Медленне) для того, чтобы можно было менять скорость перемещения кнопки. Так же вы можете создать кнопку "Заново", так как в простом варианте игры это не предусмотрено. В общем экспереминтируйте! Удачи!

Вопросы от читателей

           Вопрос:Здравствуйте. Я использую Delphi 7. Можно ли отключить контекстное меню, чтобы при нажатии правой кнопки на панели задач не появлялось меню? Как сделать так, чтобы при нажатии клавиш (Alt + F4) и других клавиш, окно не закрывалось?

           Ответ: Про меню не знаю. Но, чтобы при нажатии кнопопк(Alt+F4) и других клавиш, нужно вызвать событие OnCloseQuery для формы  и пишем туда: CanClose:=false;

           Вопрос:Скажите, пожалуйста, а какое у Вас образование? и где Вы его получали?

           Ответ: Среднее, в школе.

           Вопрос:Здраствуйте Артем. Я недавно начал изучать ООП. Дайте понятие - что такое объект и класс. Заранее спасибо! С уважением Зафар.

           Ответ: Класс обьединяет в себе поля, методы, свойства. Например класс TForm содержит для себя все нужное для создания Windows-окна, а класс TMemo является полнофункциональным текстовым редактором. Библиотека Делфи предстваляет "склад кирпичей", созданных программиста Борланд для помощи программистам в создании программ. КОдин класс может быть порожден от другого. Таким образом из более простых классов каждый программист может создать свой класс, который будет включать свойства, методы и поля нужные для конкретного случая. 

           Обьект обьект является переменной класса и следовательно наследует все его признаки.

           Вопрос:Здорово! My name is EvkliD. давно хочу настрочить на делфи какую-нить игрушку, с магией, орками и всякое такое. сам мир будет в "движении", а вот битву хочу сделать пошаговой. Всебы ничего, да вот только как это все запрограмммировать, хотя бы подскажи "общий" алгоритм, и где ваще можно наити инфу по этой теме. Заранее благодарен.

           Ответ: Ну я думаю, что в одиночку такой проект вам не осилить, разве что вы настоящий гений-программист. К тому же Делфи представляет(как я рассказывал в первых выпусках) инструмент для создания программного обеспечения, зачастую для работы с базами данных, но ни как уж не игр :) "общего" кода по этой теме у меня нет, но вы можете посмотреть на сайте delphiworld.narod.ru. Удачи!

Заключение

Напоминаю, что  предыдущие выпуски рассылки вы можете прочитать на моем сайте  http://tibrazco.info в разделе рассылки http://tibrazco.info/mail.htm И не бойтесь присылать свои вопросы, я отвечу на них и помещу их в рассылки, чтобы все читатели узнали что-то новое. Присылайте их сюда NC.Luthermail.ru.

 


В избранное