MS Small Basic: ¿Qué es una detección de colisiones? (código)


colision1

En general, la detección de colisiones trata de cómo determinar la intersección de dos objetos en movimiento.

La detección de colisiones en los juegos necesita de los siguientes pasos:

  •  Selección de dos objetos para la prueba de colisión.
  •  Comprobación de si se produjo una colisión entre los objetos identificados o no.
  • Se dice que dos objetos chocan cuando entran en contacto el uno con el otro. Los objetos pueden moverse después del choque o pueden detenerse, dependiendo del tipo de colisión.

La detección de colisión es un aspecto básico de los juego de dos y tres dimensiones. Los algoritmos ayudan a detectar la colisión. La mayoría de juegos utilizan detección de colisiones una vez que esta se ha producido.

El siguiente juego contiene dos objetos: la tortuga y el objetivo. El jugador tiene que hacer que la tortuga golpee el objetivo, introduciento para ello el ángulo correcto y la distancia.

Código:

  1. ‘ Copyright (c) Microsoft Corporation.  Todos los derechos reservados.
  2. GraphicsWindow.Hide()
  3. gw = 620
  4. gh = 450
  5. GraphicsWindow.BackgroundColor = “LightBlue”
  6. GraphicsWindow.CanResize = “False”
  7. GraphicsWindow.Width = gw
  8. GraphicsWindow.Height = gh
  9. GraphicsWindow.Top = ( Desktop.Height – gh ) / 2
  10. GraphicsWindow.Left = ( Desktop.Width – gw ) / 2
  11. GraphicsWindow.Title = “Dar en el blanco”
  12. GraphicsWindow.Show()
  13. Turtle.Hide()
  14. rx = 40
  15. ry = 20
  16. tortugaX = 315
  17. tortugaY = 300
  18. ancho = 550
  19. alto = 390
  20. CuadroPuntuaciónX = 400
  21. TeclaEntrar = “Return”
  22. diana = 10
  23. vidas = 3
  24. puntuación = 0
  25. GraphicsWindow.FontSize = 30
  26. GraphicsWindow.DrawText(10, 200, “¡Pulse ENTRAR para comenzar el juego!”)
  27. GraphicsWindow.KeyDown = AlPresionar
  28. Sub AlPresionar
  29. entrar = entrar + 1
  30. If GraphicsWindow.LastKey = TeclaEntrar And entrar = 1 Then
  31. GraphicsWindow.Clear()
  32. GraphicsWindow.FontSize = 12
  33. Interfaz()
  34. MoverFigura()
  35. MostrarPuntuación()
  36. Controls.ButtonClicked
    = Disparar
  37. EndIf 
  38. EndSub
  39. Sub Disparar
  40. ángulo = Math.Round(Controls.GetTextBoxText(ángulotexto))
  41. distancia = Math.Round(Controls.GetTextBoxText(distanciatexto))
  42. presionado = Controls.GetButtonCaption(Controls.LastClickedButton)
  43. If presionado = “Disparar” Then
  44. GraphicsWindow.PenWidth = 0
  45. Turtle.Angle = ángulo
  46. Turtle.Move(distancia)
  47. If Turtle.x > x and Turtle.x < x + 93 and Turtle.y > y and Turtle.y < y + 96 Then
  48. Shapes.HideShape(diana)
  49. puntuación = puntuación + 10
  50. MostrarPuntuación()
  51. Program.Delay(500)
  52. If diana = puntuación Then
    1. TerminarJuego()
    2. EndIf
    3. Controls.SetTextBoxText(ángulotexto, “”)
    4. Controls.SetTextBoxText(distanciatexto, “”)
    5. MoverFigura()
    6. Else
    7. Program.Delay(1000)
    8. If vidas > 1 Then
      1. GraphicsWindow.ShowMessage(“Haga clic en Aceptar para continuar el juego”,”Reintentar”)
      2. presionado = “Reintentar”
      3. Else     
        1. TerminarJuego()
        2. EndIf   
        3. EndIf        
        4. EndIf 
  53. If presionado = “Reintentar” Then   
  54. vidas = vidas – 1
  55. If puntuación >= 10 Then
  56. puntuación = puntuación – 5
  57. EndIf   
  58. MostrarPuntuación()
  59. Controls.SetTextBoxText(ángulotexto, “”)
  60. Controls.SetTextBoxText(distanciatexto, “”)
  61. MoverFigura()
  62. If vidas < 1 Then
  63. TerminarJuego()
  64. EndIf   
  65. EndIf
  66. EndSub
  67. Sub Interfaz
  68. imagen = Program.Directory + “\dibujo.png”
  69. GraphicsWindow.DrawRectangle(rx, ry, ancho, alto)
  70. diana = Shapes.AddImage(imagen)
  71. GraphicsWindow.BrushColor = “Black”
  72. Shapes.Move(diana, 100, 50)
  73. Turtle.Show()
  74. Turtle.X = tortugaX
  75. Turtle.y = tortugaY
  76. Turtle.Angle = 0
  77. GraphicsWindow.DrawText(rx + 5, alto – 10, “Ángulo:”)
  78. ángulotexto = Controls.AddTextBox(tortugaX – 205, tortugaY + 70)
  79. Controls.SetSize(ángulotexto, 40, 30)
  80. GraphicsWindow.DrawText(rx + 140, alto – 10, “Distancia:”)
  81. distanciatexto = Controls.AddTextBox(tortugaX – 60, tortugaY + 70)
  82. Controls.SetSize(distanciatexto, 40, 30)
  83. firebutton = Controls.AddButton(“Disparar”, tortugaX + 20, tortugaY + 70)
  84. Controls.SetSize(firebutton, 80, 30)
  85. Endsub
  86. Sub MoverFigura
  87. Shapes.ShowShape(diana)
  88. Turtle.x = tortugaX
  89. Turtle.Y = tortugaY
  90. Turtle.Angle = 0
  91. x = Math.GetRandomNumber(450)
  92. y = Math.GetRandomNumber(80)
  93. If x <= 40 Then
  94. x = 40
  95. Shapes.Animate(diana, x, y, 1000)
  96. ElseIf y <= 20 Then
  97. y = 20
  98. Shapes.Animate(diana, x, y, 1000)
  99. Else 
  100. Shapes.Animate(diana, x, y, 1000)
  101. EndIf
  102. EndSub
  103. Sub TerminarJuego
  104. GraphicsWindow.ShowMessage(“Puntuación: ” + puntuación, “FIN”)
  105. Program.End()
  106. EndSub
  107. Sub MostrarPuntuación
  108. GraphicsWindow.FontSize = 14
  109. GraphicsWindow.BrushColor = “Gray”
  110. GraphicsWindow.FillRectangle(CuadroPuntuaciónX + 50, CuadroPuntuaciónX – 65, 135, 70)
  111. GraphicsWindow.BrushColor = “White”
  112. GraphicsWindow.DrawText(CuadroPuntuaciónX + 60, CuadroPuntuaciónX – 55, “Puntuación: “)
  113. GraphicsWindow.DrawText(CuadroPuntuaciónX + 150, CuadroPuntuaciónX – 55, puntuación)
  114. GraphicsWindow.DrawText(CuadroPuntuaciónX + 60, CuadroPuntuaciónX – 20, “Vidas: “)
  115. GraphicsWindow.DrawText(CuadroPuntuaciónX + 110, CuadroPuntuaciónX – 20, vidas)
  116. EndSub

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s