Damit ihr gleich eine Anwendung der Fade-Effekte seht, habe ich wieder was Tolles mitgebracht - ein Plasma. Wie funktioniert's? Nun, zuerst nehmen wir den Bildschirm und setzen in die Mitte jeder Seite einen Punkt. Fr jeden dieser Punkte berechnen wir die Farbe nach folgender Formel: ^1HilfsFarbe1 = Xrechts - Xlinks + Yunten - Yoben ^1HilfsFarbe2 = Zufall(HilfsFarbe1 * 3) - HilfsFarbe1 ^1--------------------------------------------------- ^1Farbe = HilfsFarbe2 + Farbe von Punkt Xlinks, Yoben + ^1 + Farbe von Punkt Xrechts, Yunten / 2 Dann setzen wir auch in der Bildschirmmitte einen Punkt und berechnen seine Farbe. So entstehen vier Rechtecke. Fr jedes Rechteck verfahren wir dann genauso, wie wir es mit dem ganzen Bildschirm gemacht haben, und so weiter, bis der ganze Bildschirm ausgefllt ist. Dann muá bloá die Farbpalette rotiert werden, und man hat sein Plasma. Euer The Real Adok. ^2______________________________________________________________________________ ^0// Plasma coded 1996 by The Real Adok ^0#include ^0#include ^0#include ^0void back2text(void); ^0void char13h(unsigned int letter,unsigned char font,unsigned char col, ^0 unsigned int zseg,unsigned int zoff); ^0void delay(int hi,int lo); ^0void enter13h(void); ^0char point13h(int x,int y); ^0void pset13h(int x,int y,int col); ^0void setpal(char col,char r,char g,char b); ^0void makeplasma(unsigned int x1,unsigned int y1, ^0 unsigned int x2,unsigned int y2); ^0void plasmacol(int xl,int yo,int x,int y,int xr,int yu); ^0void plasmapal(char j); ^0void back2text(void) ^0{ ^0 asm { ^0 mov ax,3 ^0 int 10h ^0 } ^0} ^0void char13h(unsigned int letter,unsigned char font,unsigned char col, ^0 unsigned int zseg,unsigned int zoff) ^0{ ^0 unsigned char temp,y,i; ^0 letter=letter*font; ^0 for(y=0;y<8;y++) ^0 { ^0 asm { ^0 mov bx,word ptr zoff ^0 add bx,word ptr letter ^0 add bl,byte ptr y ^0 mov ax,word ptr zseg ^0 mov es,ax ^0 mov al,byte ptr es:[bx] ^0 mov byte ptr temp,al ^0 } ^0 for(i=0;i<=7;i++) ^0 { ^0 if(temp==(temp|(1<<(7-i)))) pset13h(i,y,col); ^0 } ^0 } ^0} ^0void delay(int hi,int lo) ^0{ ^0 asm { ^0 mov ax,8600h ^0 mov cx,word ptr hi ^0 mov dx,word ptr lo ^0 int 15h ^0 } ^0} ^0void enter13h(void) ^0{ ^0 asm { ^0 mov ax,13h ^0 int 10h ^0 } ^0} ^0char point13h(int x,int y) ^0{ ^0 int temp=320*y+x; ^0 asm { ^0 mov ax,0a000h ^0 mov es,ax ^0 mov bx,word ptr temp ^0 mov al,byte ptr es:[bx] ^0 xor ah,ah ^0 } ^0} ^0void pset13h(int x,int y,int col) ^0{ ^0 int temp=320*y+x; ^0 asm { ^0 mov ax,0a000h ^0 mov es,ax ^0 mov bx,word ptr temp ^0 mov ax,word ptr col ^0 xor ah,ah ^0 mov es:[bx],al ^0 } ^0} ^0void setpal(char col,char r,char g,char b) ^0{ ^0 outp(0x3c8,col); ^0 outp(0x3c9,r); ^0 outp(0x3c9,g); ^0 outp(0x3c9,b); ^0} ^0void makeplasma(unsigned int x1,unsigned int y1, ^0 unsigned int x2,unsigned int y2) ^0{ ^0 int col; ^0 unsigned int x,y; ^0 if((x2-x1)>1) ^0 { ^0 x=(x1+x2)>>1; ^0 y=(y1+y2)>>1; ^0 plasmacol(x1,y1,x,y1,x2,y1); ^0 plasmacol(x2,y1,x2,y,x2,y2); ^0 plasmacol(x1,y2,x,y2,x2,y2); ^0 plasmacol(x1,y1,x1,y,x1,y2); ^0 col=(point13h(x,y1)+point13h(x2,y)+point13h(x,y2)+point13h(x1,y))>>2; ^0 pset13h(x,y,col); ^0 makeplasma(x1,y1,x,y); ^0 makeplasma(x,y,x2,y2); ^0 makeplasma(x1,y,x,y2); ^0 makeplasma(x,y1,x2,y); ^0 } ^0} ^0void plasmacol(int xl,int yo,int x,int y,int xr,int yu) ^0{ ^0 int col; ^0 if(point13h(x,y)==0) ^0 { ^0 col=xr-xl+yu-yo; ^0 col=random(col*3)-col; ^0 col=col+point13h(xl,yo)+point13h(xr,yu)>>1; ^0 if(col<1) col=1; ^0 if(col>189) col=189; ^0 pset13h(x,y,col); ^0 } ^0} ^0void plasmapal(char j) ^0{ ^0 char i; ^0 for(i=1;i<=63;i++) ^0 { ^0 setpal(i+j,0,i,i); ^0 setpal(i+63+j,i,0,53-i); ^0 setpal(i+126+j,43-i,i,i*2); ^0 } ^0} ^0void main(void) ^0{ ^0 unsigned int i=0; ^0 unsigned char j=0; ^0 char direction=1; ^0 enter13h(); ^0 plasmapal(j++); ^0 makeplasma(0,0,319,199); ^0 fflush(stdin); ^0 for(i=0;i<=1000;i++) ^0 { ^0 if(j!=0) plasmapal(j); ^0 j+=direction; ^0 if(j==0) direction*=-1; ^0 delay(0,10000); ^0 } ^0 getchar(); ^0 back2text(); ^0} ^2______________________________________________________________________________