home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Multimedia Jumpstart 1.1a / CD_ROM.BIN / develpmt / source / vbsprsrc / sprdemo.frm < prev    next >
Text File  |  1994-02-15  |  8KB  |  230 lines

  1. VERSION 2.00
  2. Begin Form Form1 
  3.    Caption         =   "Form1"
  4.    ClientHeight    =   3672
  5.    ClientLeft      =   876
  6.    ClientTop       =   1524
  7.    ClientWidth     =   6084
  8.    Height          =   4092
  9.    Left            =   828
  10.    LinkTopic       =   "Form1"
  11.    ScaleHeight     =   306
  12.    ScaleMode       =   3  'Pixel
  13.    ScaleWidth      =   507
  14.    Top             =   1152
  15.    Width           =   6180
  16.    Begin Timer Timer1 
  17.       Interval        =   1
  18.       Left            =   360
  19.       Top             =   240
  20.    End
  21. End
  22. Option Explicit
  23.  
  24. ' interface to sprite DLL
  25. const UPDATE_SCREEN = 1
  26. const NO_UPDATE = 0
  27.  
  28. Declare Function CreateSpriteWindow Lib "VBSPRITE.DLL" (ByVal hWnd As Integer) As Long
  29. Declare Sub DeleteSpriteWindow Lib "VBSPRITE.DLL" (ByVal pSpriteWnd As Long)
  30. Declare Function LoadDIB Lib "VBSPRITE.DLL" (ByVal filename As String) As Long
  31. Declare Sub DeleteDIB Lib "VBSPRITE.DLL" (ByVal pDIB As Long)
  32. Declare Sub SetBackground Lib "VBSPRITE.DLL" (ByVal pSpriteWnd As Long, ByVal pDIB As Long, ByVal bUpdate As Integer)
  33. Declare Function CreateSprite Lib "VBSPRITE.DLL" (ByVal pSpriteWnd As Long, ByVal pSprDib As Long, ByVal initx As Integer, ByVal inity As Integer, ByVal initz As Integer, ByVal bRedraw As Integer) As Long
  34. Declare Sub DeleteSprite Lib "VBSPRITE.DLL" (ByVal pSpriteWnd As Long, ByVal pSprite As Long)
  35. Declare Function SpriteHitTest Lib "VBSPRITE.DLL" (ByVal pSpriteWnd As Long, ByVal x As Integer, ByVal y As Integer) As Long
  36. Declare Sub SetSpritePosition Lib "VBSPRITE.DLL" (ByVal pSpriteWnd As Long, ByVal pSprite As Long, ByVal x As Integer, ByVal y As Integer, ByVal bUpdate As Integer)
  37. Declare Sub SetSpriteZOrder Lib "VBSPRITE.DLL" (ByVal pSpriteWnd As Long, ByVal pSprite As Long, ByVal z As Integer, ByVal bUpdate As Integer)
  38. Declare Sub SetSpriteDIB Lib "VBSPRITE.DLL" (ByVal pSpriteWnd As Long, ByVal pSprite As Long, ByVal pSprDib As Long, ByVal bUpdate As Integer)
  39. Declare Function GetDIBWidth Lib "VBSPRITE.DLL" (ByVal pDIB As Long) As Long
  40. Declare Function GetDIBHeight Lib "VBSPRITE.DLL" (ByVal pDIB As Long) As Long
  41. Declare Sub RepaintSpriteWindow Lib "VBSPRITE.DLL" (ByVal pSpriteWnd As Long)
  42. Declare Sub SetSpriteVisible Lib "VBSPRITE.DLL" (ByVal pSpriteWnd As Long, ByVal pSprite As Long, ByVal bVisible As Integer, ByVal bUpdate As Integer)
  43.  
  44.     ' pointers to sprites 'n' stuff
  45.     Dim pSpriteWnd As Long
  46.     Dim pBkDib As Long
  47.     Dim pNellDib As Long
  48.     Dim pOliviaDib As Long
  49.     Dim pSunDib As Long
  50.     Dim pMoonDib As Long
  51.     Dim pDuckDib1 As Long
  52.     Dim pDuckDib2 As Long
  53.     Dim pDuckDib3 As Long
  54.     Dim pDuckDib4 As Long
  55.     Dim pSprite1 As Long
  56.     Dim pSprite2 As Long
  57.     Dim pSprite3 As Long
  58.     Dim pCurrentSprite As Long
  59.  
  60. Dim bMouseDown As Integer
  61. Dim bSpriteImage As Integer
  62. Dim nDuckImage As Integer
  63. Dim lTime As Long
  64.  
  65. Dim maxx As Integer' size of background
  66. Dim maxy As Integer
  67.  
  68. Dim sp1x As Integer' sprite 1 (sun/moon) vars
  69. Dim sp1y As Integer
  70. Dim sp1vx As Integer
  71. Dim sp1vy As Integer
  72. Dim sp1ay As Integer
  73. Dim sp1w As Integer
  74. Dim sp1h As Integer
  75.  
  76. Dim sp2x As Integer' sprite 2 (ducks) vars
  77. Dim sp2y As Integer
  78. Dim sp2vx As Integer
  79. Dim sp2vy As Integer
  80. Dim sp2ay As Integer
  81. Dim sp2w As Integer
  82. Dim sp2h As Integer
  83.  
  84. Dim sp3x As Integer ' sprite 3 (nell) vars
  85. Dim sp3y As Integer
  86.  
  87. Dim MouseDiffX As Integer ' for dragging sprites
  88. Dim MouseDiffY As Integer
  89.  
  90. Sub Form_Load ()
  91.  
  92.     form1.Visible = True
  93.     pSpriteWnd = CreateSpriteWindow(form1.hWnd)
  94.     pBkDib = LoadDIB("bkgnd.dib")
  95.     SetBackground pSpriteWnd, pBkDib, UPDATE_SCREEN
  96.     pNellDib = LoadDIB("nell.dib")
  97.     pOliviaDib = LoadDIB("olivia.dib")
  98.     pSunDib = LoadDIB("sun.dib")
  99.     pMoonDib = LoadDIB("moon.dib")
  100.     pDuckDib1 = LoadDIB("duck1.dib")
  101.     pDuckDib2 = LoadDIB("duck2.dib")
  102.     pDuckDib3 = LoadDIB("duck3.dib")
  103.     pDuckDib4 = LoadDIB("duck4.dib")
  104.     pSprite1 = CreateSprite(pSpriteWnd, pSunDib, 20, 20, 50, UPDATE_SCREEN)
  105.     pSprite2 = CreateSprite(pSpriteWnd, pDuckDib1, 20, 20, 20, UPDATE_SCREEN)
  106.     pSprite3 = CreateSprite(pSpriteWnd, pNellDib, 20, 20, 30, UPDATE_SCREEN)
  107.  
  108.     maxx = GetDIBWidth(pBkDib)
  109.     maxy = GetDIBHeight(pBkDib)
  110.  
  111.     sp1x = 20 ' initialize sun/moon
  112.     sp1y = 20
  113.     sp1vx = 5
  114.     sp1vy = 25
  115.     sp1ay = 1
  116.  
  117.     sp2x = 20 ' initialize duck
  118.     sp2y = 20
  119.     sp2vx = 40
  120.     sp2vy = 0
  121.     sp2ay = 0
  122.     sp2w = GetDIBWidth(pDuckDib1)
  123.  
  124.     sp3x = 20
  125.     sp3y = 20
  126. End Sub
  127.  
  128. Sub Form_MouseDown (Button As Integer, Shift As Integer, x As Single, y As Single)
  129. bMouseDown = 1
  130. pCurrentSprite = SpriteHitTest(pSpriteWnd, x, y)
  131. If (pCurrentSprite = pSprite3) Then
  132.     MouseDiffX = x - sp3x
  133.     MouseDiffY = y - sp3y
  134. End If
  135. If (pCurrentSprite = pSprite2) Then
  136.     sp2vx = 0
  137.     sp2vy = 0
  138.     sp2ay = 3
  139. End If
  140. If (pCurrentSprite = pSprite1) Then
  141.     sp1vy = sp1vy - 20
  142. End If
  143. End Sub
  144.  
  145. Sub Form_MouseMove (Button As Integer, Shift As Integer, x As Single, y As Single)
  146.     If (bMouseDown And pCurrentSprite = pSprite3) Then
  147.         SetSpritePosition pSpriteWnd, pSprite3, x - MouseDiffX, y - MouseDiffY, UPDATE_SCREEN
  148.     End If
  149. End Sub
  150.  
  151. Sub Form_MouseUp (Button As Integer, Shift As Integer, x As Single, y As Single)
  152. bMouseDown = 0
  153. If (pCurrentSprite = pSprite3) Then
  154.     sp3x = x - MouseDiffX
  155.     sp3y = y - MouseDiffY
  156. End If
  157. End Sub
  158.  
  159. Sub Form_Paint ()
  160.     If (pSpriteWnd) Then RepaintSpriteWindow pSpriteWnd
  161. End Sub
  162.  
  163. Sub Form_Unload (Cancel As Integer)
  164.     DeleteSprite pSpriteWnd, pSprite1
  165.     DeleteSprite pSpriteWnd, pSprite2
  166.     DeleteSprite pSpriteWnd, pSprite3
  167.     DeleteSpriteWindow pSpriteWnd
  168.     pSpriteWnd = 0 ' stop repaints!
  169.     DeleteDIB pOliviaDib
  170.     DeleteDIB pNellDib
  171.     DeleteDIB pSunDib
  172.     DeleteDIB pMoonDib
  173.     DeleteDIB pBkDib
  174. End Sub
  175.  
  176. Sub Timer1_Timer ()
  177. lTime = lTime + 1
  178. nDuckImage = nDuckImage + 1
  179.  
  180. ' rotate duck image, but wait until the duck is moved before it's redrawn
  181. If (nDuckImage > 3) Then nDuckImage = 0
  182. Select Case nDuckImage
  183.     Case 0
  184.         SetSpriteDIB pSpriteWnd, pSprite2, pDuckDib1, NO_UPDATE
  185.     Case 1
  186.         SetSpriteDIB pSpriteWnd, pSprite2, pDuckDib2, NO_UPDATE
  187.     Case 2
  188.         SetSpriteDIB pSpriteWnd, pSprite2, pDuckDib3, NO_UPDATE
  189.     Case 3
  190.         SetSpriteDIB pSpriteWnd, pSprite2, pDuckDib4, NO_UPDATE
  191. End Select
  192.  
  193. ' move sun/moon
  194. sp1x = sp1x + sp1vx
  195. sp1y = sp1y + sp1vy
  196. sp1vy = sp1vy + sp1ay
  197. If sp1x < 0 And sp1vx < 0 Then sp1vx = -sp1vx
  198. If sp1y < 0 And sp1vy < 0 Then sp1vy = -sp1vy
  199. If sp1x + sp1w > maxx And sp1vx > 0 Then sp1vx = -sp1vx
  200. If sp1y + sp1h > maxy And sp1vy > 0 Then sp1vy = -sp1vy * .9
  201. SetSpritePosition pSpriteWnd, pSprite1, sp1x, sp1y, UPDATE_SCREEN
  202.  
  203. 'move duck
  204. sp2x = sp2x + sp2vx
  205. sp2y = sp2y + sp2vy
  206. sp2vy = sp2vy + sp2ay
  207. If sp2x < 0 And sp2vx < 0 Then sp2vx = -sp2vx
  208. If sp2y < 0 And sp2vy < 0 Then sp2vy = -sp2vy
  209. If sp2x + sp2w > maxx And sp2vx > 0 Then sp2vx = -sp2vx
  210. If sp2y + sp2h > maxy And sp2vy > 0 Then sp2vy = -sp2vy * .7
  211. SetSpritePosition pSpriteWnd, pSprite2, sp2x, sp2y, UPDATE_SCREEN
  212.  
  213. ' periodically change sun into moon.
  214. If (lTime > 25) Then
  215.     If (bSpriteImage) Then
  216.         SetSpriteDIB pSpriteWnd, pSprite1, pSunDib, UPDATE_SCREEN
  217.         sp1w = GetDIBWidth(pSunDib) ' get new size so we bounce properly
  218.         sp1h = GetDIBHeight(pSunDib)
  219.         bSpriteImage = False
  220.     Else
  221.         SetSpriteDIB pSpriteWnd, pSprite1, pMoonDib, UPDATE_SCREEN
  222.         sp1w = GetDIBWidth(pMoonDib)
  223.         sp1h = GetDIBHeight(pMoonDib)
  224.         bSpriteImage = True
  225.     End If
  226.     lTime = 0
  227. End If
  228. End Sub
  229.  
  230.