TIP: Click on subject to list as thread! ANSI
echo: power_bas
to: ALL
from: KURT KUZBA
date: 1996-02-11 22:28:00
subject: R: Graphics programming

I wrote this for QuickBasic, but thought it might be fun to port
it to PowerBasic and optimize it a bit. It works a bit faster and
the .EXE I produced was about 12K smaller in PB31 than with QB45.
I also turned off Debug and compiled in 80386 code.
'_|_|_|   HPTRAILZ.BAS
'_|_|_|   Happy Trailz. This program demonstrates one method
'_|_|_|   of creating a series of self-overwriting lines to
'_|_|_|   keep the CPU happy when there is nothing else to do.
'_|_|_|   Released to   PUBLIC DOMAIN   by Kurt Kuzba.  (2/10/96)
$lib com-,lpt-,graph+,cga-,ega-,vga+,herc-,fullfloat-,iprint-
$optimize speed
TYPE LNZ
   x1 AS INTEGER: x2 AS INTEGER: y1 AS INTEGER: y2 AS INTEGER
END TYPE
l$ = COMMAND$
IF VAL(l$) < 1 THEN
   INPUT "Number of lines to display (1 TO 20)=> ", l$
END IF
l% = VAL(l$)
IF l% > 20 THEN l% = 20
IF l% < 4 THEN l% = 4
HappyTrails l%
SUB HappyTrails (l%)
   DIM la(1 TO l%, 6) AS LNZ, C(6) AS INTEGER, K(6) AS INTEGER
   DIM dx1(1 TO l%) AS INTEGER, dx2(1 TO l%) AS INTEGER
   DIM dy1(1 TO l%) AS INTEGER, dy2(1 TO l%) AS INTEGER
   C(0) = 15: C(1) = 11: C(2) = 3: C(3) = 9: C(4) = 1: C(5) = 0
   K(0) = 14: K(1) = 13: K(2) = 12: K(3) = 4: K(4) = 5: K(5) = 0
   RANDOMIZE (TIMER + INP(64))
   FOR ln% = 1 TO l%
      dx1(ln%) = 9: dx2(ln%) = 9: dy1(ln%) = 9: dy2(ln%) = 9
      FOR fade% = 0 TO 4
         la(ln%, fade%).x1 = 320 + fade% * 2
         la(ln%, fade%).y1 = 240 + fade% * 2
         la(ln%, fade%).x2 = 320 - fade% * 2
         la(ln%, fade%).y2 = 240 - fade% * 2
      NEXT
   NEXT: SCREEN 12
   k$ = INKEY$
   WHILE k$ = ""
      WAIT &H3DA, 8: WAIT &H3DA, 8, 8
      FOR ln% = 1 TO l%
      k$ = INKEY$: IF k$  "" THEN EXIT FOR
      x1% = la(ln%, 5).x1: y1% = la(ln%, 5).y1
      x2% = la(ln%, 5).x2: y2% = la(ln%, 5).y2
      LINE (x1%, y1%)-(x2%, y2%), 0
         FOR fade% = 5 TO 1 STEP -1
            x1% = la(ln%, fade%).x1: y1% = la(ln%, fade%).y1
            x2% = la(ln%, fade%).x2: y2% = la(ln%, fade%).y2
            la(ln%, fade%).x1 = la(ln%, fade% - 1).x1
            la(ln%, fade%).y1 = la(ln%, fade% - 1).y1
            la(ln%, fade%).x2 = la(ln%, fade% - 1).x2
            la(ln%, fade%).y2 = la(ln%, fade% - 1).y2
            IF (ln% AND 1) = 0 THEN
               LINE (x1%, y1%)-(x2%, y2%), C(fade%)
            ELSE
               LINE (x1%, y1%)-(x2%, y2%), K(fade%)
            END IF
         NEXT
      x1% = la(ln%, 0).x1 + dx1(ln%): y1% = la(ln%, 0).y1 + dy1(ln%)
      x2% = la(ln%, 0).x2 + dx2(ln%): y2% = la(ln%, 0).y2 + dy2(ln%)
      IF x1% > 639 THEN dx1(ln%) = -(RND * 7 + 5): x1% = 639
      IF x1% < 0 THEN dx1(ln%) = RND * 7 + 5: x1% = 0
      IF x2% > 639 THEN dx2(ln%) = -(RND * 7 + 5): x2% = 639
      IF x2% < 0 THEN dx2(ln%) = RND * 7 + 5: x2% = 0
      IF y1% > 479 THEN dy1(ln%) = -(RND * 7 + 5): y1% = 479
      IF y1% < 0 THEN dy1(ln%) = RND * 7 + 5: y1% = 0
      IF y2% > 479 THEN dy2(ln%) = -(RND * 7 + 5): y2% = 479
      IF y2% < 0 THEN dy2(ln%) = RND * 7 + 5: y2% = 0
      la(ln%, 0).x1 = x1%: la(ln%, 0).y1 = y1%
      la(ln%, 0).x2 = x2%: la(ln%, 0).y2 = y2%
      IF (ln% AND 1) = 0 THEN
         LINE (x1%, y1%)-(x2%, y2%), C(0)
      ELSE
         LINE (x1%, y1%)-(x2%, y2%), K(0)
      END IF
      NEXT
   WEND
   SCREEN 0
END SUB
'_|_|_|   end   HPTRAILZ.BAS

---
> ] Their only crime was being delicious........................

---------------

SOURCE: echomail via exec-pc

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.