Plasma in Pascal Hier findet Ihr nicht viel. Lediglich das Proggy in Pascal und eine kleine Erluterung. Ein fertiges Programm findet Ihr hier, im Pfad 'SOURCES\' den Quellkot h -code und im Pfad 'PROGS\' (wie schon gesagt) das fertige, ausfhrbare Programm. PROGRAM Plasma; USES CRT; VAR j : BYTE; PROCEDURE SetMode(Modus : BYTE); ASSEMBLER; ASM XOR AH,AH MOV AL,Modus INT 10h END; PROCEDURE NewCol(xl,yo,x,y,xr,yu : INTEGER); VAR Col : INTEGER; BEGIN IF MEM[$A000:y*320+x] = 0 THEN BEGIN Col := xr - xl + yu - yo; Col := Random(Col*3)-Col; Col := Col + (MEM[$A000:yo*320+xl]+MEM[$A000:yu*320+xr]) SHR 1; IF Col < 1 THEN Col := 1; IF Col > 189 THEN Col := 189; MEM[$A000:y*320+x] := Col; END; END; PROCEDURE SetRGB(Nr,r,g,b : BYTE); BEGIN IF NR <> 0 THEN BEGIN PORT[$03C8] := Nr; PORT[$03C9] := r; PORT[$03C9] := g; PORT[$03C9] := b; END; END; PROCEDURE SetPal(j : BYTE); VAR i : BYTE; BEGIN FOR i := 1 TO 63 DO BEGIN SetRGB(i+j,0,63-i,i); SetRGB(i+63+j,i,0,63-i); SetRGB(i+126+j,63-i,i,0); END; END; PROCEDURE SubDivide(x1,y1,x2,y2 : WORD); VAR Col : INTEGER; x,y : WORD; BEGIN IF x2-x1 > 1 THEN BEGIN x := (x1+x2) SHR 1; y := (y1+y2) SHR 1; NewCol(x1,y1,x,y1,x2,y1); NewCol(x2,y1,x2,y,x2,y2); NewCol(x1,y2,x,y2,x2,y2); NewCol(x1,y1,x1,y,x1,y2); Col := (MEM[$A000:y1*320+x] + MEM[$A000:y*320+x2] + MEM[$A000:y2*320+x] + MEM[$A000:y*320+x1]) SHR 2; MEM[$A000:y*320+x] := Col; {WHILE NOT KeyPressed DO; IF ReadKey = #0 THEN;} SubDivide(x1,y1,x,y); SubDivide(x,y,x2,y2); SubDivide(x1,y,x,y2); SubDivide(x,y1,x2,y); END; END; BEGIN Randomize; SetMode($13); j := 0; SetPal(j); Inc(j); SubDivide(0,0,319,199); WHILE NOT KeyPressed DO BEGIN SetPal(j); Inc(j); Delay(10); END; SetMode($03); END. Das Programm stammt in der Grundidee brigens nicht von mir, son- dern aus der neuesten DOS (3/95 Seite 218). Allerdings habe ich es (meiner Meinung nach) noch um einiges verbessert und vor allen Dingen: den Aufbau noch verschnellert. Da aber im Programm nichts von einer Copyright-Meldung stand, gehe ich davon aus, da ich es hier frei verwenden darf (wozu sollten sie auch sonst dort abgedruckt werden?). Und noch etwas: In der Prozedur SubDivide findet sich nach dem Setzen des Punktes zwei Programmzeilen in Kommentarklammern ({}). Wenn Ihr sie weglasst, knnt Ihr Euch das Setzen der fnf Punkte anschauen (er wartet jeweils auf Tastendruck!). Und noch etwas/2: Punkte setzen und auslesen mache ich mittels der MEM-Anweisung. Ich schreibe also die Farbe (Col) direkt in den Video-Speicher (geht am schnellsten). Und noch etwas/3.3b: Ich habe die DIV-Anweisungen, die sich in meiner Beschreibung wiederfinden durch SHR-Anweisungen ersetzt - geht schneller! Ach ja: Ihr solltet brigens auch ruhig mal etwas mit der Pro- zedur 'SetPal' herumspielen - man kann noch einiges mit der Pa- lette machen! Tja, gut. Ich hoffe, da war gut... Wie immer: wenn noch Fragen offen sein sollten: her damit. Ansonsten: ausprobieren und Klappe halten! Kemil