'************************************************************************* ' ' kleines Fire-Demo fr PowerBASIC 3.0/3.2 ' ' entwickelt von / developed by : Thomas Gohel ' Fido : Thomas Gohel@2:2410/330.1 ' InterNet: author@pbsound.snafu.de ' Homepage: http://www.snafu.de/~pbsound/ ' ' original PDS-Source : Thomas Wassermann ' '************************************************************************* DEFINT A-Z DIM Pal AS STRING * 768 FireSpalte% = 150 ' Position der Flamme FireZeilenAnfang% = 50 FireZeilen% = 100 ! mov ax, &h0013 ; SCREEN 13 fr PowerBASIC ! int &h10 FOR leer% = 4 TO 766 STEP 3 IF leer% > 12 AND leer% < 50 * 4 THEN INCR Blau% IF leer% >= 47 AND leer% < 50 * 4 THEN blau% = blau% - 2 IF leer% > 24 THEN INCR rot% IF blau% < 0 THEN blau% = 0 IF rot% > 63 THEN rot% = 63 IF leer% > (32 * 4) THEN INCR gruen% IF leer% > (50 * 4) THEN INCR blau% IF blau% > 63 THEN blau% = 63 IF gruen% > 63 THEN gruen% = 63 MID$(pal, leer%, 1) = CHR$(rot%) MID$(pal, leer% + 1, 1) = CHR$(gruen%) MID$(pal, leer% + 2, 1) = CHR$(blau%) NEXT leer% PalSeg% = VARSEG(Pal) PalOff% = VARPTR(Pal) ! mov ax, &h1012 ! mov bx, 0 ! mov cx, 256 ! mov es, PalSeg% ! mov dx, PalOff% ! int &h10 RANDOMIZE TIMER DO LOOP UNTIL LEN(INKEY$) = 0 DO FOR leer% = 1 TO 5 x% = INT(RND * FireZeilen%) + FireZeilenAnfang% f% = INT(RND * 255) PBSET x%, FireSpalte%, f% NEXT leer% FOR leer% = FireSpalte%-1 TO FireSpalte%-90 STEP -1 FOR leer1% = FireZeilenAnfang% TO (FireZeilen% + FireZeilenAnfang%) FFar% = (PBPOINT?(leer1%, leer% + 1) + PBPOINT?(leer1% - 1, leer% + 1) + PBPOINT?(leer1% + 1, leer% + 1)) \ 3 - 1 'Ffar% = (PBPOINT?(leer1% - 1, leer% + 1) + PBPOINT?(leer1% + 1, leer% + 1)) \ 2 - 1 IF Ffar% < 0 THEN Ffar% = 0 PBSET leer1%, leer%, Ffar% NEXT leer1% NEXT leer% LOOP UNTIL LEN(INKEY$) SCREEN 0 END FUNCTION PBPOINT? (BYVAL Zeile%, BYVAL Spalte%) public ' alternativer POINT-Befehl fr PowerBASIC, sollte auch gleich ' um Ecken schneller sein STATIC Farbe? ! mov ax, &ha000 ! mov es, ax ! mov bx, Zeile% ! mov ax, 320 ! mul bx ! mov bx, Spalte% ! add bx, ax ! mov al, es:[bx] ! mov Farbe?, al PBPOINT? = Farbe? END FUNCTION FUNCTION PBSET (BYVAL Zeile%, BYVAL Spalte%, BYVAL Farbe%) public ' alternativer PSET-Befehl fr PowerBASIC, sollte ebenfalls etwas ' schneller sein ! mov ax, &ha000 ! mov es, ax ! mov bx, Zeile% ! mov ax, 320 ! mul bx ! mov bx, Spalte% ! add bx, ax ! mov al, Farbe% ! mov es:[bx], al END FUNCTION