snikitin-de / BallGamesWinFormsApp

🎮 🎱 Три мини-проекта, написанные в процессе изучения технологии Windows Forms в рамках изучения рисования, движения объектов на форме и принципов ООП.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

🎮 BallGamesWinFormsApp

🎮 🎱 Три мини-проекта, написанные в процессе изучения технологии Windows Forms в рамках изучения рисования, движения объектов на форме и принципов ООП.

📁 CatchMeWinFormsApp

📄 Описание

❓ Правила игры

  1. Есть кнопка "Создать", которая создает на форме много разноцветных шариков разного размера, которые начинают двигаться в разные стороны и с разной скоростью.
  2. Есть кнопка "Остановить", которая останавливает все созданные шарики. После остановки шариков, выдаётся пользователю количество шариков, которые удалось поймать. Шарик пойман, если он полностью находится на форме.

🎮 Геймплей

Пример геймплея игры:

Пример геймплея игры

📁 CatchMeByMouseWinFormsApp

📄 Описание

❓ Правила игры

  1. Есть кнопка "Создать", которая создает на форме много разноцветных шариков разного размера, которые начинают двигаться в разные стороны и с разной скоростью.
  2. Клик левой кнопки мыши по шарику позволяет "поймать" соответствующий шарик.

Цель игры — "поймать" как можно больше шариков.

🎮 Геймплей

Пример геймплея игры:

Пример геймплея игры

📁 BilliardBallsWinFormsApp

📄 Описание

Шарики создаются в рандомном месте с рандомными цветами, размерами и скоростями. Шарики отталкиваются от стенок и генерируют событие столкновения с соответствующей стенкой.

💻 Работа программы

Пример работы программы:

Пример работы программы

🔧 Техническая часть

  • Проект реализован на платформе Windows Forms.
  • Выполнен с соблюдением принципов ООП.
  • Реализована работы с событиями.

🧩 Архитектура

Структура каталога решения:

Структура каталога решения

Проект "Common" является общей библиотекой классов для следующих проектов:

Библиотека содержит общий класс "Ball" от которого наследуются другие шарики со своими особенностями.

📝 Работа с событиями

В классе бильярдного шарика "BilliardBall" реализована работа с событиями:

 public class BilliardBall : MoveRandomPointBall
 {
     private int ballSize = 50;
     public event EventHandler<HitEventArgs> OnHitted;

     public BilliardBall(int borderX, int borderY) : base(borderX, borderY)
     {
         diameter = ballSize;
     }

     public override void Move()
     {
         base.Move();

         if (centerPoint.X + speed.VX < LeftSide())
         {
             speed.VX = -speed.VX;
             OnHitted.Invoke(this, new HitEventArgs(Side.Left));
         }
         else if (centerPoint.X + speed.VX > RightSide())
         {
             speed.VX = -speed.VX;
             OnHitted.Invoke(this, new HitEventArgs(Side.Right));
         }
         else if (centerPoint.Y + speed.VY < TopSide())
         {
             speed.VY = -speed.VY;
             OnHitted.Invoke(this, new HitEventArgs(Side.Top));
         }
         else if (centerPoint.Y + speed.VY > BottomSide())
         {
             speed.VY = -speed.VY;
             OnHitted.Invoke(this, new HitEventArgs(Side.Bottom));
         }
     }
 }

Если шарик столкнулся с одной из стенок, то генерируется событие OnHitted в аргументах которого передаётся стенка с которой ударился шарик.

Класс HitEventArgs:

public class HitEventArgs
{
    public Side Side;

    public HitEventArgs(Side side)
    {
        Side = side;
    }
}

В MainForm происходит подписывание на событие OnHitted, при возникновении которого происходит увеличение значения счётчика количества соударений с соответствующей стенкой:

ball.OnHitted += Ball_OnHitted;

About

🎮 🎱 Три мини-проекта, написанные в процессе изучения технологии Windows Forms в рамках изучения рисования, движения объектов на форме и принципов ООП.


Languages

Language:C# 100.0%