Перемещение изображения по форме - C#

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

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

Здравствуйте. Помогите пожалуйста решить такую задачу: Существуют несколько персонажей компьютерной игры, каждый из которых представлен совокупностью геометрических фигур на плоскости. Каждый персонаж может перемещаться влево, вправо, вверх и вниз. Каждый персонаж должен быть представлен отдельным классом. Каждому из движений персонажа должно соответствовать событие, с помощью которого извещаются все фигуры, из которых состоит персонаж, о том, что происходит перемещение. Для указания расстояния, на которое производится перемещение, использовать параметры события. В классе каждой фигуры реализовать метод-обработчик перемещения этой фигуры. Реализовать не менее двух экземпляров одного персонажа, состоящего из не менее 5 фигур. Реализовать перемещение обоих персонажей сначала влево на 10 единиц координат, затем вправо на 15 единиц координат, затем вверх на 20 единиц координат. Для каждого движения вывести на консоль информацию о всех фигурах, значениях их координат и персонаже, к которому относится данная фигура. Вывод этой информации производить из обработчика события перемещения фигуры. Есть классы фигур:
    //Точка
    abstract class Point {
        protected int xCo; //Координата по оси X
        protected int yCo; //Координата по оси Y
 
        public Point()
        {
            xCo = 0;
            yCo = 0;
        }
 
        public int xCoordinate
        {
            set { xCo = value; }
            get { return xCo; }
        }
        public int yCoordinate
        {
            set { yCo = value; }
            get { return yCo; }
        }
 
        //Движение фигур
        public virtual void move(int x, int y)
        {
            xCo += x;
            yCo += y;
        }
    }
 
    //Отрезок
    class Line : Point {
        private int x1Co;
        private int y1Co;
 
        public Line()
        {
            x1Co = 5;
            y1Co = 0;
        }
 
        public int x1Coordinate
        {
            set { x1Co = value; }
            get { return x1Co; }
        }
        public int y1Coordinate
        {
            set { y1Co = value; }
            get { return y1Co; }
        }
        public override void move(int x, int y)
        {
            base.move(x, y);
            x1Co += x;
            y1Co += y;
        }
    }
 
    //Прямоугольник
    class Rectangle : Point {
        protected int x1Co;
        protected int y1Co;
 
        public Rectangle()
        {
            x1Co = 5;
            y1Co = 2;
        }
 
        public int x1Coordinate
        {
            set { x1Co = value; }
            get { return x1Co; }
        }
        public int y1Coordinate
        {
            set { y1Co = value; }
            get { return y1Co; }
        }
 
        public override void move(int x, int y)
        {
            base.move(x, y);
            x1Co += x;
            y1Co += y;
        }
    }
 
    //Квадрат
    class Square : Rectangle {
 
        public Square()
        {
            x1Co = 5;
            y1Co = 0;
        }
    }
 
    //Круг
    class Circle : Point {
        private int r;
 
        public Circle()
        {
            r = 5;
        }
 
        public int Radius
        {
            set { r = value; }
            get { return r; }
        }
    }
В какую сторону дальше копать? Пытаюсь вникнуть в суть делегатов и ничего не получается. Натолкните пожалуйста на мысль.

Решение задачи: «Перемещение изображения по форме»

textual
Листинг программы
    class MovingEventArgs : EventArgs {
        public Apex apex;
        public int points;
 
        public MovingEventArgs(int points, Apex apex) {
            this.apex = apex;
            this.points = points;
        }
    }
 
    delegate void MoveEventHandler(object sender, MovingEventArgs e);
 
    enum Apex {
        Left, Rihght, Top, Down
    }
 
    interface IMovable {
        void Move(int points, Apex apex);
        string Name { get; }
        Person Person { get; set; }
        event MoveEventHandler OnMove;
    }
 
    abstract class Shape : IMovable {
        Person person;
        Point location;
        string name;
 
        public event MoveEventHandler OnMove;
 
        public string Name {
            get { return this.name; }
        }
 
        public void Move(int points, Apex apex) {
            switch (apex) {
                case Apex.Left:
                    this.location.x -= points;
                    break;
                case Apex.Rihght:
                    this.location.x += points;
                    break;
                case Apex.Top:
                    this.location.y -= points;
                    break;
                case Apex.Down:
                    this.location.y += points;
                    break;
            }
            if (OnMove != null) {
                OnMove(this, new MovingEventArgs(points, apex));
            }
 
        }
 
        public Person Person {
            get {
                return this.person;
            }
            set {
                this.person = value;
            }
        }
 
        public Shape(string name, Point location) {
            this.location = location;
            this.name = name;
        }
    }
 
    class Person {
        List<IMovable> shapes;
        public Person(List<IMovable> shapes) {
            if (this.shapes == null) {
                this.shapes = new List<IMovable>();
                foreach (IMovable item in shapes) {
                    this.AddShape(item);
                }
            }
        }
 
        public void AddShape(IMovable shape) {
            this.shapes.Add(shape);
            shape.OnMove += new MoveEventHandler(shape_OnMove);
        }
 
        void shape_OnMove(object sender, MovingEventArgs e) {
            foreach (IMovable item in this.shapes) {
                if (item != (IMovable)sender) {
                    item.Move(e.points, e.apex);
                }
            }
        }
 
        public void RemoveByName(string name) {
            for (int i = 0; i < this.shapes.Count; i++) {
                if (this.shapes[i].Name == name) {
                    this.shapes.Remove(this.shapes[i]);
                    break;
                }
            }
        }
    }

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


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

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

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