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

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

СКАЧАТЬ для записи очков messageRectangle, причём в этот прямоугольник летающие объекты не должны залетать. На рис. 5.9 мы получили 20 очков за 2 сбитых помидора, а на 5.10 – 50 очков за 5 сбитых помидоров.

      За каждый сбитый помидор мы можем начислить игроку любое количество очков, например, 10 очков в строке:

      scoreValue = scoreValue + 10;

      Новые очки сразу же выводятся на экран, информируя игрока.

      Рис. 5.9. Получили 20 очков за 2 сбитых помидора. Рис. 5.10. Получили 50 очков.

      Приступим к программной реализации методики подсчёта очков в игре в нашем базовом учебном проекте.

      Сначала мы должны опустить ряд помидоров пониже, чтобы освободить место вверху для записи очков, поэтому вместо 4 записываем ординату, равную, например, 20:

      int tomatoDrawHeight = 20;

      В любом месте класса Form1 добавляем новые переменные для счётчика очков.

      Листинг 5.8. Новые переменные.

      // Font for score messages.

      Font messageFont = null;

      // Rectangle for score display.

      Rectangle messageRectangle;

      // Height of the score panel.

      int scoreHeight = 20;

      // Brush used to draw the messages.

      SolidBrush messageBrush;

      // The string, which is drawn as the user message.

      string messageString = "Score : 0";

      // Score in a game.

      int scoreValue = 0;

      Приведённый выше код в теле метода Form1_Paint заменяем на тот, который дан на следующем листинге.

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

      private void Form1_Paint(object sender, PaintEventArgs e)

      {

      //If the buffer empty, we create the new buffer:

      if (backBuffer == null)

      {

      backBuffer = new Bitmap(this.ClientSize.Width,

      this.ClientSize.Height);

      }

      //We create a object of class Graphics from the buffer:

      using (Graphics g = Graphics.FromImage(backBuffer))

      {

      //We clear the form:

      g.Clear(Color.White);

      //We draw the images of objects in the backBuffer:

      g.DrawImage(cheeseImage, cx, cy);

      g.DrawImage(breadImage, bx, by);

      for (int i = 0; i < tomatoes.Length; i++)

      {

      if (tomatoes[i].visible)

      {

      g.DrawImage(tomatoImage,

      tomatoes[i].rectangle.X,

      tomatoes[i].rectangle.Y);

      }

      }

      //We write the player's points:

      g.DrawString(messageString, messageFont, messageBrush,

      messageRectangle);

      }

      //We draw the image on the Form1:

      e.Graphics.DrawImage(backBuffer, 0, 0);

      } //End of the method Form1_Paint.

      Приведённый выше код в теле метода Form1_Load (для загрузки файлов изображений игровых объектов) заменяем на тот, который дан на следующем листинге.

      Листинг 5.10. Метод для загрузки файлов изображений.

      private void Form1_Load(object sender, EventArgs e)

      {

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

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

      //by means of ResourceStream:

      cheeseImage =

      new Bitmap(myAssembly.GetManifestResourceStream(

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

      breadImage =

      new Bitmap(myAssembly.GetManifestResourceStream(

      myName_of_project + "." + "bread.JPG"));

      //We initialize the rectangles, described around objects:

      cheeseRectangle = new Rectangle(cx, cy,

      cheeseImage.Width, СКАЧАТЬ