Игра "Гонки" с использованием делегатов - C#
Формулировка задачи:
1. В игре использовать несколько классов автомобилей (спортивные, легковые, грузовые и автобусы).
2. Разработать методы и свойства для каждого из определяемых классов.
3. Реализовать игру в виде класса, который с помощью делегатов управляет автомобилями в процессе игры.
Решение задачи: «Игра "Гонки" с использованием делегатов»
textual
Листинг программы
delegate void MoveAction(); // делегат перемещения
delegate void PosSetter(int Position); // установка позиции
delegate void FinishAction(object Winner); // обратная связь
class Game
{
protected bool isGameStarted = false;
public MoveAction Move;
public PosSetter MoveTo;
public object Winner;
public void Run()
{
// перемещаем всех на старт
MoveTo(0);
// тикаем всех вперед пока кто-нибудь не приедет к финишу
isGameStarted = true;
while (isGameStarted)
{
Move();
System.Threading.Thread.Sleep(100);
Console.Clear();
}
}
public void OnFinis(object Winner)
{
// кто-то приехал к финишу
isGameStarted = false;
this.Winner = Winner;
}
}
// Абстракный класс машинок (можно без него)
abstract class MovableObject
{
public FinishAction Finish;
public string Name;
int _pos;
public int Position
{
get { return _pos; }
set {
_pos = value;
Console.WriteLine(this + " на позиции " + _pos);
if (_pos >= 100) Finish(this);
}
}
public override string ToString()
{
return Name;
}
public void JoinGame(Game Game)
{
// Подписываемся на игру
Game.Move += this.Move;
Game.MoveTo += this.MoveTo;
Finish = Game.OnFinis;
}
public abstract void Move();
public void MoveTo(int Position)
{
this.Position = Position;
}
}
class Car: MovableObject
{
public int Speed;
public override void Move()
{
Position += Speed;
}
}
class RandomCar: MovableObject
{
Random rnd = new Random();
public override void Move()
{
Position += rnd.Next(6) - 2;
}
}
static class TaskClass
{
static void Main()
{
// Создаем игру
Game game = new Game();
// Создаем машинки
MovableObject car1 = new Car() { Name = "car1", Speed = 2 };
MovableObject car2 = new Car() { Name = "car2", Speed = 4 };
MovableObject r = new RandomCar() { Name = "Коняшка" };
// Подписываемся на участие в игре
car1.JoinGame(game);
car2.JoinGame(game);
r.JoinGame(game);
// Запуск игры
game.Run();
// Печатаем победителя
Console.WriteLine("Победил " + game.Winner);
Console.ReadLine();
}
}