C# Простейшая графическая игра WinForms
C# Самая простая графическая игра WinForms
Ссылка на GitFlic проект aSimpleGame
Создаем форму Form1
Копируем код:
// После клика на форме // Создаем черный кружок и прямоугольник // Кружок двигается по форме отражаясь от верхнего и боковых краев // От прямоугольника кружок отражается только вверх // Если кружок выходит за пределы формы вниз, то игра прекращается public partial class Form1 : Form { private int radius = 10; // Количество пикселей, задающих радиус круга и размеры прямоугольника private int x; // Текущее положение круга private int y; // Текущее положение круга private int xDirection; // Направление движения и скорость круга - минус влево private int yDirection; // Направление движения и скорость круга - минус вверх private readonly SolidBrush brush = new(Color.Black); // Цвет заливки private readonly System.Windows.Forms.Timer timer; // Таймер, задающий скорость обновления public Form1() { InitializeComponent(); // Инициализация компонентов формы this.components = new System.ComponentModel.Container(); // Так как компонентов нет, создадим контейнер вручную timer = new System.Windows.Forms.Timer(this.components); // Таймер добавим в компоненты формы чтобы автоматически удалился timer.Interval = 15; // Интервал обновления задает скорость обновления формы timer.Tick += new System.EventHandler(timerTick); // Метод, который будет вызываться каждый тик таймера this.Click += new System.EventHandler(this.Form1_Click); // При клике на форме будем запускать или отключать игру this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); // Метод отрисовки SetStyle( ControlStyles.OptimizedDoubleBuffer // Свойства формы, | ControlStyles.AllPaintingInWmPaint // задающие параметры обновления | ControlStyles.UserPaint // и отрисовки , true ); UpdateStyles(); } private void initGame() // Начало игры { Point point = this.PointToClient(Cursor.Position); // Считываем позицию курсора мыши x = point.X; y = point.Y - radius; xDirection = -1; // Направление влево yDirection = -1; // вверх Cursor.Hide(); // Скрываем курсор мыши timer.Enabled = true; // Включаем обновление формы } private void stopGame() // Остановка игры { Cursor.Show(); // Показываем курсор мыши timer.Enabled = false; // Отключаем обновление формы } private void Form1_Click(object? sender, EventArgs e) // Клик на форме { if (timer.Enabled) // Если таймер запущен { this.stopGame(); // Останавливаем игру } else { this.initGame(); // иначе запускаем } } private void Form1_Paint(object? sender, PaintEventArgs e) // Отрисовка формы { ; if (timer.Enabled) // Если таймер запущен { if (y > this.Height) // Круг вышел за пределы формы вниз { this.stopGame(); // Останавливаем игру } else { Graphics g = e.Graphics; // На чем будем рисовать Point point = this.PointToClient(Cursor.Position);// Прямоугольник в позицию курсора g.FillEllipse(brush, new Rectangle(x - radius, y - radius, 2 * radius, 2 * radius)); g.FillRectangle(brush, new Rectangle(point.X - 5 * radius, point.Y, 10 * radius, radius)); } } } private void timerTick(object? sender, EventArgs e) // Запуск обновления формы { if (timer.Enabled) // Если таймер запущен { x += xDirection; // Двигаем кружок y += yDirection; if ( x < radius || x > this.Width - radius - 16 ) { xDirection *= -1; // Отражаем влево вправо } if (y < radius) { yDirection *= -1; // Отражаем сверху } if (yDirection > 0) // Если летит вниз { Point point = this.PointToClient(Cursor.Position); // Текущая позиция курсора мыши if ( x < point.X + 5*radius + radius // задает положение && x > point.X - 5*radius - radius // прямоугольника && y < point.Y + radius // Проверяем прикосновение && y > point.Y - radius ) { yDirection = -1; // Вверх y = point.Y - radius; // Коррекция положения кружка } } this.Refresh(); // Запуск обновления формы } } }