Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ КПК ΠΈ смартфонов Π½Π° .NET Compact FrameworkΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 38

Автор АлСксандр Климов

Для отслСТивания ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Π° ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚ столкновСния. МоТно Π±Ρ‹Π»ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив, содСрТащий ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Π°, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ структурой, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π² листингС 11.24.

Листинг 11.24

/// <summary>

/// ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ ΠΈ состояниС ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Π°

/// </summary>

struct tomato {

 public Rectangle rectangle;

 public bool visible;

}

ИспользованиС структуры ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Π° ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈ столкновСнии сыра с ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠΌ ΠΎΠ²ΠΎΡ‰ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΡ‡Π΅Π·Π½ΡƒΡ‚ΡŒ, позволяя Ρ‚Π΅ΠΌ самым ΠΈΠ³Ρ€ΠΎΠΊΡƒ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡ‡ΠΊΠΈ.

Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ²

НуТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ² для размСщСния Π½Π° экранС, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 11.25.

Листинг 11.25

/// <summary>

/// РасстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Π°ΠΌΠΈ.

/// УстанавливаСм ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для ΠΈΠ³Ρ€Ρ‹

/// </summary>

private int tomatoSpacing = 4;


/// <summary>

/// Высота, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ рисуСтся ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€

/// Высота ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² процСссС ΠΈΠ³Ρ€Ρ‹

/// НачинаСм с Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части экрана

/// </summary>

private int tomatoDrawHeight = 4;


/// <summary>

/// ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ² Π½Π° экранС.

/// УстанавливаСтся ΠΏΡ€ΠΈ стартС ΠΈΠ³Ρ€Ρ‹

/// ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ initialiseTomatoes.

/// </summary>

private int noOfTomatoes;


/// <summary>

/// ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΈ всСх ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ² Π½Π° экранС

/// </summary>

private tomato[] tomatoes;

ΠŸΡ€ΠΈ услоТнСнии ΠΈΠ³Ρ€Ρ‹ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ всС Π½ΠΈΠΆΠ΅ ΠΈ Π½ΠΈΠΆΠ΅, заставляя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ tomatoDrawHeight Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° эту Π·Π°Π΄Π°Ρ‡Ρƒ. Для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ мСстополоТСния ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ initialiseTomatos, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ² ΠΈ экрана. Π•Π΅ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 11.26.

Листинг 11.26

/// <summary>

/// ВызываСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для установки всСх ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ²

/// </summary>

private void initialiseTomatoes() {

 noOfTomatoes =

  (this.ClientSize.Width - tomatoSpacing) /

  (tomatoImage.Width + tomatoSpacing);

 // создаСм массив, содСрТащий ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ²

 tomatoes = new tomato[noOfTomatoes];

 // ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° x ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Π°

 int tomatoX = tomatoSpacing / 2;

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

  tomatoes[i].rectangle =

   new Rectangle(tomatoX, tomatoDrawHeight,

   tomatoImage.Width, tomatoImage.Height);

   tomatoX = tomatoX + tomatoImage.Width + tomatoSpacing;

 }

}

Π’Ρ‹Π·ΠΎΠ² этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° слСдуСт Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² конструкторС Ρ„ΠΎΡ€ΠΌΡ‹. ΠœΠ΅Ρ‚ΠΎΠ΄ подсчитываСт количСство ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ², создаСт массив структур ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Π° Π½Π° экранС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡ… Π½Π°Π΄ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π² ΠΎΠ΄ΠΈΠ½ ряд. Код, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° эти дСйствия, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листинг 11.27.

Листинг 11.27

/// <summary>

/// ВызываСтся для создания ряда ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ².

/// </summary>

