[futurebasic] COOL GLASS OF WATER WITH ICE CUBES

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : November 1997 : Group Archive : Group : All Groups

From: MattBeedle@...
Date: Sat, 22 Nov 1997 16:39:27 -0500 (EST)
Here is a code I did for fun.
Enjoy this COOL GLASS OF WATER WITH ICE CUBES!

'----------------------------

COMPILE 1,_caseInsensitive

DIM MyGWorld&
DIM TheOldWorld&
DIM TheOldDevice&
DIM GrafPortT,GrafPortL,GrafPortB,GrafPortR

_cubes = 3

DIM RECORD myCube
  DIM yes
  DIM xstep
  DIM ystep
  DIM dirX
  DIM dirY
  DIM whereX
  DIM whereY
  DIM offsetX
  DIM offsetY
  DIM sizeX
  DIM sizeY
  DIM speed
DIM END RECORD .myCube
DIM c.myCube (_cubes)
END GLOBALS

WINDOW 1,"Matt's Cubes",(0,0)-(256,288),_docNoGrow
GrafPortT = 0
GrafPortL = 0
GrafPortR = 256
GrafPortB = 288
CALL GETGWORLD(TheOldWorld&,TheOldDevice&)
OSErr = FN NEWGWORLD(MyGWorld&,SYSTEM(_Crntdepth),GrafPortT,0,0,0)


LOCAL FN drawCubes
  
  LONG FN getX (myadd)
    myVar = c.whereX(id)+.5*(SIN((myadd+c.xstep
(id))/360*2*ATN(1)<<2)*c.sizeX(id)/ATN(1)<<2)
    'myVar = 256+.5*(SIN(myVar/360*2*ATN(1)<<2)*45/ATN(1)<<2)
  END FN = myVar
  
  LONG FN getY (myadd)
    myVar = c.whereY(id)+.5*(COS((myadd+c.ystep
(id))/360*2*ATN(1)<<2)*c.sizeY(id)/ATN(1)<<2)
    'myVar = 128+.5*(COS(myVar/360*2*ATN(1)<<2)*45/ATN(1)<<2)
  END FN = myVar
  
  CALL SETGWORLD(MyGWorld&,0)
  PEN ,,,,0
  BOX FILL 0,0 TO 256,288
  COLOR _zBlue
  BOX FILL 31,70 TO 199,255
  COLOR _zYellow
  PLOT 30,4 TO 60,250
  PLOT 32,6 TO 62,252
  COLOR _zBlack
  PEN ,,,,19
  FOR id = 1 TO _cubes
    LONG IF c.yes (id)
      IF c.dirX (id) = 1 THEN c.xstep (id) = c.xstep (id) - c.speed (id)
      IF c.dirX (id) = 2 THEN c.xstep (id) = c.xstep (id) + c.speed (id)
      IF c.dirY (id) = 1 THEN c.ystep (id) = c.ystep (id) - c.speed (id)
      IF c.dirY (id) = 2 THEN c.ystep (id) = c.ystep (id) + c.speed (id)
      oX = c.offsetX(id)
      oY = c.offsetY(id)
      aX = FN getX (0)
      aY = FN getY (0)
      bX = FN getX (90)
      bY = FN getY (90)
      cX = FN getX (180)
      cY = FN getY (180)
      dX = FN getX (270)
      dY = FN getY (270)
      PLOT aX,aY TO bX,bY TO cX,cY TO dX,dY TO aX,aY
      PLOT aX+oX,aY+oY TO bX+oX,bY+oY TO cX+oX,cY+oY TO dX+oX,dY+oY TO
aX+oX,aY+oY
      PLOT aX,aY TO aX+oX,aY+oY
      PLOT bX,bY TO bX+oX,bY+oY
      PLOT cX,cY TO cX+oX,cY+oY
      PLOT dX,dY TO dX+oX,dY+oY
      IF c.xstep (id) > 360 THEN c.xstep (id) = 1
      IF c.ystep (id) > 360 THEN c.ystep (id) = 1
      IF c.xstep (id) < 1 THEN c.xstep (id) = 360
      IF c.ystep (id) < 1 THEN c.ystep (id) = 360
    END IF
  NEXT
  BOX 30,30 TO 200,256
  CALL SETGWORLD(TheOldWorld&,TheOldDevice&)
  CALL COPYBITS(#MyGWorld& + 2,#TheOldWorld& +
2,GrafPortT,GrafPortT,_srcCopy,0)
END FN

LOCAL FN makeCube
(myxstep,myystep,mydirX,mydirY,myspeed,myX,myY,mySizeX,mySizeY,myoffsetX,myoff
setY)
  FOR id = 1 TO _cubes
    LONG IF c.yes (id) = 0
      c.yes (id) = 1
      c.xstep (id) = myxstep
      c.ystep (id) = myystep
      c.dirX (id) = mydirX
      c.dirY (id) = mydirY
      c.x (id) = myXStep
      c.speed (id) = myspeed
      c.whereX (id) = myX
      c.whereY (id) = myY
      c.sizeX (id) = mySizeX
      c.sizeY (id) = mySizeY
      c.offsetX (id) = myoffsetX
      c.offsetY (id) = myoffsetY
      id = _cubes
    END IF
  NEXT
END FN

'xstep
'ystep
'mydirX
'mydirY
'myspeed
'myX
'myY
'mySizeX
'mySizeY
'myoffsetX
'myoffsetY
FN makeCube (360,360,2,2,5,70 ,100,8 ,8 ,16,16)
FN makeCube (360,360,2,2,2,90 ,170,10,10,20,20)
FN makeCube (1  ,1  ,1,1,2,140,90 ,12,12,24,24)

DO
  FN drawCubes
UNTIL FN BUTTON

CALL DISPOSEGWORLD (MyGWorld&)