Движение фигур - вопрос оптимальной прорисовки - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Нужно написать мини-игру. Суть игры простая на экране три прямоугольника-коробки в них сверху падают круги разного цвета, так же они могут выпадать из коробки вниз, по окончанию игрок должен ответить на ряд вопросов (что-то вроде "Сколько синих шаров в третей коробке?" или "Сколько жёлтых и зелёных шаров в первой коробке?") за каждый правильный ответ игрок получает определённое количество очков. Теперь о вопросе подробней. Что касается реализации математической части игры и вопросов в конце сделать это не составляет труда, а вот с кругами проблема. Я не смог придумать не чего лучше как постоянно перерисовывать PictureBox с помощью Refresh к тому же надо что бы круги уходили за коробки, а не просто рисовалось всё одной кучей P.S. Не обязательно именно писать код, достаточно будет ссылки на статью или на проект где описывается движение фигур или отрывок чужого кода, в общем хоть что-то, а то своими силами нечего найти не удалось

Решение задачи: «Движение фигур - вопрос оптимальной прорисовки»

textual
Листинг программы
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Linq;
 
namespace WindowsFormsApplication318
{
    public partial class Form1 : Form
    {
        private Ball ball;
        private Box box = new Box();
 
        public Form1()
        {
            InitializeComponent();
 
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
 
            box = new Box {Bounds = new RectangleF(Width/2 - 50, Height/2, 100, 30)};
 
            Application.Idle += delegate { Invalidate(); };
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            if (ball == null || ball.Location.Y > Height)
            {
                ball = new Ball();
                ball.Location = new PointF(Width/2, 0);
            }
 
            if (box.Bounds.Contains(ball.Location))
                ball.Speed = 2;
 
            ball.Update(0.01f);
 
            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
            e.Graphics.FillEllipse(Brushes.Red, ball.Location.X - ball.Radius, ball.Location.Y - ball.Radius, ball.Radius * 2, ball.Radius * 2);
            e.Graphics.FillRectangle(Brushes.Blue, box.Bounds);
        }
    }
 
    class Ball
    {
        public PointF Location { get; set; }
        public float Radius { get; set; }
        public float Speed { get; set; }
 
        public Ball()
        {
            Radius = 10;
        }
 
        public void Update(float dt)
        {
            Speed += 9.8f * dt;
            Location= new PointF(Location.X, Location.Y + Speed * dt);
        }
    }
 
    class Box
    {
        public RectangleF Bounds;
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.545 из 5
Похожие ответы