Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 7: Программирование на Visual C# искусственного интеллекта. Издание 2. Валерий Алексеевич Жарков
Чтение книги онлайн.

Читать онлайн книгу Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 7: Программирование на Visual C# искусственного интеллекта. Издание 2 - Валерий Алексеевич Жарков страница 17

СКАЧАТЬ что программа использует переменные cx и cy, чтобы задавать местоположение сыра. Сейчас их значения становятся больше на единицу каждый раз, когда вызывается обновление экрана, что заставляет сыр двигаться направо и вниз.

      В процессе игры, для вызова метода updatePositions через одинаковые промежутки времени, целесообразно использовать таймер. С панели инструментов Toolbox размещаем на форме компонент Timer (Таймер). В панели Properties (для данного компонента Timer) в свойстве Enabled оставляем булево значение False, а свойству Interval задаём значение 40 (миллисекунд, что соответствует 25 кадрам в секунду по стандарту телевещания России; 1000 миллисекунд равно 1 секунде).

      Важно отметить, что добавление в проект компонента Timer (Таймер) означает, что наша игра должна отключить таймер, когда игра находится в фоновом режиме, и включить таймер при активации игры. Именно поэтому в панели Properties (для данного компонента Timer) в свойстве Enabled мы оставили булево значение False.

      Кроме того, таймер не должен быть включенным, пока программа не загрузит изображение. Поэтому в приведённый выше метод Form1_Paint дописываем в самом низу:

      //We turn on the timer:

      timer1.Enabled = true;

      Окончательно, код в теле метода Form1_Paint должен иметь такой вид.

      Листинг 4.3. Метод для рисования изображения.

      private void Form1_Paint(object sender, PaintEventArgs e)

      {

      //We load into object of the System.Drawing.Image class

      //the image file of the set format, added to the project,

      //by means of ResourceStream:

      cheeseImage =

      new Bitmap(myAssembly.GetManifestResourceStream(

      myName_of_project + "." + "cheese.JPG"));

      //We draw the image on the Form1:

      e.Graphics.DrawImage(cheeseImage, cx, cy);

      //We turn on the timer:

      timer1.Enabled = true;

      }

      Теперь всякий раз, когда вызывается метод Form1_Paint, программа рисует сыр на экране с соответствующими координатами cx и cy.

      Дважды щёлкаем по значку для компонента Timer (ниже формы в режиме проектирования). Появляется шаблон метода timer1_Tick, который после записи нашего метода updatePositions и библиотечного метода Invalidate (или Refresh) для перерисовки изображения на экране принимает следующий вид.

      Листинг 4.4. Метод для смены кадров на экране и перемещения фигуры.

      private void timer1_Tick(object sender, EventArgs e)

      {

      //We call the method:

      updatePositions();

      //We redraw the screen:

      Invalidate();

      }

      Строим и запускаем программу на выполнение обычным образом:

      Build, Build Selection; Debug, Start Without Debugging.

      В ответ Visual C# выводит форму Form1 в режиме выполнения, на которой изображение типа встроенного нами рисунка сыра cheese.jpg перемещается из верхнего левого угла по диагонали сверху вниз (в нижний правый угол) и скрывается (рис. 4.3).

      Рис. 4.3. Объект перемещается по диагонали сверху вниз. Рис. 4.4. Отскок объекта.

      Изображение объекта мерцает, что в дальнейшем будет исправлено применением двойной буферизации.

      Таким образом, мы разработали методику анимации, по которой можно перемещать любые объекты на экране .

      4.3. Методика проектирования отскока объекта от границы

      Разработаем методику решения задачи по отскоку заданного СКАЧАТЬ