APLICANDO ESTRUCTURAS PARA JUEGOS CON 2 JUGADORES

Ahora vamos a desarrollar un ejemplo que muestra como puede un juego manejar a dos jugadores a través del mismo teclado.

Program DosJugadores

    // Las estructuras son usadas para almacenar toda la información

    // concerniente al Sprite que un jugador va a utilizar

    Structure SpriteJugador

        Nombre As String

        Imagen As String

        X As Decimal

        Y As Decimal

    End Structure

    Method Main()

        // De esta forma se tendrá un Sprite distinto para cada uno

        // de los dos jugadores, pero controladas individualmente con el teclado

        Var Ovni As SpriteJugador

        Var EstacionEspacial As SpriteJugador

        // SetDeviceCoordinates() hace que KPL utilice un sistema de

        // coordenadas donde la esquina superior izquierda es el punto (0,0)

        SetDeviceCoordinates()

        // El Jugador Uno va a controlar el Ovni

        Ovni.X = 400

        Ovni.Y = 240

        Ovni.Nombre = "Jugador Uno"

        Ovni.Imagen = "UFO.GIF"

        // El Jugador Dos va a controlar la Estación Espacial

        EstacionEspacial.X = 150

        EstacionEspacial.Y = 200

        EstacionEspacial.Nombre = "Jugador Dos"

        EstacionEspacial.Imagen = "SpaceStation.GIF"

        LoadSprite(Ovni.Nombre, Ovni.Imagen )

        MoveSpriteToPoint(Ovni.Nombre, Ovni.X, Ovni.Y )

        // Las 2 imágenes usada solo contiene 6 cuadros de animación, lo que crea el efecto de giro sobre su

        // eje. Para crear la animación se va a utilizar un arreglo de 6 valores Enteros, que le digan al Sprite

        // que tanto tiempo desplegar un cuadro de animación antes de pasar al siguiente.

        Var LineaDeTiempo As Int[6]

        LineaDeTiempo [1] = 50

        LineaDeTiempo [2] = 50

        LineaDeTiempo [3] = 50

        LineaDeTiempo [4] = 50

        LineaDeTiempo [5] = 50

        LineaDeTiempo [6] = 50

        // Se le introduce la línea de tiempo al Ovni

        SetSpriteAnimationTimeline(Ovni.Nombre, True, LineaDeTiempo)

        // Se despliega el Ovni

        ShowSprite( Ovni.Nombre )

        LoadSprite(EstacionEspacial.Nombre, EstacionEspacial.Imagen )

        MoveSpriteToPoint(EstacionEspacial.Nombre, EstacionEspacial.X, EstacionEspacial.Y)

        // Se le introduce la línea de tiempo a la Estación Espacial

        SetSpriteAnimationTimeline(EstacionEspacial.Nombre,True, LineaDeTiempo)

        // Se despliega la Estación Espacial

        ShowSprite(EstacionEspacial.Nombre )

        // El uso de estas 2 variables se explica más adelante

        Var UltimaRevision As Decimal = 0.0

        Var HoraActual As Decimal

        // Este ciclo se repetirá indefinidamente hasta que el usuario oprima el botón de detener la
        // aplicación

        // localizado en la esquina superior izquierda de la ventana

        While True

            // Se revisa la hora actual del sistema

            HoraActual = TickCount()

            // Si no han pasado 50 milisegundos desde la última vez  que se revisó no se hace nada.

            // Esto se realiza con el objetivo de reducir la velocidad de operación del juego a una que los

            // humanos puedan manejar, debido a que las computadoras son tan rápidas que ejecutarían
            // todos

            // los pasos más rápido que lo que un humano podría responder.

            If HoraActual - UltimaRevision > 50 Then

            // El Jugador Uno controla el Ovni utilizando las flechas en el teclado →↑←↓

            If IsKeyDown("Right") Then

                Ovni.X = Ovni.X + 10        

            End If

            If IsKeyDown("Left") Then

                Ovni.X = Ovni.X - 10         

            End If

            If IsKeyDown("Up") Then

                Ovni.Y = Ovni.Y - 10         

            End If

            If IsKeyDown("Down") Then

                Ovni.Y = Ovni.Y + 10        

            End If

            // Se mueve el Ovni

            MoveSpriteToPoint( Ovni.Nombre, Ovni.X, Ovni.Y )

            // El Jugador Dos controla a la Estación Espacial utilizando las teclas W A S Z

            // Si se presiona la tecla 'D' la Estación se moverá a la derecha

            If IsKeyDown("D") Then

                EstacionEspacial.X = EstacionEspacial.X + 10            

            End If

            // Si se presiona la tecla 'A' la Estación se moverá a la izquierda

            If IsKeyDown("A") Then

                EstacionEspacial.X = EstacionEspacial.X - 10             

            End If

            // Si se presiona la tecla 'W' la Estación se moverá hacia arriba

            If IsKeyDown("W") Then

                EstacionEspacial.Y = EstacionEspacial.Y - 10

            End If

            // Si se presiona la tecla 'S' la Estación se moverá hacia abajo

            If IsKeyDown("S") Then

                EstacionEspacial.Y = EstacionEspacial.Y + 10

            End If

            // Se mueve la Estación Espacial

            MoveSpriteToPoint(EstacionEspacial.Nombre, EstacionEspacial.X, EstacionEspacial.Y )

             // Después de mover ambos Sprites se coloca como el tiempo de la última revisión a la hora

            // actual. De esta forma esperaremos otros 50 milisegundos desde este momento hasta que ambos

            // Sprites se puedan mover nuevamente.

            UltimaRevision = HoraActual

        End If

    End While

End Method

End Program

<< Anterior