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.
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.