Module météo (nurmite)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 094 fois - Téléchargée 56 fois

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

Ajouter un commentaire

Commentaires

Ben moi je vis en martinique aux antilles et je peux vous dire pour de laa chaleur il y en a meme un peu trop a mon gout la francez me manque.....
OUIN........ouin.......
enflure pekinio :)
ben chez moi y fait deja trop chaud a 7h00 du mat!! :))
non je t'en voudrais pas...
par contre pour les autres modules, je sais pas trop comment aider donc...

de tte façon t'inquiète pô, il pleut ici aussi module météo ou pas...
a++

ceyquem
Ps mal, j'ai ps encore tout analysé, mais où c'est pr dire que la météo s'annonce radieuse (càd soleil!!!!)?...
Car je vois ts les tps,c 'est bon, mais le soleil? Avec bien sûr les variations de t°!
Sinon, c'est cool, continue comme ça!... ;-P

Ah oui, p'tite info: chez moi il pleut en ce moment donc pô rigolo du tout pour l'ambiance au boulot, trop top morose!!!!!!! 8-(
lol

Allez bone prog'!!!!

Gogogogogogooooooo

P.S: je dis aussi bravo pr ton module bouffe... Mais bon, j'ai la flemme de retaper à peu près le même comment' 1 seconde fois, alors, tu m'en voudras pô?... ;-D

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.