.NET Самолет Симулятор - PullRequest
       17

.NET Самолет Симулятор

0 голосов
/ 03 декабря 2009

Название варианта использования: начать моделирование самолета

Область применения: Симулятор полета самолета

Уровень: Цель пользователя

Основной актер: Пользователь

  1. Пользователь запускает симулятор самолета
  2. Спросите пользователя о максимальной высоте (потолок)
  3. Запросите минимальную высоту (этаж)
  4. Симулятор самолета начинается с позиции в воздухе, без взлета или посадки
  5. Самолет поднимается на максимальную высоту
  6. Самолет снижается до минимальной высоты
  7. Повторяйте шаги 5 и 6, пока пользователь не закончит моделирование

Вот мой вопрос. В .NET какой таймер лучше всего подходит для класса Airplane, это должен быть таймер Windows Forms, серверный таймер или таймер потоков? Я пытаюсь заставить самолет подниматься / опускаться со скоростью, определяемой интервалом таймера. Надеюсь, что это имеет смысл.

Мне нужно кое-что прояснить, пожалуйста, помогите! Вот мой класс

с использованием системы; использование System.Timers;

пространство имен ConsoleApplication1

{

 class Airplane
{
    public Airplane()
    {
        _currentAltitude = 0;
        Timer _timer = new Timer();            
        _timer.Start();
        Console.WriteLine("airplane started");
        Console.ReadKey();
    }

    public const int MAXALLOWABLEHEIGHT = 30000;
    public const int MINALLOWABLEHEIGHT = 15000;

    private int _currentAltitude;        

    public int CurrentAltitude
    {
        get
        {
            return _currentAltitude;
        }
        set
        {
            _currentAltitude = value;
        }
    }


    private bool airplaneIsDead = false;

    // Define the delegate types
    public delegate void GoneTooHigh(string msg);
    public delegate void GoneTooLow(string msg);

    // Define member variables of the above delegate types
    private GoneTooHigh MaxHeightViolationList;
    private GoneTooLow MinHeightVioloationList;



    // Add members to the invocation lists using helper methods
    public void OnGoneTooHigh(GoneTooHigh clientMethod)
    {
        MaxHeightViolationList = clientMethod;            
    }

    public void OnGoneTooLow(GoneTooLow clientMethod)
    {
        MinHeightVioloationList = clientMethod;
    }


    void _timer_Elapsed(object sender, ElapsedEventArgs e)
    {                        
        if (_currentAltitude < MAXALLOWABLEHEIGHT)
        {               
            _currentAltitude++;                  
        }
        else
        {
            _currentAltitude--;                
        }            
    }


}

}

Ответы [ 2 ]

0 голосов
/ 03 декабря 2009

Поскольку это консольное приложение, таймер Windows Forms действительно не будет работать.

Я бы пошел с таймером потоков.

Обратите внимание, что многопоточная синхронизация в консольном приложении может быть немного ... глупой. Ваш основной поток будет просто сидеть в бесконечном цикле, почти ничего не делая, пока не завершится другой поток.

0 голосов
/ 03 декабря 2009

Вы должны использовать System.Timers.Timer по причинам, описанным здесь:

http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

По сути, вы находитесь во власти остальной части вашего кода Winforms с элементом управления Таймером Winforms, и он не даст вам обязательно равные интервалы.

...