MS Small Basic: la detección de colisiones en los juegos (código)


a1

La detección de colisiónes 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.

GraphicsWindow.Hide()

gw = 620

gh = 450

GraphicsWindow.BackgroundColor = “LightBlue”

GraphicsWindow.CanResize = “False”

GraphicsWindow.Width = gw

GraphicsWindow.Height = gh

GraphicsWindow.Top = ( Desktop.Height – gh ) / 2

GraphicsWindow.Left = ( Desktop.Width – gw ) / 2

GraphicsWindow.Title = “Dar en el blanco”

GraphicsWindow.Show()

Turtle.Hide()

rx = 40

ry = 20

tortugaX = 315

tortugaY = 300

ancho = 550

alto = 390

CuadroPuntuaciónX = 400

TeclaEntrar = “Return”

diana = 10

vidas = 3

puntuación = 0

GraphicsWindow.FontSize = 30

GraphicsWindow.DrawText(10, 200, “¡Pulse ENTRAR para comenzar el juego!”)

GraphicsWindow.KeyDown = AlPresionar

Sub AlPresionar

  entrar = entrar + 1

  If GraphicsWindow.LastKey = TeclaEntrar And entrar = 1 Then

    GraphicsWindow.Clear()

    GraphicsWindow.FontSize = 12

    Interfaz()

    MoverFigura()

    MostrarPuntuación()

    Controls.ButtonClicked = Disparar

  EndIf 

EndSub

Sub Disparar

  ángulo = Math.Round(Controls.GetTextBoxText(ángulotexto))

  distancia = Math.Round(Controls.GetTextBoxText(distanciatexto))

  presionado = Controls.GetButtonCaption(Controls.LastClickedButton) 

  If presionado = “Disparar” Then

    GraphicsWindow.PenWidth = 0

    Turtle.Angle = ángulo

    Turtle.Move(distancia)

    If Turtle.x > x and Turtle.x < x + 93 and Turtle.y > y and Turtle.y < y + 96 Then

      Shapes.HideShape(diana)

      puntuación = puntuación + 10  

      MostrarPuntuación()

      Program.Delay(500)

      If diana = puntuación Then

        TerminarJuego()

      EndIf

      Controls.SetTextBoxText(ángulotexto, “”)

      Controls.SetTextBoxText(distanciatexto, “”)

      MoverFigura()

    Else

      Program.Delay(1000)

      If vidas > 1 Then

        GraphicsWindow.ShowMessage(“Haga clic en Aceptar para continuar el juego”,”Reintentar”)

        presionado = “Reintentar”

      Else     

        TerminarJuego()

      EndIf   

    EndIf        

  EndIf

  If presionado = “Reintentar” Then   

    vidas = vidas – 1

    If puntuación >= 10 Then

      puntuación = puntuación – 5

    EndIf   

    MostrarPuntuación()

    Controls.SetTextBoxText(ángulotexto, “”)

    Controls.SetTextBoxText(distanciatexto, “”)

    MoverFigura()  

    If vidas < 1 Then

      TerminarJuego()

    EndIf   

  EndIf

EndSub

Sub Interfaz

  imagen = Program.Directory + “\dibujo.png” 

  GraphicsWindow.DrawRectangle(rx, ry, ancho, alto)

  diana = Shapes.AddImage(imagen)

  GraphicsWindow.BrushColor = “Black”

  Shapes.Move(diana, 100, 50)

  Turtle.Show()

  Turtle.X = tortugaX

  Turtle.y = tortugaY 

  Turtle.Angle = 0

  GraphicsWindow.DrawText(rx + 5, alto – 10, “Ángulo:”)

  ángulotexto = Controls.AddTextBox(tortugaX – 205, tortugaY + 70)

  Controls.SetSize(ángulotexto, 40, 30) 

  GraphicsWindow.DrawText(rx + 140, alto – 10, “Distancia:”)

  distanciatexto = Controls.AddTextBox(tortugaX – 60, tortugaY + 70)

  Controls.SetSize(distanciatexto, 40, 30)  

  firebutton = Controls.AddButton(“Disparar”, tortugaX + 20, tortugaY + 70) 

  Controls.SetSize(firebutton, 80, 30)   

Endsub

Sub MoverFigura

  Shapes.ShowShape(diana)

  Turtle.x = tortugaX

  Turtle.Y = tortugaY

  Turtle.Angle = 0

  x = Math.GetRandomNumber(450)

  y = Math.GetRandomNumber(80)

  If x <= 40 Then

    x = 40

    Shapes.Animate(diana, x, y, 1000)

  ElseIf y <= 20 Then

    y = 20

    Shapes.Animate(diana, x, y, 1000)

  Else 

    Shapes.Animate(diana, x, y, 1000)

  EndIf

EndSub

Sub TerminarJuego

  GraphicsWindow.ShowMessage(“Puntuación: ” + puntuación, “FIN”) 

  Program.End()

EndSub

Sub MostrarPuntuación

  GraphicsWindow.FontSize = 14

  GraphicsWindow.BrushColor = “Gray”

  GraphicsWindow.FillRectangle(CuadroPuntuaciónX + 50, CuadroPuntuaciónX – 65, 135, 70)

  GraphicsWindow.BrushColor = “White”

  GraphicsWindow.DrawText(CuadroPuntuaciónX + 60, CuadroPuntuaciónX – 55, “Puntuación: “)

  GraphicsWindow.DrawText(CuadroPuntuaciónX + 150, CuadroPuntuaciónX – 55, puntuación)

  GraphicsWindow.DrawText(CuadroPuntuaciónX + 60, CuadroPuntuaciónX – 20, “Vidas: “)

  GraphicsWindow.DrawText(CuadroPuntuaciónX + 110, CuadroPuntuaciónX – 20, vidas)   

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