home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / VBBruceLee1721093172004.psc / cBruceLee.cls < prev    next >
Text File  |  2004-03-17  |  32KB  |  1,047 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "cBruceLee"
  6. Attribute VB_GlobalNameSpace = False
  7. Attribute VB_Creatable = True
  8. Attribute VB_PredeclaredId = False
  9. Attribute VB_Exposed = False
  10.  
  11. Option Explicit
  12.  
  13. Dim perfStart As Currency 'these are for timing the animation
  14. Dim perfEnd As Currency
  15. Dim Elapsed As Double
  16.  
  17. Dim perfFreq As Currency
  18.  
  19. Enum eAcciones
  20.     Quieto = 0
  21.     Caer
  22.     Correr
  23.     Agacharse
  24.     Saltar
  25.     SaltoDiagonal
  26.     Pu±etazo
  27.     Patada
  28.     Escalar
  29.     Da±oDePie
  30.     Da±oTumbado
  31. End Enum
  32.  
  33. Dim mAccion As eAcciones
  34.  
  35. Enum eDireccion
  36.     Derecha = 0
  37.     Izquieda
  38. End Enum
  39.  
  40. Dim mDireccion As eDireccion
  41.  
  42. Private Type tSrprites
  43.     TablaPosX As Integer    'Posicion X en el Picture de los sprites
  44.     TablaPosY As Integer    'Posicion Y en el Picture de los sprites
  45.     Ancho As Integer        'Alto del sprite en el Picture de los sprites
  46.     Alto As Integer         'Ancho del sprite en el Picture de los sprites
  47.     TablaMaskPosX As Integer
  48.     TablaMaskPosY As Integer
  49. End Type
  50.  
  51. Private Sprite As tSrprites
  52.  
  53. Dim mAnimacion As Integer
  54. Dim FrameAnterior As Integer
  55. Dim mX As Integer
  56. Dim mY As Integer
  57. Dim mHabitacion As Integer
  58. Dim mOrigenSalto As Integer
  59. Dim mOrigenPatada As Integer
  60. Dim mOrigenSaltoDiagonalX As Integer
  61. Dim mOrigenSaltoDiagonalY As Integer
  62. Dim mCayendoDiagonal As Boolean
  63. Dim mMuere As Boolean
  64. Dim mPuntos As Long
  65. Dim mVidas As Integer
  66. Dim mGameOver As Boolean
  67.  
  68. Private Sub Actualizar_tSprites()
  69.     With Sprite
  70.         Select Case mDireccion
  71.             Case eDireccion.Derecha
  72.                 Select Case mAccion
  73.                     Case eAcciones.Agacharse
  74.                         .Alto = 7
  75.                         .Ancho = 28
  76.                         .TablaPosX = 233
  77.                         .TablaPosY = 17
  78.                         .TablaMaskPosX = 233
  79.                         .TablaMaskPosY = 41
  80.                     Case eAcciones.Caer
  81.                         .Alto = 23
  82.                         .Ancho = 16
  83.                         .TablaPosX = 102
  84.                         .TablaPosY = 1
  85.                         .TablaMaskPosX = 102
  86.                         .TablaMaskPosY = 25
  87.                     Case eAcciones.Correr
  88.                         Select Case mAnimacion
  89.                             Case 1
  90.                                 .Alto = 21
  91.                                 .Ancho = 14
  92.                                 .TablaPosX = 377
  93.                                 .TablaPosY = 3
  94.                                 .TablaMaskPosX = 377
  95.                                 .TablaMaskPosY = 27
  96.                             Case 2
  97.                                 .Alto = 21
  98.                                 .Ancho = 14
  99.                                 .TablaPosX = 392
  100.                                 .TablaPosY = 3
  101.                                 .TablaMaskPosX = 392
  102.                                 .TablaMaskPosY = 27
  103.                         End Select
  104.                     Case eAcciones.Da±oDePie
  105.                         .Alto = 21
  106.                         .Ancho = 15
  107.                         .TablaPosX = 291
  108.                         .TablaPosY = 3
  109.                         .TablaMaskPosX = 291
  110.                         .TablaMaskPosY = 27
  111.  
  112.                     Case eAcciones.Da±oTumbado
  113.                         .Alto = 13
  114.                         .Ancho = 26
  115.                         .TablaPosX = 323
  116.                         .TablaPosY = 11
  117.                         .TablaMaskPosX = 323
  118.                         .TablaMaskPosY = 35
  119.                     
  120.                     Case eAcciones.Escalar
  121.                         .Alto = 22
  122.                         .Ancho = 16
  123.                         .TablaPosX = 199
  124.                         .TablaPosY = 2
  125.                         .TablaMaskPosX = 199
  126.                         .TablaMaskPosY = 26
  127.                     
  128.                     Case eAcciones.Patada
  129.                         .Alto = 17
  130.                         .Ancho = 24
  131.                         .TablaPosX = 119
  132.                         .TablaPosY = 7
  133.                         .TablaMaskPosX = 119
  134.                         .TablaMaskPosY = 31
  135.  
  136.                     Case eAcciones.Pu±etazo
  137.                         .Alto = 20
  138.                         .Ancho = 24
  139.                         .TablaPosX = 35
  140.                         .TablaPosY = 4
  141.                         .TablaMaskPosX = 35
  142.                         .TablaMaskPosY = 28
  143.                     Case eAcciones.Quieto
  144.                         .Alto = 23
  145.                         .Ancho = 16
  146.                         .TablaPosX = 1
  147.                         .TablaPosY = 1
  148.                         .TablaMaskPosX = 1
  149.                         .TablaMaskPosY = 25
  150.                     
  151.                     Case eAcciones.Saltar
  152.                         Select Case mAnimacion
  153.                             Case 1
  154.                                 .Alto = 19
  155.                                 .Ancho = 16
  156.                                 .TablaPosX = 85
  157.                                 .TablaPosY = 5
  158.                                 .TablaMaskPosX = 85
  159.                                 .TablaMaskPosY = 29
  160.                             Case 2
  161.                                 .Alto = 23
  162.                                 .Ancho = 16
  163.                                 .TablaPosX = 102
  164.                                 .TablaPosY = 1
  165.                                 .TablaMaskPosX = 102
  166.                                 .TablaMaskPosY = 25
  167.                         End Select
  168.                     Case eAcciones.SaltoDiagonal
  169.                             .Alto = 20
  170.                             .Ancho = 14
  171.                             .TablaPosX = 169
  172.                             .TablaPosY = 4
  173.                             .TablaMaskPosX = 169
  174.                             .TablaMaskPosY = 28
  175.                     
  176.                 End Select
  177.                 
  178.             Case eDireccion.Izquieda
  179.                 Select Case mAccion
  180.                     Case eAcciones.Agacharse
  181.                         .Alto = 7
  182.                         .Ancho = 28
  183.                         .TablaPosX = 262
  184.                         .TablaPosY = 17
  185.                         .TablaMaskPosX = 262
  186.                         .TablaMaskPosY = 41
  187.                     Case eAcciones.Caer
  188.                         .Alto = 23
  189.                         .Ancho = 16
  190.                         .TablaPosX = 102
  191.                         .TablaPosY = 1
  192.                         .TablaMaskPosX = 102
  193.                         .TablaMaskPosY = 25
  194.                     Case eAcciones.Correr
  195.                         Select Case mAnimacion
  196.                             Case 1
  197.                                 .Alto = 21
  198.                                 .Ancho = 14
  199.                                 .TablaPosX = 407
  200.                                 .TablaPosY = 3
  201.                                 .TablaMaskPosX = 407
  202.                                 .TablaMaskPosY = 27
  203.                             Case 2
  204.                                 .Alto = 21
  205.                                 .Ancho = 10
  206.                                 .TablaPosX = 422
  207.                                 .TablaPosY = 3
  208.                                 .TablaMaskPosX = 422
  209.                                 .TablaMaskPosY = 27
  210.                         End Select
  211.                     Case eAcciones.Da±oDePie
  212.                         .Alto = 21
  213.                         .Ancho = 15
  214.                         .TablaPosX = 307
  215.                         .TablaPosY = 3
  216.                         .TablaMaskPosX = 307
  217.                         .TablaMaskPosY = 27
  218.  
  219.                     Case eAcciones.Da±oTumbado
  220.                         .Alto = 13
  221.                         .Ancho = 26
  222.                         .TablaPosX = 350
  223.                         .TablaPosY = 11
  224.                         .TablaMaskPosX = 350
  225.                         .TablaMaskPosY = 35
  226.                     
  227.                     Case eAcciones.Escalar
  228.                         .Alto = 22
  229.                         .Ancho = 16
  230.                         .TablaPosX = 216
  231.                         .TablaPosY = 2
  232.                         .TablaMaskPosX = 216
  233.                         .TablaMaskPosY = 26
  234.                     
  235.                     Case eAcciones.Patada
  236.                         .Alto = 17
  237.                         .Ancho = 24
  238.                         .TablaPosX = 144
  239.                         .TablaPosY = 7
  240.                         .TablaMaskPosX = 144
  241.                         .TablaMaskPosY = 31
  242.  
  243.                     Case eAcciones.Pu±etazo
  244.                         .Alto = 20
  245.                         .Ancho = 24
  246.                         .TablaPosX = 60
  247.                         .TablaPosY = 4
  248.                         .TablaMaskPosX = 60
  249.                         .TablaMaskPosY = 28
  250.                     Case eAcciones.Quieto
  251.                         .Alto = 23
  252.                         .Ancho = 16
  253.                         .TablaPosX = 18
  254.                         .TablaPosY = 1
  255.                         .TablaMaskPosX = 18
  256.                         .TablaMaskPosY = 25
  257.                     
  258.                     Case eAcciones.Saltar
  259.                         Select Case mAnimacion
  260.                             Case 1
  261.                                 .Alto = 19
  262.                                 .Ancho = 16
  263.                                 .TablaPosX = 85
  264.                                 .TablaPosY = 5
  265.                                 .TablaMaskPosX = 85
  266.                                 .TablaMaskPosY = 29
  267.                             Case 2
  268.                                 .Alto = 23
  269.                                 .Ancho = 16
  270.                                 .TablaPosX = 102
  271.                                 .TablaPosY = 1
  272.                                 .TablaMaskPosX = 102
  273.                                 .TablaMaskPosY = 25
  274.                         End Select
  275.                     Case eAcciones.SaltoDiagonal
  276.                             .Alto = 20
  277.                             .Ancho = 14
  278.                             .TablaPosX = 184
  279.                             .TablaPosY = 4
  280.                             .TablaMaskPosX = 184
  281.                             .TablaMaskPosY = 28
  282.                     
  283.                 End Select
  284.         
  285.         End Select
  286.     End With
  287. End Sub
  288.  
  289. Private Function NumeroAnimaciones() As Integer
  290.     Select Case mAccion
  291.         Case eAcciones.Correr, eAcciones.Saltar
  292.             NumeroAnimaciones = 2
  293.         Case Else
  294.             NumeroAnimaciones = 1
  295.     End Select
  296. End Function
  297.  
  298. Private Sub CambiarFrame()
  299.   Dim TotalAnimaciones As Integer
  300.   Dim TempFrame As Integer
  301.   Static AnteriorEscalar As Integer
  302.   Static test As Single
  303.  
  304.     test = test + (Elapsed)
  305.     If test < 75 Then
  306.         Actualizar_tSprites
  307.         Exit Sub
  308.         
  309.     Else
  310.         test = 0
  311.         
  312.     End If
  313.     TotalAnimaciones = NumeroAnimaciones
  314.     If mAccion = Escalar Then
  315.        If pUp = True Or pDown = True Or pLeft = True Or pRight = True Then
  316.  
  317.             If AnteriorEscalar = 0 Then
  318.                 mDireccion = Derecha
  319.                 AnteriorEscalar = 1
  320.             Else
  321.                 mDireccion = Izquieda
  322.                 AnteriorEscalar = 0
  323.             End If
  324.         End If
  325.     End If
  326.     If TotalAnimaciones = 1 Then
  327.         mAnimacion = 1
  328.     Else
  329.         TempFrame = FrameAnterior + 1
  330.         If TempFrame <= TotalAnimaciones Then
  331.             mAnimacion = TempFrame
  332.         Else
  333.             If mAccion = Saltar Then
  334.                 mAnimacion = 2
  335.                 TempFrame = 2
  336.             Else
  337.                 mAnimacion = 1
  338.                 TempFrame = 1
  339.             End If
  340.         End If
  341.     
  342.     End If
  343.     FrameAnterior = TempFrame
  344.     Actualizar_tSprites
  345. End Sub
  346.  
  347. Public Property Get GameOver() As Boolean
  348.     GameOver = mGameOver
  349. End Property
  350.  
  351. Public Property Let Vidas(ByVal pVidas As Long)
  352.     mVidas = pVidas
  353. End Property
  354.  
  355. Public Property Get Vidas() As Long
  356.     Vidas = mVidas
  357. End Property
  358.  
  359. Public Property Let Puntos(ByVal pPuntos As Long)
  360.     mPuntos = pPuntos
  361. End Property
  362.  
  363. Public Property Get Puntos() As Long
  364.     Puntos = mPuntos
  365. End Property
  366.  
  367. Public Property Get Muere() As Boolean
  368.     Muere = mMuere
  369. End Property
  370.  
  371. Public Property Let Muere(ByVal pMuere As Boolean)
  372.     mMuere = pMuere
  373. End Property
  374.  
  375. Public Property Get Habitacion() As Integer
  376.     Habitacion = mHabitacion
  377. End Property
  378.  
  379. Public Property Let Habitacion(ByVal pHabitacion As Integer)
  380.     mHabitacion = pHabitacion
  381. End Property
  382.  
  383. Public Property Get CayendoDiagonal() As Boolean
  384.     CayendoDiagonal = mCayendoDiagonal
  385. End Property
  386.  
  387. Public Property Let CayendoDiagonal(ByVal pCayendoDiagonal As Boolean)
  388.     mCayendoDiagonal = pCayendoDiagonal
  389. End Property
  390.  
  391. Public Property Get OrigenSaltoDiagonalX() As Integer
  392.     OrigenSaltoDiagonalX = mOrigenSaltoDiagonalX
  393. End Property
  394.  
  395. Public Property Let OrigenSaltoDiagonalX(ByVal pOrigenSaltoDiagonalX As Integer)
  396.     mOrigenSaltoDiagonalX = pOrigenSaltoDiagonalX
  397. End Property
  398.  
  399. Public Property Get OrigenSaltoDiagonalY() As Integer
  400.     OrigenSaltoDiagonalY = mOrigenSaltoDiagonalY
  401. End Property
  402.  
  403. Public Property Let OrigenSaltoDiagonalY(ByVal pOrigenSaltoDiagonalY As Integer)
  404.     mOrigenSaltoDiagonalY = pOrigenSaltoDiagonalY
  405. End Property
  406.  
  407. Public Property Get OrigenSalto() As Integer
  408.     OrigenSalto = mOrigenSalto
  409. End Property
  410.  
  411. Public Property Let OrigenSalto(ByVal pOrigenSalto As Integer)
  412.     mOrigenSalto = pOrigenSalto
  413. End Property
  414.  
  415. Public Property Get OrigenPatada() As Integer
  416.     OrigenPatada = mOrigenPatada
  417. End Property
  418.  
  419. Public Property Let OrigenPatada(ByVal pOrigenPatada As Integer)
  420.     mOrigenPatada = pOrigenPatada
  421. End Property
  422.  
  423. Public Property Get PosX() As Integer
  424.     PosX = mX
  425. End Property
  426.  
  427. Public Property Let PosX(ByVal pPosicion As Integer)
  428.     mX = pPosicion
  429. End Property
  430.  
  431. Public Property Get PosY() As Integer
  432.     PosY = mY
  433. End Property
  434.  
  435. Public Property Let PosY(ByVal pPosicion As Integer)
  436.     mY = pPosicion
  437. End Property
  438.  
  439. Public Property Get Accion() As eAcciones
  440.     Accion = mAccion
  441. End Property
  442.  
  443. Public Property Let Accion(ByVal pAccion As eAcciones)
  444.     mAccion = pAccion
  445.     FrameAnterior = 0
  446. End Property
  447.  
  448. Public Property Get Direccion() As eDireccion
  449.     Direccion = mDireccion
  450. End Property
  451.  
  452. Public Property Let Direccion(ByVal pDireccion As eDireccion)
  453.     mDireccion = pDireccion
  454. End Property
  455.  
  456. Private Sub Class_Initialize()
  457.     FrameAnterior = 0
  458.     mDireccion = Derecha
  459.     mAccion = Quieto
  460.     mX = 30
  461.     mY = 175
  462.     mHabitacion = 1
  463.     mPuntos = 0
  464.     mVidas = 4
  465.     QueryPerformanceFrequency perfFreq
  466. End Sub
  467.  
  468. Private Function CheckCollision(Rect1 As RECT, Rect2 As RECT) As Boolean
  469.     Dim emptyrect As RECT
  470.     
  471.     If IntersectRect(emptyrect, Rect1, Rect2) <> 0 Then
  472.         CheckCollision = True
  473.     End If
  474. End Function
  475.  
  476. Private Function BruceTocoVidas(queHabitacion) As Boolean
  477.   Dim i As Integer
  478.   Dim j As Integer
  479.   Dim BruceRECT As RECT
  480.   Dim LampRECT As RECT
  481.  
  482.   BruceTocoVidas = False
  483.     
  484.     With BruceRECT
  485.         .Left = mX
  486.         .Right = mX + Sprite.Ancho
  487.         If mAccion = Patada Then
  488.             .Top = mY - Sprite.Alto - 7
  489.             .Bottom = mY - 7
  490.         Else
  491.             .Top = mY - Sprite.Alto
  492.             .Bottom = mY
  493.         End If
  494.     End With
  495.     
  496.     With LampRECT
  497.         .Left = 288
  498.         .Top = 128
  499.         .Right = .Left + 16
  500.         .Bottom = .Top + 32
  501.         
  502.     End With
  503.     If CheckCollision(BruceRECT, LampRECT) = True Then
  504.         BruceTocoVidas = True
  505.         Exit Function
  506.     End If
  507.  
  508. End Function
  509.  
  510. Private Function BruceTocoLampara(queHabitacion) As Boolean
  511.   Dim i As Integer
  512.   Dim j As Integer
  513.   Dim BruceRECT As RECT
  514.   Dim LampRECT As RECT
  515.  
  516.     BruceTocoLampara = False
  517.     
  518.     With BruceRECT
  519.         .Left = mX
  520.         .Right = mX + Sprite.Ancho
  521.         If mAccion = Patada Then
  522.             .Top = mY - Sprite.Alto - 7
  523.             .Bottom = mY - 7
  524.         Else
  525.             .Top = mY - Sprite.Alto
  526.             .Bottom = mY
  527.         End If
  528.         
  529.     End With
  530.     
  531.     For i = 1 To Habitaciones(mHabitacion).NumeroLamparas
  532.         If Habitaciones(mHabitacion).Lamparas(i).Estado = True Then
  533.             With LampRECT
  534.                 .Left = Habitaciones(mHabitacion).Lamparas(i).PosX
  535.                 .Top = Habitaciones(mHabitacion).Lamparas(i).PosY
  536.                 Select Case Habitaciones(mHabitacion).Lamparas(i).Tipo
  537.                     Case 0, 1
  538.                         .Right = .Left + 8
  539.                         .Bottom = .Top + 10
  540.                     Case 2
  541.                         .Right = .Left + 6
  542.                         .Bottom = .Top + 12
  543.                 End Select
  544.             End With
  545.  
  546.             If CheckCollision(BruceRECT, LampRECT) = True Then
  547.                 BruceTocoLampara = True
  548.                 Habitaciones(mHabitacion).Lamparas(i).Estado = False
  549.                 Exit Function
  550.             End If
  551.         End If
  552.     Next i
  553. End Function
  554.  
  555. Public Function CheckCambioHabitacion() As Boolean
  556.   Dim i As Integer
  557.   Dim j As Integer
  558.  
  559.   Dim BruceRECT As RECT
  560.   Dim SalidaRECT As RECT
  561.  
  562.     With BruceRECT
  563.         .Left = mX
  564.         .Right = mX + Sprite.Ancho
  565.         If mAccion = Patada Then
  566.             .Top = mY - Sprite.Alto - 7
  567.             .Bottom = mY - 7
  568.         Else
  569.             .Top = mY - Sprite.Alto
  570.             .Bottom = mY
  571.         End If
  572.     End With
  573.  
  574.     For j = 1 To Habitaciones(mHabitacion).NumeroSalidas
  575.         With SalidaRECT
  576.             .Left = Habitaciones(mHabitacion).Salidas(j).OrgX1
  577.             .Top = Habitaciones(mHabitacion).Salidas(j).OrgY1
  578.             .Right = Habitaciones(mHabitacion).Salidas(j).OrgX2
  579.             .Bottom = Habitaciones(mHabitacion).Salidas(j).OrgY2
  580.         End With
  581.         
  582.         If CheckCollision(BruceRECT, SalidaRECT) = True Then
  583.             mX = Habitaciones(mHabitacion).Salidas(j).DestinoX
  584.             mY = Habitaciones(mHabitacion).Salidas(j).DestinoY
  585.             mHabitacion = Habitaciones(mHabitacion).Salidas(j).HabitacionDestino
  586.             CheckCambioHabitacion = True
  587.             Exit Function
  588.         End If
  589.     Next j
  590. End Function
  591.  
  592. Public Sub ChequeaCogerVidas()
  593.   Dim toco As Boolean
  594.  
  595.     If mHabitacion = 15 Then
  596.         If HaCogidoVida = False Then
  597.             toco = BruceTocoVidas(15)
  598.             If toco = True Then
  599.                 HaCogidoVida = True
  600.                 If VisitasVidas > 0 Then
  601.                     mVidas = mVidas + 1
  602.                 End If
  603.             End If
  604.         End If
  605.     End If
  606. End Sub
  607.  
  608. Public Sub ChequeaLamparas()
  609.   Dim toco As Boolean
  610.   Dim retval As Long
  611.     
  612.     toco = BruceTocoLampara(mHabitacion)
  613.     If toco = True Then
  614.         TotalLamparasRecogidas = TotalLamparasRecogidas + 1
  615.         mPuntos = mPuntos + 125
  616.         If CanPlayWave = True Then
  617.             retval = PlaySound(App.Path & "\sonidos\collect.wav", 0, SND_FILENAME Or SND_ASYNC)
  618.         End If
  619.     End If
  620. End Sub
  621.  
  622. Public Sub ChequeaRayos()
  623.   Dim i As Integer
  624.   Dim j As Integer
  625.  
  626.   Dim BruceRECT As RECT
  627.   Dim RayosRECT As RECT
  628.  
  629.     If Habitaciones(mHabitacion).NumeroRayos = 0 Then
  630.         Exit Sub
  631.     End If
  632.     
  633.     With BruceRECT
  634.         .Left = mX
  635.         .Right = mX + Sprite.Ancho
  636.         If mAccion = Patada Then
  637.             .Top = mY - Sprite.Alto - 7
  638.             .Bottom = mY - 7
  639.         Else
  640.             .Top = mY - Sprite.Alto
  641.             .Bottom = mY
  642.         End If
  643.     End With
  644.  
  645.     For j = 1 To Habitaciones(mHabitacion).NumeroRayos
  646.         With RayosRECT
  647.             .Left = Habitaciones(mHabitacion).Rayos(j).tempX
  648.             .Top = Habitaciones(mHabitacion).Rayos(j).PosY1
  649.             .Right = .Left + 8
  650.             .Bottom = .Top + 10
  651.         End With
  652.         
  653.         If Habitaciones(mHabitacion).Rayos(j).Visible = True Then
  654.             If CheckCollision(BruceRECT, RayosRECT) = True Then
  655.                 If mMuere = False Then
  656.                     mMuere = True
  657.                     Habitaciones(mHabitacion).Rayos(j).Stop = True
  658.                 End If
  659.                 Exit Sub
  660.             End If
  661.         End If
  662.         
  663.     Next j
  664. End Sub
  665.  
  666. Public Sub ChequeaLasers()
  667.   Dim i As Integer
  668.   Dim j As Integer
  669.  
  670.   Dim BruceRECT As RECT
  671.   Dim LaserRECT As RECT
  672.  
  673.     If Habitaciones(mHabitacion).NumeroLasers = 0 Then
  674.         Exit Sub
  675.     End If
  676.     
  677.     With BruceRECT
  678.         .Left = mX
  679.         .Right = mX + Sprite.Ancho
  680.         If mAccion = Patada Then
  681.             .Top = mY - Sprite.Alto - 7
  682.             .Bottom = mY - 7
  683.         Else
  684.             .Top = mY - Sprite.Alto
  685.             .Bottom = mY
  686.         End If
  687.     End With
  688.  
  689.     For j = 1 To Habitaciones(mHabitacion).NumeroLasers
  690.         With LaserRECT
  691.             .Left = Habitaciones(mHabitacion).Laser(j).tempX
  692.             .Top = Habitaciones(mHabitacion).Laser(j).PosY1 - 1
  693.             .Right = .Left + 8
  694.             .Bottom = .Top + 1
  695.         End With
  696.         
  697.         If CheckCollision(BruceRECT, LaserRECT) = True Then
  698.             If mMuere = False Then
  699.                 mMuere = True
  700.                 Habitaciones(mHabitacion).Laser(j).Stop = True
  701.             End If
  702.             Exit Sub
  703.         End If
  704.     Next j
  705. End Sub
  706.  
  707. Public Sub ChequeaFuego()
  708.   Dim i As Integer
  709.   Dim j As Integer
  710.  
  711.   Dim BruceRECT As RECT
  712.   Dim FuegoRECT As RECT
  713.  
  714.     If Habitaciones(mHabitacion).NumeroFuegos = 0 Then
  715.         Exit Sub
  716.     End If
  717.     
  718.     With BruceRECT
  719.         .Left = mX
  720.         .Right = mX + Sprite.Ancho
  721.         If mAccion = Patada Then
  722.             .Top = mY - Sprite.Alto - 7
  723.             .Bottom = mY - 7
  724.         Else
  725.             .Top = mY - Sprite.Alto
  726.             .Bottom = mY
  727.         End If
  728.     End With
  729.  
  730.     For j = 1 To Habitaciones(mHabitacion).NumeroFuegos
  731.         With FuegoRECT
  732.             If Habitaciones(mHabitacion).Fuegos(j).Activo = False Then
  733.                 .Left = Habitaciones(mHabitacion).Fuegos(j).PosX
  734.                 .Top = Habitaciones(mHabitacion).Fuegos(j).PosY - 2
  735.                 .Right = Habitaciones(mHabitacion).Fuegos(j).PosX + 8
  736.                 .Bottom = Habitaciones(mHabitacion).Fuegos(j).PosY + 1
  737.             Else
  738.                 .Left = Habitaciones(mHabitacion).Fuegos(j).PosX
  739.                 
  740.                 Select Case Habitaciones(mHabitacion).Fuegos(j).Tipo
  741.                     Case 1
  742.                         .Top = Habitaciones(mHabitacion).Fuegos(j).PosY - 8
  743.                     Case 2
  744.                         .Top = Habitaciones(mHabitacion).Fuegos(j).PosY - 18
  745.                 End Select
  746.                 .Right = Habitaciones(mHabitacion).Fuegos(j).PosX + 8
  747.                 .Bottom = Habitaciones(mHabitacion).Fuegos(j).PosY
  748.             End If
  749.         End With
  750.         
  751.         If CheckCollision(BruceRECT, FuegoRECT) = True Then
  752.             If Habitaciones(mHabitacion).Fuegos(j).Activo = False Then
  753.                 Habitaciones(mHabitacion).Fuegos(j).Activo = True
  754.             Else
  755.                 If Habitaciones(mHabitacion).Fuegos(j).Espera >= 3 Then
  756.                     If mMuere = False Then
  757.                         mMuere = True
  758.                     End If
  759.                 End If
  760.             End If
  761.             Exit Sub
  762.         End If
  763.  
  764.         
  765.     Next j
  766. End Sub
  767.  
  768. Public Sub ReposicionaMuerteBruce()
  769.   Dim i As Integer
  770.     
  771.     If mGameOver = False Then
  772.         mVidas = mVidas - 1
  773.     End If
  774.     If mVidas < 0 Then
  775.         mGameOver = True
  776.         If frmMain.ImgGameOver.Visible = False Then
  777.             frmMain.ImgGameOver.Visible = True
  778.         End If
  779.     End If
  780.     
  781.     For i = 1 To Habitaciones(mHabitacion).NumeroLasers
  782.         Habitaciones(mHabitacion).Laser(i).Stop = False
  783.     Next i
  784.     
  785.     For i = 1 To Habitaciones(mHabitacion).NumeroRayos
  786.         Habitaciones(mHabitacion).Rayos(i).Stop = False
  787.     Next i
  788.  
  789.     Select Case mHabitacion
  790.         Case 4
  791.             If mX < 270 Then
  792.                 mX = Habitaciones(2).Salidas(4).DestinoX
  793.                 mY = Habitaciones(2).Salidas(4).DestinoY
  794.             Else
  795.                 mX = Habitaciones(9).Salidas(1).DestinoX
  796.                 mY = Habitaciones(9).Salidas(1).DestinoY
  797.             End If
  798.         
  799.         Case 5
  800.             mX = Habitaciones(4).Salidas(1).DestinoX
  801.             mY = 155
  802.         
  803.         Case 6
  804.             If mY < 100 Then
  805.                 mX = Habitaciones(5).Salidas(2).DestinoX
  806.                 mY = Habitaciones(5).Salidas(2).DestinoY
  807.             Else
  808.                 mX = Habitaciones(7).Salidas(2).DestinoX
  809.                 mY = Habitaciones(7).Salidas(2).DestinoY
  810.             End If
  811.         
  812.         Case 7
  813.             mX = Habitaciones(6).Salidas(1).DestinoX
  814.             mY = Habitaciones(6).Salidas(1).DestinoY
  815.         
  816.         Case 8
  817.             If mY > 160 Then
  818.                 mX = Habitaciones(7).Salidas(3).DestinoX
  819.                 mY = Habitaciones(7).Salidas(3).DestinoY
  820.             Else
  821.                 mX = Habitaciones(7).Salidas(4).DestinoX
  822.                 mY = Habitaciones(7).Salidas(4).DestinoY
  823.             End If
  824.         
  825.         Case 9
  826.             mX = 263
  827.             mY = 154
  828.         
  829.         Case 10
  830.             mX = Habitaciones(3).Salidas(2).DestinoX
  831.             mY = Habitaciones(3).Salidas(2).DestinoY
  832.         
  833.         Case 11
  834.             mX = Habitaciones(10).Salidas(2).DestinoX
  835.             mY = Habitaciones(10).Salidas(2).DestinoY
  836.         
  837.         Case 12
  838.             mX = Habitaciones(11).Salidas(2).DestinoX
  839.             mY = Habitaciones(11).Salidas(2).DestinoY
  840.         
  841.         Case 13
  842.             mX = Habitaciones(12).Salidas(2).DestinoX
  843.             mY = Habitaciones(12).Salidas(2).DestinoY
  844.         
  845.         Case 14
  846.             If mY < 115 Then
  847.                 mX = Habitaciones(12).Salidas(3).DestinoX
  848.                 mY = Habitaciones(12).Salidas(3).DestinoY
  849.             Else
  850.                 mX = Habitaciones(13).Salidas(1).DestinoX
  851.                 mY = Habitaciones(13).Salidas(1).DestinoY
  852.             
  853.             End If
  854.         
  855.         Case 15
  856.             If mY < 115 Then
  857.                 mX = Habitaciones(12).Salidas(4).DestinoX
  858.                 mY = Habitaciones(12).Salidas(4).DestinoY
  859.             Else
  860.                 mX = Habitaciones(14).Salidas(2).DestinoX
  861.                 mY = Habitaciones(14).Salidas(2).DestinoY
  862.             
  863.             End If
  864.         
  865.         Case 16
  866.             mX = Habitaciones(13).Salidas(3).DestinoX
  867.             mY = Habitaciones(13).Salidas(3).DestinoY
  868.         
  869.         Case 17
  870.             mX = Habitaciones(16).Salidas(1).DestinoX
  871.             mY = Habitaciones(16).Salidas(1).DestinoY
  872.         
  873.         Case 18
  874.             mX = Habitaciones(17).Salidas(2).DestinoX
  875.             mY = Habitaciones(17).Salidas(2).DestinoY
  876.     End Select
  877.     
  878.     If mGameOver = True Then
  879.         mMuere = True
  880.     Else
  881.         mMuere = False
  882.     End If
  883.     
  884.     mAccion = Quieto
  885.     mCayendoDiagonal = False
  886. End Sub
  887.  
  888. Public Sub Render()
  889.     
  890.     SDC = frmMain.Picture1.hDC
  891.     DDC = frmMain.PicWork.hDC
  892.  
  893.     Timer
  894.     
  895.     If mMuere = False Then
  896.         CambiarFrame
  897.     End If
  898.     
  899.     With Sprite
  900.         If mAccion = Patada Then
  901.             BitBlt DDC, mX, mY - .Alto - 7, .Ancho, .Alto, SDC, .TablaMaskPosX, .TablaMaskPosY, SRCAND
  902.             BitBlt DDC, mX, mY - .Alto - 7, .Ancho, .Alto, SDC, .TablaPosX, .TablaPosY, SRCPAINT
  903.         Else
  904.             If mAccion = Pu±etazo And mDireccion = Izquieda Then
  905.                 BitBlt DDC, mX - 8, mY - .Alto, .Ancho, .Alto, SDC, .TablaMaskPosX, .TablaMaskPosY, SRCAND
  906.                 BitBlt DDC, mX - 8, mY - .Alto, .Ancho, .Alto, SDC, .TablaPosX, .TablaPosY, SRCPAINT
  907.             Else
  908.                 BitBlt DDC, mX, mY - .Alto, .Ancho, .Alto, SDC, .TablaMaskPosX, .TablaMaskPosY, SRCAND
  909.                 BitBlt DDC, mX, mY - .Alto, .Ancho, .Alto, SDC, .TablaPosX, .TablaPosY, SRCPAINT
  910.             End If
  911.         End If
  912.     End With
  913.        
  914. End Sub
  915.  
  916. Private Sub Timer()
  917.     ''This subroutine will perform all of our timing
  918.     ''The results are used for animation and movement
  919.     
  920.     'Get current time
  921.     QueryPerformanceCounter perfStart
  922.     
  923.     'Calculate elapsed time
  924.     Elapsed = (perfStart - perfEnd) / perfFreq * 1000
  925.     
  926.     'Now, we start the timer again, this will be used to calculate
  927.     'how much time has passed since we last called this subroutine.
  928.     QueryPerformanceCounter perfEnd
  929.     
  930.     
  931. End Sub
  932.  
  933. Public Sub ChequeaPinchos()
  934. On Error GoTo ErrorHandler
  935.   Dim i As Integer
  936.   Dim j As Integer
  937.   Dim docheck As Boolean
  938.     
  939.     For j = 1 To Sprite.Ancho
  940.     For i = -1 To Sprite.Alto
  941.         
  942.         If (mX + j > 0 And mX + j < bmpBuff.bmWidth - 1) And (mY + i > 0 And (bmpBuff.bmHeight - mY + i) < bmpBuff.bmHeight) Then
  943.             If pictBuff(mX + j, bmpBuff.bmHeight - mY + i) = 3 Then
  944.                 mMuere = True
  945.                 Exit For
  946.             End If
  947.         End If
  948.  
  949.     Next i
  950.     Next j
  951.     Exit Sub
  952. ErrorHandler:
  953.     'Debug.Print "XXX"
  954.  
  955. End Sub
  956.  
  957. Public Function ImposibleMoverIzquierda() As Boolean
  958. On Error Resume Next
  959.   Dim i As Integer
  960.   Dim j As Integer
  961.     
  962.     ImposibleMoverIzquierda = False
  963.     For j = 1 To 3
  964.         For i = 1 To Sprite.Alto
  965.             If pictBuff(mX - j, bmpBuff.bmHeight - mY + i) = 0 Then
  966.                 ImposibleMoverIzquierda = True
  967.             End If
  968.             Exit Function
  969.         Next i
  970.     Next j
  971. End Function
  972.  
  973. Public Function ImposibleMoverDerecha() As Boolean
  974. On Error Resume Next
  975.   Dim i As Integer
  976.     ImposibleMoverDerecha = False
  977.     For i = 1 To 3
  978.         If pictBuff(mX + Sprite.Ancho + i, bmpBuff.bmHeight - mY) = 0 Then
  979.             ImposibleMoverDerecha = True
  980.             Exit For
  981.         End If
  982.     Next i
  983. End Function
  984.  
  985. Public Sub SubeUnaLinea()
  986. On Error Resume Next
  987. Dim i As Integer
  988.     For i = 1 To Sprite.Ancho
  989.         If pictBuff(mX + i, bmpBuff.bmHeight - mY - 1) = 0 Then
  990.             mY = mY - 1
  991.             Exit For
  992.         End If
  993.     Next i
  994.  
  995. End Sub
  996.  
  997. Public Function EstaCayendo() As Boolean
  998. On Error Resume Next
  999. Dim i As Integer
  1000.     EstaCayendo = True
  1001.     For i = 1 To Sprite.Ancho
  1002.         If pictBuff(mX + i, bmpBuff.bmHeight - mY - 1) <> 4 Then
  1003.             EstaCayendo = False
  1004.             Exit For
  1005.         End If
  1006.     Next i
  1007. End Function
  1008.  
  1009. Public Function EstaSobreCatarata() As Boolean
  1010. On Error GoTo ErrorHandler 'Resume Next
  1011.   Dim i As Integer
  1012.   Dim j As Integer
  1013.     
  1014.     EstaSobreCatarata = False
  1015.     For j = 1 To Sprite.Ancho
  1016.         For i = -1 To Sprite.Alto
  1017.             If pictBuff(mX + j, bmpBuff.bmHeight - mY + i) = 2 Then
  1018.                 EstaSobreCatarata = True
  1019.                 Exit For
  1020.             End If
  1021.         Next i
  1022.     Next j
  1023. ErrorHandler:
  1024. End Function
  1025.  
  1026. Public Function EstaEscalando() As Boolean
  1027. On Error Resume Next
  1028. Dim i As Integer
  1029.     EstaEscalando = False
  1030.     For i = 1 To Sprite.Ancho
  1031.         If pictBuff(mX + i, bmpBuff.bmHeight - mY + Sprite.Alto) = 1 Or pictBuff(mX + i, bmpBuff.bmHeight - mY + Sprite.Alto) = 2 Then
  1032.             EstaEscalando = True
  1033.             Exit For
  1034.         End If
  1035.     
  1036.         If pictBuff(mX + i, bmpBuff.bmHeight + (Sprite.Alto \ 2) - mY + -1) = 1 Or pictBuff(mX + i, bmpBuff.bmHeight + (Sprite.Alto \ 2) - mY + -1) = 2 Then
  1037.             EstaEscalando = True
  1038.             Exit For
  1039.         End If
  1040.         
  1041.         If pictBuff(mX + i, bmpBuff.bmHeight - mY + -1) = 1 Or pictBuff(mX + i, bmpBuff.bmHeight - mY + -1) = 2 Then
  1042.             EstaEscalando = True
  1043.             Exit For
  1044.         End If
  1045.     Next i
  1046. End Function
  1047.