Shadebob-efekti Turbo Pascalille.
(**********************************************) (** SHADEDBOB effect **) (**********************************************) (** Compiled in Turbo Pascal 7 **) (**********************************************) PROGRAM shadebob; USES crt; PROCEDURE doshadebob ( x, y : word ); ASSEMBLER; asm mov ax,0a000h mov es,ax { es-rekisteriin videomuistin osoite } mov di,x mov bx,320 { ruudun leveys 320 pikseliä } mov ax,y mul bx add di,ax { di sisältää nyt osoitteen ruudulla } mov cx,32 { korkeus } @vertical: push cx mov cx,32 { leveys } mov bx,di @horizontal: inc byte ptr [es:bx] { lisätään pisteen väriä } inc bx loop @horizontal add di,320 { seuraava rivi } pop cx loop @vertical end; PROCEDURE setRGBpalette ( color, red, green, blue : byte ); begin PORT [ $3C8 ] := COLOR; { värin numero 0-255 } PORT [ $3C9 ] := RED; { punainen 0-63 } PORT [ $3C9 ] := GREEN; { vihreä 0-63 } PORT [ $3C9 ] := BLUE; { sininen 0-63 } end; PROCEDURE makepalette; { alustetaan väripaletti } var b,b2 : byte; begin b := 0; for b2 := 0 to 31 do begin setRGBpalette ( b, b2*2, b2, 0 ); { oranssi } inc ( b ); end; for b2 := 31 downto 0 do begin setRGBpalette ( b, b2*2, b2, 0 ); inc ( b ); end; for b2 := 0 to 31 do begin setRGBpalette ( b, b2, b2*2, 0 ); { vihreä } inc ( b ); end; for b2 := 31 downto 0 do begin setRGBpalette ( b, b2, b2*2, 0 ); inc ( b ); end; for b2 := 0 to 31 do begin setRGBpalette ( b, 0, b2, b2*2 ); { sininen } inc ( b ); end; for b2 := 31 downto 0 do begin setRGBpalette ( b, 0, b2, b2*2 ); inc ( b ); end; for b2 := 0 to 31 do begin setRGBpalette ( b, b2, b2, b2 ); { harmaa } inc ( b ); end; for b2 := 31 downto 0 do begin setRGBpalette ( b, b2, b2, b2 ); inc ( b ); end; end; VAR x,y,frame : word; s,c : real; begin asm mov ax,13h { alustetaan näyttötila 320x200 pistettä 256 väriä } int 10h end; makepalette; x := 0; { tyhjennetään muuttujat } y := 0; frame := 0; repeat inc (frame); { lisätään framelaskuria } s := sin ( frame*0.001 ) * 0.01; c := cos ( frame*0.001 ) * 0.01; x := round ( sin ( frame*s ) * 128 ) + 144; { x-koordinaatti } y := round ( cos ( frame*c ) * 64 ) + 84; { y-koordinaatti } doshadebob (x,y); { piirretään shadebob } until keypressed; while keypressed do readkey; asm mov ax,03h int 10h end; end.
Sheidbobbi on aina kiva, joskin vähän kulunut efekti.
nonii...
Hieno :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.