2009-12-03 4 views
0

Utiliser le nom de cas: Lancer la simulation d'avion.NET Avion Simulator

Portée: Avion Flight Simulator

Niveau: User but

Acteur principal: utilisateur

  1. commence l'utilisateur simulateur d'avion
  2. Demander à l'utilisateur une hauteur maximale (plafond)
  3. Demander à l'utilisateur pour une hauteur minimum (plancher)
  4. simulateur d'avion commence à partir d'une position en vol, aucun décollage ou d'atterrissage
  5. avion monte à la hauteur maximale
  6. avion descend à la hauteur minimun
  7. Repeate les étapes 5 et 6 , jusqu'à ce que l'utilisateur termine la simulation

Voici ma question. Dans .NET, quel minuteur correspond le mieux à la classe Avion, devrait-il s'agir d'un minuteur Windows Forms, d'un minuteur basé sur un serveur ou d'un minuteur Threading? J'essaie de faire monter/descendre l'avion à une vitesse déterminée par l'intervalle de la minuterie. J'espère que cela a du sens.

J'ai besoin d'éclaircissements à ce sujet, s'il vous plaît, aidez-moi! Voici ma classe

using System; en utilisant System.Timers;

espace de noms 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--;     
     }    
    } 


} 

}

Répondre

0

Vous devez utiliser System.Timers.Timer, pour les raisons décrites ici:

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

Fondamentalement, vous sont à la merci du reste de votre code Winforms avec le contrôle Winforms Timer, et il ne vous donnera pas nécessairement des intervalles égaux.

+0

Je ne suis pas nécessairement préoccupé par des intervalles de temps égaux. Mon objectif est de «simuler» un «taux d'augmentation ou de diminution d'altitude». Mon but est de retarder l'augmentation ou la diminution. Voir ma question de suivi pour plus de clarification, http://stackoverflow.com/questions/1866026/model-view-seperation-airplane-simulator – dannyrosalex

0

Puisqu'il s'agit d'une application console, une minuterie Windows Forms ne fonctionnera pas vraiment.

Je voudrais aller avec minuterie Threading. Notez que le timing multithread dans une application console peut être un peu ... stupide. Votre thread principal va juste s'asseoir dans une boucle infinie ne faisant presque rien jusqu'à ce que l'autre thread se termine.

+0

J'ai l'intention de faire de cette application soit WPF ou Silverlight. J'essaie d'obtenir une bonne séparation Model-View. Voir ma question de suivi pour plus de clarification, http://stackoverflow.com/questions/1866026/model-view-seperation-airplane-simulator – dannyrosalex