Module météo (nurmite)

Contenu du snippet

Voici mon deuxième essai de module, ici pour la météo. Pour utuiliser ce module, il faut commencer par l'initialiser avec la procédure idoine. Ensuite, à chaque cycle on appelle la procédure CycleMeteo() qui se charge de faire changer les conditions climatiques.

Euh, j'ai modifié le code juste pour l'énumération des directions... je l'ai encore modifié pour ôter quelques bugs après tests...

Source / Exemple :


'Directions possible (8)
Const Nord = 0
Const NE = 1
Const Est = 2
Const SE = 3
Const Sud = 4
Const SO = 5
Const Ouest = 6
Const NO = 7

Public Enum Direction
    Nord
    NE
    Est
    SE
    Sud
    SO
    Ouest
    NO
End Enum
 
'Période maximale possible
Const MaxPeriode = 511

Public Type Meteo
    Wind_Speed As Integer
    Wind_Direction As Direction
    Light As Boolean
    Rain As Boolean
End Type

Private Periode_DayNight As Integer
Private Periode_Rain As Integer

Public MapMeteo As Meteo

Public Sub InitializeMeteo(Alea As Boolean, Optional WindSpeed As Integer, Optional WindDirection As Direction, Optional Light As Boolean, Optional Rain As Boolean, Optional PeriodeDayNight As Integer, Optional PeriodeRain As Integer)
    'alea permet de générer des conditions climatiques aléatoires
    If Alea = True Then
        'initialise le générateur de nombres aléatoires.
        Randomize
        MapMeteo.Wind_Speed = Int(Rnd * 11)
        MapMeteo.Wind_Direction = Int(Rnd * 8)
        If Int(Rnd * 2) = 1 Then MapMeteo.Light = True Else MapMeteo.Light = False
        If Int(Rnd * 2) = 1 Then MapMeteo.Rain = True Else MapMeteo.Rain = False
        Periode_DayNight = Int(Rnd * MaxPeriode + 1)
        Periode_Rain = Int(Rnd * MaxPeriode + 1)
    Else
        'dans le cas contraire, on utilise les paramètres optionnels
        MapMeteo.Wind_Speed = WindSpeed
        MapMeteo.Wind_Direction = WindDirection
        MapMeteo.Light = Light
        MapMeteo.Rain = Rain
        Periode_DayNight = PeriodeDayNight
        Periode_Rain = PeriodeRain
    End If
End Sub

Public Sub CycleMeteo()
    Dim sens As Byte
    'initialise le générateur de nombres aléatoires.
    Randomize
    'tirage d'un nombre aléatoire parmi {-1, 0, 1}
    sens = Int(Rnd * 3) - 1
    'changement de la direction du vent
    'le modulo 8 permet de passer de 7 à 0 (8 Mod 8 = 0)
    
    MapMeteo.Wind_Direction = (MapMeteo.Wind_Direction + sens) Mod 8
    
    If MapMeteo.Wind_Speed = 0 Then
        'tirage d'un nombre aléatoire parmi {0, 1}
        sens = Int(Rnd * 2)
        MapMeteo.Wind_Speed = MapMeteo.Wind_Speed + sens
    ElseIf MapMeteo.Wind_Speed = 10 Then
        'tirage d'un nombre aléatoire parmi {-1, 0}
        sens = -Int(Rnd * 2)
        MapMeteo.Wind_Speed = MapMeteo.Wind_Speed + sens
    Else
        'tirage d'un nombre aléatoire parmi {-1, 0, 1}
        sens = Int(Rnd) * 2 - 1
        MapMeteo.Wind_Speed = MapMeteo.Wind_Speed + sens
    End If
    
    'Cette partie génère des périodes de nuit et de pluie
    'Le temps restant est décrémenté à chaque cycle. lorsqu'il
    'arrive à zéro, on génère une nouvelle période aléatoirement.
    Periode_DayNight = Periode_DayNight - 1
    'si la période est écoulée, alors on tire un moment (jour/nuit)
    If Periode_DayNight <= 0 Then
        Periode_DayNight = Int(Rnd * MaxPeriode + 1)
        If Int(Rnd) = 1 Then Light = True Else Light = False
    End If
    
    Periode_Rain = Periode_Rain - 1
    'si le temps est écoulé, alors on tire un temps (pluie ou pas)
    If Periode_Rain <= 0 Then
        Periode_Rain = Int(Rnd * MaxPeriode + 1)
        If Int(Rnd) = 1 Then Rain = True Else Rain = False
    End If
End Sub

'Retourne la vitesse du vent ( 0-10 )
Public Function GetWindSpeed() As Integer
    GetWindSpeed = MapMeteo.Wind_Speed
End Function

'Retourne la direction du vent ( type direction )
Public Function GetWindDirection() As Direction
    GetWindDirection = MapMeteo.Wind_Direction
End Function
 
'Retourne TRUE si il fait nuit, retourne FALSE si il fait jour.
Public Function IsNight() As Boolean
    IsNight = Not (MapMeteo.Light)
End Function

'Retourne TRUE si il pleut.
Public Function IsRaining() As Boolean
    IsRaining = EnvMeteo.Rain
End Function

Conclusion :


Vlà, dites-moi ce qui est bien et ce qui l'est moins.
Je pensais aussi que l'on pourrai facilement faire intervenir la température dans les conditions climatiques.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.