-------------------------------------- Wie aus Ameisen Schneeflocken werden -------------------------------------- von Tim-Philipp Müller Im Forschungszentrum Jülich hat man einen Hochleistungs-Rechner mehrere Wochen lang rechnen lassen, um den so genannten Diffusionsbedingten Wachstum zu simulieren. Das gleiche Experiment habe ich danach auf dem XL/XE ablaufen lassen: In die Mitte des Bildschirms wird ein Punkt (eine 'Ameise') gesetzt, der sich nicht bewegen kann. Nun läßt man irgendwo vom Rand des Bildes eine Ameise loslaufen, die solange wild über die Ebene läuft, bis sie zufällig auf die Ameise in der Mitte trifft. Dann wird sie an ihrer Position sofort zu einem weiteren Punkt eingefroren. Dann läßt man die nächste Ameise vom Rand loslaufen... Das geht solange weiter, bis die Figur den Rand des Bildes berührt (in Jülich hat man nach 50 Millionen Ameisen aufgehört). Nun zur Programmierung: Um das Programm so schnell wie möglich zu machen, habe ich es natürlich in Assembler programmiert. Die höchste Grafikauflösung bietet ja bekanntlich Graphics 8. Leider sind die OS-Grafik-Routinen sehr allgemein gehalten und bekanntlich ja auch entsprechend langsam, deshalb mußten auch da neue Routinen her. Damit die neuen Routinen noch effizienter arbeiten können, habe ich den Screen auf 256 Punkte pro Zeile verschmalert (=32 Bytes/Zeile), wodurch man bei der Adressberechnung für den Punkt nur noch Schiebe-Befehle braucht. (Es ist übrigens tatsächlich schneller, jedesmal die Position des Punktes neu zu berechnen, als die Adresse jeweils entsprechend der Richtung, in die sich die Ameise bewegt, zu ändern!) So, nun läßt man die Ameise am Rand starten. Dann ermittelt man zufällig eine von acht Richtungen, in die gegangen werden kann, und prüft, ob sich an der Stelle, wo man hinmöchte, schon ein Punkt befindet. Ist das der Fall, wird die Ameise an dem Punkt, wo sie jetzt ist, eingefroren. Wenn nicht, bewegt sie sich dorthin und das Spiel geht von vorne los. Das Programm liegt im BIBO-Assembler- Format auf der Diskette vor. Wer es laufenläßt, sollte sich ruhig etwas Zeit dafür nehmen (am besten über Nacht laufen lassen!). Man kann die Routine übrigens auch beschleunigen, indem man die PLOT- und UNPLOT- Befehle rausnimmt, die man eigentlich nicht braucht - dann kann man aber die Ameise nicht mehr auf dem Bildschirm verfolgen. Als Zufallsgenerator wurden übrigens die oberen 8 Bits des 17-Bit Polyzähler RANDOM $D20A herangezogen. Dummerweise ist der Wert, der herauskommt, kein REINER Zufallswert, sondern hängt mit der Laufzeit zusammen. Zur Verdeutlichung sollte man vom Programm einfach mal direkt die Routine TEST starten, die immer zwei Zufalls- werte ausliest und an die entsprechende Position einen Punkt setzt... Das Muster, das sich anfangs ergibt, zeigt den Zusammenhang hoffentlich... Wer sich gleich das Ergebnis anschauen möchte, sollte das Demo auf der Rück- seite der Disk (ANT.COM) starten, das zwei Ergebnisse zeigt: Einmal das Bild, nachdem die Figur am Rand angestoßen ist, und einmal die Figur, bis der ganze Rand mit Ameisen bedeckt ist. Noch ein Wort zum Schluß: Eigentlich sollte sich immer ein Bild bilden, das einer Schneeflocke ziemlich gleich kommt, allerdings ist zu bedenken, daß mein Programm nicht mit einem quadra- tischen Bildschirm, sondern einer Auflösung von 256*128 Punkten arbeitet, was das Ergebnis natürlich etwas verfälscht! (Der Arbeitsbereich kann übrigens durch die Werte bei XM und YM im Programm eingestellt werden.) Fröhliches Experimentieren!