Игра "Гонки" с использованием делегатов - 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();
    }
 
}

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


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

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

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