Re : [VBA - Amusement] Fourmi de Langton : Quels seraient vos algorithmes ?
Re le forum ,
Moi je reste sur ma fin... Roger, c'est bien, si le but est de montrer que du désordre jailli l'ordre, génial , mais dès que la fourmi se tappe un mur, elle repart du début , je ne pensais pas qu'un mur te faisait peur !!! Staple, tes liens ne marchent pas sous 2007 ...
Maintenant, si l'étude devient "sociologique", j'ai envie de reprendre mon code pour introduire plusieurs fourmis et voir ce que ça devient, avec une couleur par fourmi. Qui m'aime me suive ...
A +
Re le forum ,
Moi je reste sur ma fin... Roger, c'est bien, si le but est de montrer que du désordre jailli l'ordre, génial , mais dès que la fourmi se tappe un mur, elle repart du début , je ne pensais pas qu'un mur te faisait peur !!! Staple, tes liens ne marchent pas sous 2007 ...
Maintenant, si l'étude devient "sociologique", j'ai envie de reprendre mon code pour introduire plusieurs fourmis et voir ce que ça devient, avec une couleur par fourmi. Qui m'aime me suive ...
A +
Les cases d'une grille peuvent être blanches ou noires. On considère arbitrairement l'une de ces cases comme étant la "fourmi". Dans l'état initial, toutes les cases sont de la même couleur.
La fourmi peut se déplacer à gauche, à droite, en haut ou en bas d'une case à chaque fois selon les règles suivantes :
* Si la fourmi est sur une case noire, elle tourne de 90° vers la droite, change la couleur de la case en blanc et avance d'une case.
* Si la fourmi est sur une case blanche, elle tourne de 90° vers la gauche, change la couleur de la case en noir et avance d'une case.
Pas vu de mur la-dedans.
Je me suis seulement efforcé de trouver un code concis répondant au problème posé, rien de plus.
Re : [VBA - Amusement] Fourmi de Langton : Quels seraient vos algorithmes ?
Re , Roger, je parlais de l'espace de déplacement de la fourmi... Sur ton fichier, quand la fourmi atteint les limites du cadre, elle se repositionne au centre (en tout cas, c'est ce qui arrive chez moi...) Staple, j'ai chargé le fichier Excel sur tes liens, et... rien ne se passe. Quelle est la macro à lancer pour qu'il se passe quelque chose ?
Mon fichier de départ ne fonctionne pas quand je l'ai téléchargé ... A priori, c'est dû aux différences entre les ColorIndex 2007 et compatibles...
J'ai modifier le chargement des ColorIndex et rajouté des fourmis. En principe, chaque Clic rajoute une fourmi de couleur différente. merci de me dire si mon nouveau fichier marche sur autre chose que 2007 .
A +
JNP: Ton nouveau fichier fait faire des choses bizarres aux fourmis (on dirait qu'elle se prennent pour le serpent dans nibbles ) Qu'entends-tu par là ? Ça ressemble bien au flash de Wilkipédia, non ?
Pour le fichier Fourmilière.xls , il suffit de lancer la macro : programmeprincipal J'ai testé, je récuppère un beau rond avec des couleurs, et rien de plus... Une fourmilière statique ?
(...) Roger, je parlais de l'espace de déplacement de la fourmi... Sur ton fichier, quand la fourmi atteint les limites du cadre, elle se repositionne au centre
(...)
Presque ! Lorsqu'une fourmi atteint le bord de la fenêtre, elle continue son chemin loin de nos regards. Elle ne connaît pas de murs. Elle courre jusqu'à la mer où elle se noie. Et c'est triste...
Mais nous, on ne pleurniche pas pour des histoires de murs, parce que nous sommes grands, et parce que les grands ne doivent pas pleurer. Mais c'est triste...
Alors, pour que nous soyons moins tristes, lorsqu'une fourmi a disparu à l'horizon, une autre fourmi sort de la fourmilière et occupe notre regard. Et nous sommes moins tristes...
Pas longtemps.
Parce que cette aimable fourmi disparaît à l'horizon pour rejoindre sa sœur sur la plage. Elle la trouve noyée dans le flot. Et elle la suit. Et elle se noie...
Et nous sommes encore plus tristes...
C'est pour nous consoler qu'une troisième fourmi sort de sa demeure. Mais son destin est de courir à la mer...
Toujours la même histoire !
J'en viens à me demander si ces bestioles ne sont pas un peu connes sur les bords. D'autant qu'une quatrième, puis un cinquième, une sixième encore s'en vont se noyer. Heureusement, la fourmilière est vide désormais.
Bon débarras, les sales bêtes !
Et pour chasser la tristesse des belles histoires de tonton Roger qui brouille le regard des grands enfants, tonton Roger (2327, ne l'oublions pas) a écrit une autre histoire, dans laquelle il n'y a qu'un cloporte (ras le bol des fourmis), mais un cloporte intelligent, lui : il ne quittera jamais notre regard.
Code:
[COLOR="DarkSlateGray"]Sub cloporte_malin()
Dim ol As Integer, oc As Integer, i As Long, k As Integer, x As Long, y As Long
Dim l As Integer, c As Integer, a As Long
[COLOR="SeaGreen"]'
'Choix des couleurs[/COLOR]
Range(Cells(1, 1), Cells(256, 256)).Interior.Color = 26367
y = Cells(1, 1).Interior.Color
Range(Cells(1, 1), Cells(256, 256)).Interior.ColorIndex = 4 [COLOR="SeaGreen"]'couleur de fond[/COLOR]
x = Cells(2, 2).Interior.Color
[COLOR="SeaGreen"]'[/COLOR]
Cells(64, 128).Select 'localisation du départ
ol = -1: oc = 0 'direction initiale
[COLOR="SeaGreen"]'----- Corps du programme -----[/COLOR]
On Error GoTo dépassement
Do
With Selection
k = 1 + 2 * (.Interior.Color = x)
If ol Then oc = -k * ol: ol = 0 Else ol = k * oc: oc = 0
.Interior.Color = (x + y + k * (x - y)) / 2
a = a - (Cells(.Column, .Row).Offset(oc, ol).Interior.Color = x)
.Offset(ol, oc).Select
continue:
End With
Loop While a < 200000
On Error GoTo 0
Exit Sub
dépassement:
l = 0: c = 0
If Selection.Row = 256 Then l = -256 * Abs(ol)
If Selection.Column = 256 Then c = -256 * Abs(oc)
If Selection.Row = 1 Then l = 256 * Abs(ol)
If Selection.Column = 1 Then c = 256 * Abs(oc)
Selection.Offset(l + ol, c + oc).Select
Resume continue
[COLOR="SeaGreen"]'----- ------------------ -----[/COLOR]
End Sub[/COLOR]
Mode d'emploi : cliquer sur "En route" et être patient...
Re : [VBA - Amusement] Fourmi de Langton : Quels seraient vos algorithmes ?
Re ,
Y manque un petit MPG3 de Caude François pour le fond sonore, et que Cloclo porte ...
Un petit stop aussi (ou DoEvents).
Mais c'est un option que je n'avais pas envisagée... Le pauvre cloporte est condamné à recommencer éternellement, cest peut-être encore plus dur que de se noyer !
Bon, j'y vais, je commence à chopper des fourmis .
Bonne journée
Re : [VBA - Amusement] Fourmi de Langton : Quels seraient vos algorithmes ?
Bonjour L'agraphe, JC, JNP, Roger,
Oui amusantes les 'tites fourmies. J'ai pas trop la tête à réfléchir grave en ce moment mais:
@Staple pour la question de ton post #3:
Code:
Private Declare Function GetInputState Lib "user32" () As Long
Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer
Dim blnStop As Boolean
'touche Espace pas actionnée..'(&HD)(&H20) = 0 '(&H2E) = 0
While GetAsyncKeyState(&H20) = 0
' ne faire intervenir DoEvents que sur évènement clavier ou bouton souris(plus rapide et moins gourmand en utilisation processeur)
If GetInputState Then DoEvents
'Ici appel de la procédure
Wend
blnStop = true
End Sub
Et dans la Procédure,
Code:
Do While (les Conditions) [COLOR=red]and Not blnStop[/COLOR]
End do
Pas très étonnant. C'est écrit spécifiquement pour un Excel2003 qui autorise au plus 256 colonnes. La gestion d'erreur sur laquelle je m'appuie pour traiter les bords de la représentation utilise cette particularité. J'ai sous le coude une version certainement plus compatible avec Excel2007 : je la déposerai dès que je l'aurai vérifiée. Mais elle ne sera pas testée avec Excel2007 pour la raison que je n'ai pas cette version à ma disposition.
A plus tard...
Re : [VBA - Amusement] Fourmi de Langton : Quels seraient vos algorithmes ?
Re ,
C'est bizarre, je suis sur 2007 et ça fonctionnait sans plantage (sauf pour quitter bien sûr, vu qu'il n'y a pas de DoEvents pour reprendre la main)...
A suivre