Accueil > > > NURMITE (ODORAT)
NURMITE (ODORAT)
Information sur la source
Description
Mise à jour de ma version de l'odorat du nurm. Bon, je l'ai fait assez vite, et vu que je peux pas le tester puisque je sais pas comment l'integrer dans le projet, il se peut qu'il ne marche pas du tout, mais bon, ça peut servir de structure de depart pour ce module. J'ai essayé de reprendre toute les fonctions demandées, j'espere que ça marche.
Source
- 'DetectOdeur(nurmite as nurm).IntensiteOdeur
- '******Intensité de l'odeur de l'endroit où se trouve le nurmite
- 'DetectOdeur(nurmite as nurm).GenreOdeur
- '******Type de l'odeur de l'endroit où se trouve le nurmite
- 'DetectOdeur(nurmite as nurm).LocationOdeur
- '******Location de la source qui émet l'odeur de l'endroit où se trouve le nurmite
-
- 'La fonction DirectionOdeur renvoie les valeurs suivantes
-
- 'DirectionOdeur(Nurmite as nurm).Gauche Si l'odeur vient de cette direction,
- 'DirectionOdeur(Nurmite as nurm).Droite renvoie true, sinon, renvoie False.
- 'DirectionOdeur(Nurmite as nurm).Bas Ainsi, on peut diriger le nurmite
- 'DirectionOdeur(Nurmite as nurm).Haut vers cette odeur
-
- 'La fonction OdeurEstConnu renvoie la valeur suivante
- 'OdeurEstConnu(Nurmite As Nurm, Genre As Integer)
- '******True si l'odeur est connue, False si non
- '******A noter que genre est le type d'odeur
-
- Public Type Odeur
- MinOdeur As Integer
- '******Intensité odeur détectable minimale
- OdeurConnu(10) As Integer
- '******Echelle de connaissance des odeurs. O : inconnue, >0 connue
- End Type
-
- Public Type Direction
- Haut As Boolean
- Bas As Boolean
- Droite As Boolean
- Gauche As Boolean
- End Type
-
- 'Là, c'est la definition de la map des odeurs
- Public Type Odeurs
- IntensiteOdeur As Integer
- '******Intensité de l'odeur à ce point
- GenreOdeur As Integer
- '******Type d'odeur
- End Type
-
- Dim MapOdeur(100, 100) As Odeurs
-
- ' .: Retourne si une odeur est connue
- Public Function OdeurEstConnu(ByRef Nurmite As Nurm, ByVal Genre As Integer) As Boolean
- If Nurmite.Odorat.OdeurConnu(Genre) > 0 Then
- OdeurEstConnu = True
- Else
- OdeurEstConnu = False
- End If
- End Function
-
-
- 'Definit la direction de la provenance de l'odeur
- Public Function DirectionOdeur(Hor As Integer, Ver As Integer)
- DirectionOdeur = 0
-
- 'Le resultat peut être soit horizontale, soit verticale, soit diagonale
- 'donc, on verifie quelle est la distance la plus grande, horizontale ou verticale
- 'Si l'écart est faible, alors on renvoie diagonale
- If Int(Abs(Hor / Ver)) <= 2 Then
- Select Case Hor
- Case Is > 0: DirectionOdeur = DirectionOdeur + 1
- Case Is < 0: DirectionOdeur = DirectionOdeur + 2
- End Select
- Select Case Ver
- Case Is > 0: DirectionOdeur = DirectionOdeur + 4
- Case Is < 0: DirectionOdeur = DirectionOdeur + 8
- End Select
- ElseIf Abs(Hor) > Abs(Ver) Then
-
- Select Case Hor
- Case Is > 0: DirectionOdeur = DirectionOdeur + 1
- Case Is < 0: DirectionOdeur = DirectionOdeur + 2
- End Select
- Else
- Select Case Ver
- Case Is > 0: DirectionOdeur = DirectionOdeur + 4
- Case Is < 0: DirectionOdeur = DirectionOdeur + 8
- End Select
- End If
- End If
- End Function
- 'Ajoute une odeur à la carte olfactive
- Public Sub AddOdeur(PosX As Integer, PosY As Integer, Intensity As Integer, Odeur As Integer)
- MapOdeur(PosX, PosY).GenreOdeur = Odeur
- MapOdeur(PosX, PosY).IntensiteOdeur = Intensity
- End Sub
- 'Enleve une odeur à la carte olfactive
- Public Sub RemoveOdeur(PosX As Integer, PosY As Integer)
- MapOdeur(PosX, PosY).GenreOdeur = Null
- MapOdeur(PosX, PosY).IntensiteOdeur = Null
- End Sub
- 'renvoie la direction de la source d'odeur recherchée la plus proche
- Public Sub FindNearestOdeur(Nurmite As Nurm, Odeur As Integer)
- Dim DepHor, DepVer As Integer
- Dim FinHor, FinVer As Integer
- Changement = False
- i = -1
- Do
- i = i + 1
- DepHor = Nurmite.XPos - i
- DepVer = Nurmite.YPos - i
- FinHor = Nurmite.XPos + i
- FinVer = Nurmite.YPos + i
- If DepVer <= 1 Then DepVer = 1
- If DepHor <= 1 Then DepHor = 1
- If FinVer >= Ysize Then DepVer = Ysize
- If FinHor >= Xsize Then DepHor = Xsize
- For i = DepVer To FinVer
- If Changement = True Then Exit For
- If MapOdeur(DepHor, i).GenreOdeur = Odeur Then
- Hor = DepHor
- Ver = i
- Changement = True
- End If
- If MapOdeur(FinHor, i).GenreOdeur = Odeur Then
- Hor = FinHor
- Ver = i
- Changement = True
- End If
-
- For i = DepHor To FinHor
- If Changement = True Then Exit For
- If MapOdeur(i, DepVer).GenreOdeur = Odeur Then
- Hor = i
- Ver = DepVer
- Changement = True
- End If
- If MapOdeur(i, FinVer).GenreOdeur = Odeur Then
- Hor = i
- Ver = FinVer
- Changement = True
- End If
- Next i
- Loop
- If Changement = True Then FindNearestOdeur = DirectionOdeur(Hor, Ver) Else FindNearestOdeur = Null
- End Sub
- 'renvoie la direction de l'odeur inconnue la plus proche
- Public Sub DetectNouvelleOdeur(Nurmite As Nurm)
- Public Sub FindNearestOdeur(Nurmite As Nurm, Odeur As Integer)
- Dim DepHor, DepVer As Integer
- Dim FinHor, FinVer As Integer
- Changement = False
- i = -1
- Do
- i = i + 1
- DepHor = Nurmite.XPos - i
- DepVer = Nurmite.YPos - i
- FinHor = Nurmite.XPos + i
- FinVer = Nurmite.YPos + i
- If DepVer <= 1 Then DepVer = 1
- If DepHor <= 1 Then DepHor = 1
- If FinVer >= Ysize Then DepVer = Ysize
- If FinHor >= Xsize Then DepHor = Xsize
- For i = DepVer To FinVer
- If Changement = True Then Exit For
- If OdeurEstConnu(MapOdeur(DepHor, i).GenreOdeur) Then
- Hor = DepHor
- Ver = i
- Changement = True
- End If
- If OdeurEstConnu(MapOdeur(FinHor, i).GenreOdeur) Then
- Hor = FinHor
- Ver = i
- Changement = True
- End If
-
- For i = DepHor To FinHor
- If Changement = True Then Exit For
- If OdeurEstConnu(MapOdeur(i, DepVer).GenreOdeur) Then
- Hor = i
- Ver = DepVer
- Changement = True
- End If
- If OdeurEstConnu(MapOdeur(i, FinVer).GenreOdeur) Then
- Hor = i
- Ver = FinVer
- Changement = True
- End If
- Next i
- Loop
- If Changement = True Then FindNearestOdeur = DirectionOdeur(Hor, Ver) Else FindNearestOdeur = Null
- End Sub
-
- End Sub
'DetectOdeur(nurmite as nurm).IntensiteOdeur
'******Intensité de l'odeur de l'endroit où se trouve le nurmite
'DetectOdeur(nurmite as nurm).GenreOdeur
'******Type de l'odeur de l'endroit où se trouve le nurmite
'DetectOdeur(nurmite as nurm).LocationOdeur
'******Location de la source qui émet l'odeur de l'endroit où se trouve le nurmite
'La fonction DirectionOdeur renvoie les valeurs suivantes
'DirectionOdeur(Nurmite as nurm).Gauche Si l'odeur vient de cette direction,
'DirectionOdeur(Nurmite as nurm).Droite renvoie true, sinon, renvoie False.
'DirectionOdeur(Nurmite as nurm).Bas Ainsi, on peut diriger le nurmite
'DirectionOdeur(Nurmite as nurm).Haut vers cette odeur
'La fonction OdeurEstConnu renvoie la valeur suivante
'OdeurEstConnu(Nurmite As Nurm, Genre As Integer)
'******True si l'odeur est connue, False si non
'******A noter que genre est le type d'odeur
Public Type Odeur
MinOdeur As Integer
'******Intensité odeur détectable minimale
OdeurConnu(10) As Integer
'******Echelle de connaissance des odeurs. O : inconnue, >0 connue
End Type
Public Type Direction
Haut As Boolean
Bas As Boolean
Droite As Boolean
Gauche As Boolean
End Type
'Là, c'est la definition de la map des odeurs
Public Type Odeurs
IntensiteOdeur As Integer
'******Intensité de l'odeur à ce point
GenreOdeur As Integer
'******Type d'odeur
End Type
Dim MapOdeur(100, 100) As Odeurs
' .: Retourne si une odeur est connue
Public Function OdeurEstConnu(ByRef Nurmite As Nurm, ByVal Genre As Integer) As Boolean
If Nurmite.Odorat.OdeurConnu(Genre) > 0 Then
OdeurEstConnu = True
Else
OdeurEstConnu = False
End If
End Function
'Definit la direction de la provenance de l'odeur
Public Function DirectionOdeur(Hor As Integer, Ver As Integer)
DirectionOdeur = 0
'Le resultat peut être soit horizontale, soit verticale, soit diagonale
'donc, on verifie quelle est la distance la plus grande, horizontale ou verticale
'Si l'écart est faible, alors on renvoie diagonale
If Int(Abs(Hor / Ver)) <= 2 Then
Select Case Hor
Case Is > 0: DirectionOdeur = DirectionOdeur + 1
Case Is < 0: DirectionOdeur = DirectionOdeur + 2
End Select
Select Case Ver
Case Is > 0: DirectionOdeur = DirectionOdeur + 4
Case Is < 0: DirectionOdeur = DirectionOdeur + 8
End Select
ElseIf Abs(Hor) > Abs(Ver) Then
Select Case Hor
Case Is > 0: DirectionOdeur = DirectionOdeur + 1
Case Is < 0: DirectionOdeur = DirectionOdeur + 2
End Select
Else
Select Case Ver
Case Is > 0: DirectionOdeur = DirectionOdeur + 4
Case Is < 0: DirectionOdeur = DirectionOdeur + 8
End Select
End If
End If
End Function
'Ajoute une odeur à la carte olfactive
Public Sub AddOdeur(PosX As Integer, PosY As Integer, Intensity As Integer, Odeur As Integer)
MapOdeur(PosX, PosY).GenreOdeur = Odeur
MapOdeur(PosX, PosY).IntensiteOdeur = Intensity
End Sub
'Enleve une odeur à la carte olfactive
Public Sub RemoveOdeur(PosX As Integer, PosY As Integer)
MapOdeur(PosX, PosY).GenreOdeur = Null
MapOdeur(PosX, PosY).IntensiteOdeur = Null
End Sub
'renvoie la direction de la source d'odeur recherchée la plus proche
Public Sub FindNearestOdeur(Nurmite As Nurm, Odeur As Integer)
Dim DepHor, DepVer As Integer
Dim FinHor, FinVer As Integer
Changement = False
i = -1
Do
i = i + 1
DepHor = Nurmite.XPos - i
DepVer = Nurmite.YPos - i
FinHor = Nurmite.XPos + i
FinVer = Nurmite.YPos + i
If DepVer <= 1 Then DepVer = 1
If DepHor <= 1 Then DepHor = 1
If FinVer >= Ysize Then DepVer = Ysize
If FinHor >= Xsize Then DepHor = Xsize
For i = DepVer To FinVer
If Changement = True Then Exit For
If MapOdeur(DepHor, i).GenreOdeur = Odeur Then
Hor = DepHor
Ver = i
Changement = True
End If
If MapOdeur(FinHor, i).GenreOdeur = Odeur Then
Hor = FinHor
Ver = i
Changement = True
End If
For i = DepHor To FinHor
If Changement = True Then Exit For
If MapOdeur(i, DepVer).GenreOdeur = Odeur Then
Hor = i
Ver = DepVer
Changement = True
End If
If MapOdeur(i, FinVer).GenreOdeur = Odeur Then
Hor = i
Ver = FinVer
Changement = True
End If
Next i
Loop
If Changement = True Then FindNearestOdeur = DirectionOdeur(Hor, Ver) Else FindNearestOdeur = Null
End Sub
'renvoie la direction de l'odeur inconnue la plus proche
Public Sub DetectNouvelleOdeur(Nurmite As Nurm)
Public Sub FindNearestOdeur(Nurmite As Nurm, Odeur As Integer)
Dim DepHor, DepVer As Integer
Dim FinHor, FinVer As Integer
Changement = False
i = -1
Do
i = i + 1
DepHor = Nurmite.XPos - i
DepVer = Nurmite.YPos - i
FinHor = Nurmite.XPos + i
FinVer = Nurmite.YPos + i
If DepVer <= 1 Then DepVer = 1
If DepHor <= 1 Then DepHor = 1
If FinVer >= Ysize Then DepVer = Ysize
If FinHor >= Xsize Then DepHor = Xsize
For i = DepVer To FinVer
If Changement = True Then Exit For
If OdeurEstConnu(MapOdeur(DepHor, i).GenreOdeur) Then
Hor = DepHor
Ver = i
Changement = True
End If
If OdeurEstConnu(MapOdeur(FinHor, i).GenreOdeur) Then
Hor = FinHor
Ver = i
Changement = True
End If
For i = DepHor To FinHor
If Changement = True Then Exit For
If OdeurEstConnu(MapOdeur(i, DepVer).GenreOdeur) Then
Hor = i
Ver = DepVer
Changement = True
End If
If OdeurEstConnu(MapOdeur(i, FinVer).GenreOdeur) Then
Hor = i
Ver = FinVer
Changement = True
End If
Next i
Loop
If Changement = True Then FindNearestOdeur = DirectionOdeur(Hor, Ver) Else FindNearestOdeur = Null
End Sub
End Sub
Conclusion
Si il y a des trucs à changer, à modifier, dîtes le moi, et faite moi savoir toutes les erreurs, si c'est trop lent et qu'il faut l'ameliorer pour augmenter les performances, et enfin, si vous comprenez pas ma façon de programmer. Hesitez pas à me donner votre avis.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
.: The Nurmite project :: [ par Mémère ]
Et voila le premier projet de la communauté VbFrance! Le but qui n'est pas des moindres, réaliser un semblant d'intelligence artificielle. Pour y arri
demande infos sur le projet NURMITE [ par seedorf ]
salut, je suis nouveau et j'aimerai bien savoir plus sur le projet NURMITE que vous developpez, et comment je peux assister à ca et aider moi aussi à
Projet Eboheze,un projet NURMITE avant l'heure... [ par ndj55 ]
Salut à tous!voilà,perso,je travaille sur un programme d'IA depuis dejà 2 mois et demi... Ce programme s'appelle le projet Eboheze.Il en est à sa vers
NURMITES [ par Ophidian ]
tout simplement sublime quoique un peu simple jusqu'a present...juste pour me marrer, on peut remplacer "Log$ = Log$ + Chr$(10) + Chr$(13) + text$"par
.: Nurmite Info :: [ par El Manipulator ]
Juste pour m'excuser du retard et pour vous informer que malgré tout, ça avance petit à petit! Quasiment tous les modules sont expliqués, par contre i
projet nurmite [ par vb6fr.dll ]
j'ai un problème avec le projet nurmite, lorsque je l'éxécute avec vb, il met projet ou bibliothèque introuvable, et il sélectionne str$ dans la premi
Nurmite: le module ROUTE [ par Sylderon ]
Bonjour à tous.J'ai vu récemment ce projet et décidé de vous donner un coup de main.Aussi je vous propose de m'occuper du module ROUTE pour élaborer d
bye bye! [ par BlackWizzard ]
j'abandonne le projet nurmite...ça fait 2 semaines au moins que VB6 n'a pas été ouvert une seul fois!je suis en train d'apprendre de nouveaux language
nourriture pour le nurmite [ par pilotex ]
Je vous propose mon idée. Comme vous voulez lui donner de la nourriture pour que le nurmite survive, autant lui la faire chercher. Par exemple autour
Nurmite pour quand?? [ par ttMan ]
Pour quand les prochaines news nurmites??? Enfin ça repartait, déjà ça freine... Si vous avez besoin de bêta testeurs... je suis candidat!
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : DATAREPORTRE : DATAREPORT par sabrinelle
Cliquez pour lire la suite par sabrinelle RE : DATAREPORTRE : DATAREPORT par NHenry
Cliquez pour lire la suite par NHenry
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|