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 : 1428
Inscription : 27 oct. 2010 20:46

Fourmi de Langton

Message par Gilles59 » 10 févr. 2021 13:39

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+

Avatar de l’utilisateur
yvesffr
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2111
Inscription : 03 juin 2002 22:07
Localisation : 77
Contact :

Re: Fourmi de Langton

Message par yvesffr » 10 févr. 2021 13:46

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 de l’utilisateur
JayBLOOD
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 706
Inscription : 27 août 2011 19:43
Localisation : 49

Re: Fourmi de Langton

Message par JayBLOOD » 14 févr. 2021 02:02

Excellent! :) J'aimerai avoir le dsk, du coup, pour tester sur mes vrais cpc. :)
Jay

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2498
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Fourmi de Langton

Message par C.Ret » 14 févr. 2021 12:35

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 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1428
Inscription : 27 oct. 2010 20:46

Re: Fourmi de Langton

Message par Gilles59 » 14 févr. 2021 21:08

JayBLOOD a écrit :
14 févr. 2021 02: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+

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2498
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Fourmi de Langton

Message par C.Ret » 14 févr. 2021 23:18

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) Consulté 1146 fois
Dernière édition par C.Ret le 24 févr. 2021 17:06, édité 1 fois.
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

Avatar de l’utilisateur
JayBLOOD
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 706
Inscription : 27 août 2011 19:43
Localisation : 49

Re: Fourmi de Langton

Message par JayBLOOD » 19 févr. 2021 15:47

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

Répondre

Revenir vers « Amstrad »