Fourmi de Langton

Tout sur les ordinateurs de Mr SucreCPC PCW PC PDA NC ...

Modérateur : Politburo

Répondre
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Fourmi de Langton

Message par Gilles59 »

Dev hier soir d'une petite appli de A à Z en Pascal sur CPC6128 :

https://youtu.be/FkfRpVLf4FM

Je n'ai pas monté la vidéo, c'est du "direct", et donc des longueurs pour corriger qqes bugs. Mais il y a les boutons avance-rapide... Je crois que çà montre assez bien des avantages et inconvénients de programmer en Pascal sur CPC 6218/CPM.
Le couvre-feu nocture libère un peu de temps ;D Et ça me détends du stress du boulot en ce moment ...
J'ai pas copié la DSK, si ça intéresse qqun, dites moi...
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
yvesffr
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2127
Enregistré le : 03 juin 2002 22:07
Localisation : 77
Contact :

Re: Fourmi de Langton

Message par yvesffr »

Très intéressant, le code directement sur la machine, j'aurais personnellement abandonné rapidement :)
"Je vous aime" (© Pocket 1969)
"et moi je suis la vierge marie" (© Stamba 2009)
"Resistance is futile (if < 1 Ohm)"
"Un velux est un linux portugais"
"j'en vois encore un bout, yves" (© 2010 SbM)
"In minitel we trust" - Silicium
Avatar du membre
JayBLOOD
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 695
Enregistré le : 27 août 2011 19:43
Localisation : 49

Re: Fourmi de Langton

Message par JayBLOOD »

Excellent! :) J'aimerai avoir le dsk, du coup, pour tester sur mes vrais cpc. :)
Jay
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Fourmi de Langton

Message par C.Ret »

Excellente vidéo. Et oui ça se programme en direct. J'aime bien le Pascal pour sa rigueur et son symbolisme typologique.

En regardant la vidéo, j'ai composé au brouillon comme en Pascal puis j'ai compilé en BASIC 7 pour CBM: on retrouve tous les points abordés par Gilles y compris la différence entre n• de crayon et code couleur. Mais c'est plus difficile à voir. La fourmi ne meurt pas car une spécificité de la fonction RDOT(2) l'empêche de sortir de l'écran. Je m'attendais à un arrėt catastrophique sur une erreur Illegal quantity error. Mais non ;)

Code : Tout sélectionner

1 color 0,1:color 1,2:graphic 1,1:slow:x=160:y=100:d=1
2 do:locate x,y:c=1-rdot(2):draw c,x,y:d=(d+(c=0)-(c=1)) and 3:x=x+(d=2)-(d=0):y=y+(d=1)-(d=3)
3 get k$:loop until k$
A zut j'ai oublié d'utiliser des structures IF THEN BEGIN ... BEND:ELSE BEGIN ... BEND !
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Fourmi de Langton

Message par Gilles59 »

JayBLOOD a écrit : 14 févr. 2021 01:02 Excellent! :) J'aimerai avoir le dsk, du coup, pour tester sur mes vrais cpc. :)
Voilà... https://drive.google.com/file/d/1gRp4d0 ... sp=sharing

exécutable et source. Nombre de fourmis limités à 255 mais facile à changer.

Salut C.Ret, Je me suis demandé si un "Deux ligne" était possible en effet ;D Il n'y a pas non plus de problème à dépasser le bord d'écran mais avec 50 ou 60 fourmis ça devient inutilement lent puisque les calculs continuent.
Je ne comprends pas dans ton code ce que fait RDOT? Test de la couleur? Mais à vrai dire je n'y comprends rien du tout :O
Je ne vois aucun test ?
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Fourmi de Langton

Message par C.Ret »

Oui, la fonction RDOT(2) renvoi le code couleur du pixel pointé par LOCATE x,y

En mode GRAPHIC 1 cela signifie que RDOT(2) renvoi 0 pour les pixels éteints (couleur fond d'écran) et 1 pour les pixels allumés (couleur du tracé). En mode GRAPHIC 3, la fonction RDOT(2) renvoie l'attribut couleur ( le n• du crayon) entre 0 (fond/éteint) et 1 2 ou 3 selon le code couleur respectif.

Il n'y a pas de structure IF ... THEN car j'utilise les valeurs booléenne des tests (C=0) ou (C=1), (D=0) etc pour calculer directement les changements de direction D et selon la direction les incréments/decréments des coordonnées X Y de la fourmi.

Quand au fait qu'elle ne meurre pas, c'est en fait qu'il se passe aux bords de l'écran les mêmes phénomènes que ceux que l'on voit dans ta vidéo. Lorsque la fourmi est hors de l'écran, l'attribut de couleur n'est pas modifié car l'instruction DRAW C,X,Y n'a pas d'effet et RDOT(2) renvoi toujours 0 ce qui fait tourner la fourmi deux fois à droite, c'est a dire qu'elle fait demi-tours et revient dans l'écran. Ce qui lui fait suivre en fait les bords de l'écran.


Voici une version avec trois fourmis de couleurs différentes utilisant le mode multicolore des CBM. Vouloir mettre plus de fourmis est illusoire du fait de l'extrême lenteur de ces machines en BASIC. Contrairement à la version précédente, je teste si les fourmis sortent de l'écran et les replace au centre de l'écran. D'ailleurs je ne les place pas de façon aléatoire mais bel bien l'une sur l'autre exactement au centre de l'écran. Elles s'empressent de prendre chacune une direction différente.

Bien qu'elles se marchent dessus et interagissent mutuellement, il y en a toujours une pour se faire piéger dans un attracteur et pars en vrille diagonale.

Code : Tout sélectionner

1 color 0,1:color 1,6:color 2,9:color 3,15:graphic 3,1:slow:d(2)=1:d(3)=2
2 do:for f=1 to 3:locate x(f),y(f):c=1-sgn(rdot(2)):draw c*f,x(f),y(f)
3 d(f)=(d(f)+(c=0)-(c=1)) and 3:x(f)=x(f)+(d(f)=1)-(d(f)=3):y(f)=y(f)+(d(f)=0)-(d(f)=2)
4 if x(f)<0 or x(f)>159 or y(f)<0 or y(f)>199 then x(f)=80:y(f)=100
5 next f:loop:end
Ah oui j'oubliais D donne la direction de 0 à 3 .(respectivement droite, haut, gauche et bas). Dans les calcul, les signes des résultats booléens paraissent opposés mais c'est qu'en fait un test vrai renvoie la valeur -1
Le AND3 est en fait un MOD4.
C128D Langford ant3.gif
C128D Langford ant3.gif (65.69 Kio) Vu 6915 fois
Modifié en dernier par C.Ret le 24 févr. 2021 16:06, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
JayBLOOD
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 695
Enregistré le : 27 août 2011 19:43
Localisation : 49

Re: Fourmi de Langton

Message par JayBLOOD »

Merci, Gilles! C'est dans la boîte. :)
Jay
Répondre

Retourner vers « Amstrad »