💾 Archived View for mirrors.apple2.org.za › archive › ground.icaen.uiowa.edu › apple16 › GSoft › dro… captured on 2023-01-29 at 10:32:09.

View Raw

More Information

-=-=-=-=-=-=-

Path: news1.icaen!news.uiowa.edu!NewsNG.Chicago.Qual.Net!vixen.cso.uiuc.edu!howland.erols.net!math.ohio-state.edu!magnus.acs.ohio-state.edu!usenet.INS.CWRU.Edu!cleveland.Freenet.Edu!fl332
From: fl332@cleveland.Freenet.Edu (John L. Graham)
Newsgroups: comp.sys.apple2
Subject: GSoft BASIC Program: Droplets
Date: 13 Sep 1998 02:31:58 GMT
Organization: Case Western Reserve University, Cleveland, OH (USA)
Lines: 91
Message-ID: <6tfaqu$t8m$1@pale-rider.INS.CWRU.Edu>
Reply-To: fl332@cleveland.Freenet.Edu (John L. Graham)
NNTP-Posting-Host: owl.ins.cwru.edu
Xref: news1.icaen comp.sys.apple2:139384


This is fun little Gsoft BASIC program that randomly draws droplets that
descend across your screen and splash on an imaginary surface. This
example shows how easy it is to mix decimal and hexidecimal numbers 
as well as a combination of GSoft BASIC and Toolbox graphics commands.
This has become my favorite screen saver at work :)
 
=====================================================================
 
! Dimension arrays & variables
DIM RECT_OLD AS RECT
DIM RECT_NEW AS RECT
DIM PALETTE%(3, 15)
 
!-----------
! Functions
!-----------
 
! Returns the RGB value for a given color.
DEF FN RGB(R%, G%, B%) = R% * $100 + G% * $10 + B%
 
! Define color palettes
! 0) Gray
! 1) Red
! 2) Green
! 3) Blue
FOR ENTRY% = 1 TO 15
  COLOR% = 16 - ENTRY%
  RGB% = FN RGB(COLOR%, COLOR%, COLOR%)
  PALETTE%(0, ENTRY%) = RGB%
  RGB% = FN RGB(COLOR%, 0, 0)
  PALETTE%(1, ENTRY%) = RGB%
  RGB% = FN RGB(0, COLOR%, 0)
  PALETTE%(2, ENTRY%) = RGB%
  RGB% = FN RGB(0, 0, COLOR%)
  PALETTE%(3, ENTRY%) = RGB%
NEXT
 
! Start QuickDraw II
HGR
 
! Draw rain drops until a key is pressed.
KEY% = 0
DO UNTIL KEY% > 127
  ! Select a color palette
  PALETTE_ID% = RND (1) * 4
  IF PALETTE_ID% = 4 THEN PALETTE_ID% = 3
 
  ! Load the color palette
  FOR ENTRY% = 1 TO 15
    COLOR% = PALETTE%(PALETTE_ID%, ENTRY%)
    SETCOLORENTRY (0, ENTRY%, COLOR%)
  NEXT
 
  ! Set the splash location.
  X% = RND (1) * 320
  Y% = RND (1) * 200
 
  ! Draw the doplet.
  FOR DROP_Y% = 0 TO Y%
    HCOLOR= 15
    HPLOT X%, DROP_Y%
    HCOLOR= 0
    HPLOT X%, DROP_Y% - 3
  NEXT
 
  ! Draw the splash.
  RECT_OLD.H1 = X%
  RECT_OLD.H2 = X%
  RECT_OLD.V1 = Y%
  RECT_OLD.V2 = Y%
  FOR RADIUS% = 1 TO 15
    RADIUS_X% = RADIUS% * (1 + Y% / 100)
    RADIUS_Y% = RADIUS_X% / 4
    RECT_NEW.H1 = X% - RADIUS_X%
    RECT_NEW.H2 = X% + RADIUS_X%
    RECT_NEW.V1 = Y% - RADIUS_Y%
    RECT_NEW.V2 = Y% + RADIUS_Y%
    COLOR% = RADIUS%
    SET640COLOR (COLOR%)
    FRAMEOVAL (RECT_NEW)
    SET640COLOR (0)
    FRAMEOVAL (RECT_OLD)
    RECT_OLD = RECT_NEW
  NEXT
  SET640COLOR (0)
  FRAMEOVAL (RECT_OLD)
  KEY% = PEEK ($00C000)
LOOP
 
END