Перемещение изображения по форме - 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; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д