private void placeTomatoes() {

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

  tomatoes[i].rectangle.Y = tomatoDrawHeight;

  tomatoes[i].visible = true;

 }

}

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ стартС ΠΈΠ³Ρ€Ρ‹, Π° послС этого ΠΎΠ½ запускаСтся послС уничтоТСния ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ ряда Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ². ΠœΠ΅Ρ‚ΠΎΠ΄ обновляСт высоту с Π½ΠΎΠ²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ изобраТСния Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ² Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ. Π’Ρ‹Π·ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ размСщаСтся Π² конструкторС Ρ„ΠΎΡ€ΠΌΡ‹.

Π˜Ρ‚Π°ΠΊ, сСйчас ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ всСх Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. НуТно вывСсти ΠΈΡ… изобраТСния ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€ΠΎΠ² Π½Π° экран. Код, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² листингС 11.28, встраиваСтся Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события Form1_Paint.

Листинг 11.28

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

 if (tomatoes[i].visible) {

  g.DrawImage(tomatoImage, tomatoes[i].rectangle.X, tomatoes[i].rectangle.Y);

 }

}

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° страница пСрСрисовываСтся, этот ΠΊΠΎΠ΄ пСрСрисовываСт всС Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹. ЕстСствСнно, для отобраТСния всСх Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ рСалистичнСС, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ высоту Π±Π°Ρ‚ΠΎΠ½Π° Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊ ΠΌΠΎΠ³ сразу ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² ΠΈΠ³Ρ€Ρƒ с Π±ΠΎΠ»Π΅Π΅ подходящСй ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 11.29.

Листинг 11.29

breadRectangle = new RectanglΠ΅(

 (this.ClientSize.Width - breadImage.Width) / 2,

 this.ClientSize.Height β€” breadImage.Height,

 breadImage.Width, breadImage.Height);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ³Ρ€Π° выглядит Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 11.7

Рис. 11.7. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΈΠ³Ρ€Ρ‹

Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ²

К соТалСнию, Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΈ столкновСнии сыра с ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Π°ΠΌΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ происходит. Π‘ΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π½Π°Π΄ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠ΄Π°, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ updatePosition, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 11.30.

Листинг 11.30

// Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅ΠΌ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Ρ‹ ΠΏΡ€ΠΈ столкновСнии с сыром

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

 if (!tomatoes[i].visible) {

  continue;

 }

 if (cheeseRectangle.IntersectsWith(tomatoes[i].rectangle)) {

  // прячСм Ρ‚ΠΎΠΌΠ°Ρ‚

  tomatoes[i].visible = false;

  // отраТаСмся Π²Π½ΠΈΠ·

  goingDown = true;

  // Ρ‚ΠΎΠ»ΡŒΠΊΠΎ удаляСм ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€

  break;

 }

}

Код выполняСтся, ΠΊΠΎΠ³Π΄Π° сыр двигаСтся Π²Π²Π΅Ρ€Ρ…. ΠŸΡ€ΠΈ этом ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Π° ΠΈ куска сыра ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° IntersectsWith. Если ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ столкновСниС сыра с Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠΌ, Ρ‚ΠΎ Ρ‚ΠΎΠΌΠ°Ρ‚ дСлаСтся Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ, для Ρ‡Π΅Π³ΠΎ свойству VisiblΠ΅ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ False. ΠŸΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ пСрСрисовкС экрана этот Ρ‚ΠΎΠΌΠ°Ρ‚ Π½Π΅ появится Π½Π° экранС. Π‘Ρ‹Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΡΠΊΠ°ΠΊΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΏΠΎΠΌΠΈΠ΄ΠΎΡ€Π°, ΠΊΠ°ΠΊ ΠΎΡ‚ стСнок ΠΈΠ»ΠΈ ΠΎΡ‚ Π±Π°Ρ‚ΠΎΠ½Π°.

Π‘Ρ‡Π΅Ρ‚ ΠΈΠ³Ρ€Ρ‹

