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

Автор: Валерий Алексеевич Жарков
Издательство: Автор
Серия:
Жанр произведения:
Год издания: 2023
isbn:
Скачать книгу
для управления классом Assembly:

      using System.Reflection; //For the Assembly class.

      В панели Properties (для Form1) на вкладке Events дважды щёлкаем по имени события Paint. Появившийся шаблон метода Form1_Paint после записи нашего кода принимает следующий вид.

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

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

      //We declare the object of class System.Drawing.Image

      //for a product:

      Image cheeseImage;

      //We load into the project the image files according

      //to such scheme:

      //We create an object myAssembly of the Assembly class

      //and appropriate to it

      //the link to the executed assembly of our application:

      static Assembly myAssembly = Assembly.GetExecutingAssembly();

      //We create the myAssemblyName object of

      //the System.Reflection.AssemblyName class and appropriate to

      //it the assembly name, which consists of a project name,

      //Version, Culture, PublicKeyToken:

      static AssemblyName myAssemblyName = myAssembly.GetName();

      //From the assembly name by means of the Name property

      //we select a string project name:

      static string myName_of_project = myAssemblyName.Name;

      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, 10, 20);

      }

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

      Build, Build Selection; Debug, Start Without Debugging.

      Появляется форма Form1 с изображением типа встроенного нами рисунка сыра cheese.jpg (рис. 4.1).

      Верхний левый угол изображения по отношению к верхнему левому углу экрана (где находится начало координат) расположен в соответствии с заданными нами координатами в строке кода (e.Graphics.DrawImage(myBitmap, 10, 20);).

      4.2. Методика анимации объекта

      Программа может рисовать теперь сыр на экране. Затем она должна перемещать сыр, неоднократно рисуя и перерисовывая изображение сыра в различных позициях. Если программа делает это достаточно быстро, создаётся иллюзия движения (анимация).

      Следующий пример кода создаёт метод updatePositions, который перемещает сыр. На данной стадии проектирования сыр будет только двигаться вправо и вниз (по осям координат “x” и “y”). Таким образом, добавляем в данный (или новый) проект такой код.

      Листинг 4.2. Изменение координат продукта.

      //Current abscissa of an object:

      int cx = 50;

      //Current ordinate of an object:

      int cy = 100;

      private void updatePositions()

      {

      cx++; //or cx = cx + 1;

      cy++; //or cy = cy + 1;

      }

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

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

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