Π˜Ρ‚Π°ΠΊ, это ΡƒΠΆΠ΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΈΠ³Ρ€Ρƒ. Но ΠΏΠΎΠΊΠ° Π΅ΠΉ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НуТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ подсчСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈΠ³Ρ€Ρ‹ β€” Π½Π΅ самая слоТная Π·Π°Π΄Π°Ρ‡Π°. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ тСкст Π½Π° экран с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DrawString. Но ΠΏΡ€ΠΈ этом потрСбуСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚, ΠΊΠΈΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° тСкста. ΠΠ°Ρ‡Π°Ρ‚ΡŒ стоит со ΡˆΡ€ΠΈΡ„Ρ‚Π°. Π•Π³ΠΎ Π½Π°Π΄ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² конструкторС Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² листингС 11.31.

Листинг 11.31

/// <summary>

/// Π¨Ρ€ΠΈΡ„Ρ‚ для Π²Ρ‹Π²ΠΎΠ΄Π° счСта

/// </summary>

private Font messageFont = null;


// Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ для ΠΏΠΎΠΊΠ°Π·Π° Π½Π°Π±Ρ€Π°Π½Π½Ρ‹Ρ… ΠΎΡ‡ΠΊΠΎΠ²

messageFont = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ тСкст. НуТно Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 15 пиксСлов Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части экрана для отобраТСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ счСта. ΠŸΡ€ΠΈ этом потрСбуСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²ΠΈΠ³Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ Π² эту ΠΎΠ±Π»Π°ΡΡ‚ΡŒ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для хранСния этой высоты, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ, Ссли понадобится. ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ инициализируСтся ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 11.32.

Листинг 11.32

/// <summary>

/// ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ счСт ΠΈΠ³Ρ€Ρ‹

/// </summary>

private Rectangle messageRectangle;


/// <summary>

/// Высота ΠΏΠ°Π½Π΅Π»ΠΈ для счСта.

/// </summary>

private int scoreHeight = 15;


// УстанавливаСм Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° для счСта

messageRectangle = new RectanglΠ΅(0, 0, this.ClientSize.Width, scoreHeight);

Если ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ слишком ΠΌΠ°Π» для тСкста, Ρ‚ΠΎ тСкст Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π΅Π·Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π΄Π°Π½Ρ‹ ΡˆΡ€ΠΈΡ„Ρ‚ ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ для отобраТСния тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΡ€Π° ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ кисти. Выбирая Ρ‚ΠΈΠΏ кисти, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ†Π²Π΅Ρ‚ ΠΈ ΡƒΠ·ΠΎΡ€ для рисования, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 11.33.

Листинг 11.33

/// <summary>

/// ΠšΠΈΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для отобраТСния сообщСний

/// </summary>

private SolidBrush messageBrush;


// Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΡ€Π°ΡΠ½ΡƒΡŽ ΠΊΠΈΡΡ‚ΡŒ

messageBrush = new SolidBrush(Color.Red);

ВСкст счСта ΠΈΠ³Ρ€Ρ‹ Π½Π° экранС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ красным Ρ†Π²Π΅Ρ‚ΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти сообщСниС Π½Π° экран, понадобится Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ DrawString Π² событии Form1_Paint, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 11.34.

Листинг 11.34

/// <summary>

/// Π‘Ρ‚Ρ€ΠΎΠΊΠ° для Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний

/// </summary>

private string messageString = "НаТмитС Π‘Ρ‚Π°Ρ€Ρ‚ для Π½Π°Ρ‡Π°Π»Π° ΠΈΠ³Ρ€Ρ‹";

g.DrawString(messageString, messageFont, messageBrush, messageRectangle);

Бозданная пСрСмСнная messageString примСняСтся для Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний Π½Π° экран Π²ΠΎ врСмя ΠΈΠ³Ρ€Ρ‹.

Π’Π΅Π΄Π΅Π½ΠΈΠ΅ счСта

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ счСтчик столкновСния Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ² Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ updatePosition. Код для этого ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 11.35.

Листинг 11.35

/// <summary>

/// Π‘Ρ‡Π΅Ρ‚ Π² ΠΈΠ³Ρ€Π΅

/// </summary>

private int scoreValue = 0;