VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Khonquista"
   ClientHeight    =   8865
   ClientLeft      =   2685
   ClientTop       =   1800
   ClientWidth     =   13515
   Icon            =   "Form1.frx":0000
   LinkTopic       =   "Form1"
   ScaleHeight     =   591
   ScaleMode       =   3  'Pixel
   ScaleWidth      =   901
   Begin VB.ListBox List1 
      BackColor       =   &H00000000&
      ForeColor       =   &H00FFFFFF&
      Height          =   3180
      ItemData        =   "Form1.frx":0E92
      Left            =   8100
      List            =   "Form1.frx":0E94
      TabIndex        =   2
      Top             =   5280
      Visible         =   0   'False
      Width           =   3735
   End
   Begin VB.TextBox Text1 
      Height          =   375
      Left            =   8160
      TabIndex        =   1
      Text            =   "Text1"
      Top             =   8400
      Visible         =   0   'False
      Width           =   4455
   End
   Begin VB.TextBox TxtNombre 
      BackColor       =   &H000000FF&
      BeginProperty Font 
         Name            =   "MS Sans Serif"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H00000000&
      Height          =   420
      Left            =   2880
      TabIndex        =   0
      Text            =   "Player1"
      Top             =   1920
      Width           =   2775
   End
   Begin VB.Timer TimerInput 
      Enabled         =   0   'False
      Interval        =   2
      Left            =   120
      Top             =   120
   End
   Begin VB.Menu MnuJuego 
      Caption         =   "Juego"
      Enabled         =   0   'False
      Visible         =   0   'False
      Begin VB.Menu MnuAceptar 
         Caption         =   "Aceptar"
      End
      Begin VB.Menu MnuNuevo 
         Caption         =   "Nuevo"
      End
      Begin VB.Menu MnuGuion1 
         Caption         =   "-"
      End
      Begin VB.Menu MnuSalir 
         Caption         =   "Salir"
      End
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'/***************************************************************
'*                                                              *
'* Proyecto dx_lib32 2.0 - Proyecto Aprendiendo dx_lib32        *
'* Khonquista                                                   *
'* Juego clon de Konquest de KDE Linux                          *
'*                                                              *
'* Santiago de Chile Agosto 2007                                *
'* Hechelion (Alberto Ortiz Barrera)                            *
'*                                                              *
'*                                                              *
'***************************************************************/

Option Explicit

'Clases de la libreria dx_lib32.DLL
Dim m_gfx As dx_GFX_Class 'Referencia a la clase dx_GFX:
Dim m_Input As dx_Input_Class 'Referencia a la clase dx_Input.
Dim m_Sound As dx_Sound_Class 'Referencia a la calse dx_Sound.
Dim m_system As dx_System_Class 'Referencia a la clase dx_system

'Espacio asignado a Controles
Public WithEvents MsgPrincipal As CMsgList
Attribute MsgPrincipal.VB_VarHelpID = -1
Public WithEvents MarcoMenu As CMsgList
Attribute MarcoMenu.VB_VarHelpID = -1
Public WithEvents BtnProduccion As CMsgList
Attribute BtnProduccion.VB_VarHelpID = -1
Public WithEvents BtnPoder As CMsgList
Attribute BtnPoder.VB_VarHelpID = -1
Public WithEvents BtnCristales As CMsgList
Attribute BtnCristales.VB_VarHelpID = -1


'Variable para contener indicadores a Frames
Dim Fondo As Long
Dim BtnAceptar As Long
Dim BtnCancelar As Long
Dim BtnNuevo As Long
Dim BtnMedir As Long
Dim BtnSalir As Long
Dim BtnGrilla As Long
Dim BtnIzquierda As Long
Dim BtnMarca As Long
Dim BtnDerecha As Long
Dim FrmPlanetas As Long
Dim FrmFlota As Long
Dim FondoMsg As Long
Dim IcoNaves As Long
Dim IcoPoder As Long
Dim IcoCristales As Long
Dim BtnMenuCompra As Long
Dim RegionPlanetas(44) As GFX_Rect
'Almacena los idenficadores de las fuentes de texto cargadas:
Dim Impact As Long
Dim Impact2 As Long
Dim Impact3 As Long

'Variables para contener indicadores a sonidos
Dim MusicaFondo As Long
Dim SndTeclear As Long
Dim SndClickBoton As Long
Dim SndClickPlaneta As Long
Dim SndAlarma As Long

'Controla el bucle principal:
Dim MainLoop As Boolean

'Variables que indican que se debe dibujar y que no dependiendo de la selección
Dim Previsualizar As Boolean
Dim VerMenu As Boolean
Dim VerTablero As Boolean

'Variables de posición
Dim PosMapaX As Long
Dim PosMapaY As Long
Dim TamanoCuadicula As Long
Dim Screen_Widht As Long
Dim Screen_Height As Long

Dim PlanetaClick As Integer




Private Sub Form_Load()
Dim i As Integer

'Cargar Valores por defecto utilizados en el programa
IniciarVariable

Set m_gfx = New dx_GFX_Class 'Creamos la instancia de la clase dx_GFX:
Set m_Input = New dx_Input_Class 'Creamos la referencia a la clase dx_Input.
Set m_Sound = New dx_Sound_Class 'Creamos la referencia a la clase dx_Sound:
Set m_system = New dx_System_Class 'Creamos la referencia a la clase dx_System

'Creamos la referencia a los controles
Set MsgPrincipal = New CMsgList
Set MarcoMenu = New CMsgList
Set BtnProduccion = New CMsgList
Set BtnPoder = New CMsgList
Set BtnCristales = New CMsgList



'Inicializamos la clase y el modo de video a 800x600 en modo ventana:
Call m_gfx.Init(Me.hWnd, Screen_Widht, Screen_Height, , True)
Call m_Input.Init(Me.hWnd) 'Inicializamos la clase dx_Input.
Call m_Sound.Init(Me.hWnd) 'Inicializamos la clase dx_Sound.


MainLoop = True 'Entrar al ciclo principal de dibujo del juego
MnuNuevo_Click 'Al iniciar el programa recrear condición de juego nuevo

'Cargar Valores de incio de gráficos como texturas y similares
IniciarGraficos
IniciarSonido
Sonido_Habilitado = True

'Mostramos la ventana:
Me.Show

'Llamar a la función principal para graficar
If HayMusica Then If Not (m_Sound.MUSIC_Play(MusicaFondo, Primary_Buffer, True)) Then Log_Error "Error al reproducir música de fondo" 'invocar la música de fondo)
Graficar
Call m_Sound.MUSIC_Stop(Primary_Buffer) 'detener música de fondo



'Descargamos elementos de la memoria:
Call m_gfx.MAP_Unload(Fondo)    'Descargar Fondo
Call m_gfx.MAP_Unload(BtnAceptar)    'Descargar imagen botón Aceptar
Call m_gfx.MAP_Unload(BtnCancelar)    'Descargar imagen botón Cancelar
Call m_gfx.FONT_UnloadSystemFont(Impact) 'Descargar Fuentes
Call m_gfx.FONT_UnloadSystemFont(Impact2) 'Descargar Fuentes
Call m_gfx.MAP_Unload(FrmPlanetas) 'Descarga Frames que contiene imagen de todos los planetas
Call m_gfx.MAP_Unload(FrmFlota) 'Descarga Frames que contiene imagen de flota
Call m_gfx.MAP_Unload(BtnNuevo)    'Descargar imagen botón nuevo
Call m_gfx.MAP_Unload(BtnMedir)    'Descargar imagen botón medir
Call m_gfx.MAP_Unload(BtnSalir)    'Descargar imagen botón salir
Call m_gfx.MAP_Unload(BtnGrilla)    'Descargar imagen botón grilla
Call m_gfx.MAP_Unload(BtnIzquierda)    'Descargar imagen botón izquierda
Call m_gfx.MAP_Unload(BtnDerecha)    'Descargar imagen botón derecha
Call m_gfx.MAP_Unload(BtnMarca)    'Descargar imagen botón derecha
Call m_gfx.MAP_Unload(BtnMenuCompra) 'Descargar imagen botón menú compra
Call m_gfx.MAP_Unload(FondoMsg)
Call m_gfx.MAP_Unload(IcoNaves)
Call m_gfx.MAP_Unload(IcoPoder)
Call m_gfx.MAP_Unload(IcoCristales)


Call m_Sound.MUSIC_Unload(MusicaFondo)
Call m_Sound.SOUND_Unload(SndTeclear)
Call m_Sound.SOUND_Unload(SndClickBoton)
Call m_Sound.SOUND_Unload(SndClickPlaneta)

'Finalizar clases Iniciadas de la libreria
Call m_gfx.Terminate 'Terminamos la ejecucion de la clase:
Call m_Input.Terminate 'Terminamos la ejecucion de la clase:
Call m_Sound.Terminate 'Terminamos la ejecucion de la clase:
'Call m_system.Terminate 'Terminamos la ejecucion de la clase:

Sonido_Habilitado = False

'Destrucción de clases
Set MsgPrincipal = Nothing 'Destruimos la instancia de la clase:
Set m_Input = Nothing 'Destruimos la instancia de la clase:
Set m_gfx = Nothing 'Destruimos la instancia de la clase:
Set m_Sound = Nothing 'Destruimos la instancia de la clase:
Set m_system = Nothing 'Destruimos la instancia de la clase:

End

End Sub

Private Sub Form_Unload(Cancel As Integer)
MainLoop = False

End Sub

Private Sub IniciarVariable()

'Cargar valores de configuración desde archivo INI
TxtNombre.Text = IniGet(App.Path & "\Config.ini", "General", "Jugador", "Player1")
NumJugadores = Int(IniGet(App.Path & "\Config.ini", "General", "NumJugadores", "2"))
NumPlanetasNeutrales = Int(IniGet(App.Path & "\Config.ini", "General", "NumNeutrales", "1"))
NivelDificultad = Int(IniGet(App.Path & "\Config.ini", "General", "Dificultad", "1"))
HayMusica = Int(IniGet(App.Path & "\Config.ini", "General", "Musica", "1"))

If IniGet(App.Path & "\Config.ini", "General", "OcultarGrilla", "0") Then
    OcultarGrilla = True
Else
    OcultarGrilla = False
End If


PosMapaX = 460
PosMapaY = 100
TamanoCuadicula = 20
Screen_Widht = 800
Screen_Height = 600
NombreJugador = TxtNombre.Text
AuxFlotaEnviada = "0"

End Sub

Private Sub IniciarGraficos()
'Cargamos las fuentes de texto y las configuramos:
Impact = m_gfx.FONT_LoadSystemFont("Impact", 14, False, False, False, False)
Impact2 = m_gfx.FONT_LoadSystemFont("Impact2", 12, False, False, False, False)
Impact3 = m_gfx.FONT_LoadSystemFont("Impact2", 10, False, False, False, False)

'Carga de gráficos en memoria
Fondo = m_gfx.MAP_Load(App.Path & "\Recursos\estrella.bmp", 0, False)
BtnAceptar = m_gfx.MAP_Load(App.Path & "\Recursos\aceptar.bmp", 0, False)
BtnCancelar = m_gfx.MAP_Load(App.Path & "\Recursos\cancelar.bmp", 0, False)
FrmPlanetas = m_gfx.MAP_Load(App.Path & "\Recursos\planetas1.png", &HFFFF00FF, False)
FrmFlota = m_gfx.MAP_Load(App.Path & "\Recursos\naves.png", &HFFFF00FF)
BtnNuevo = m_gfx.MAP_Load(App.Path & "\Recursos\btnnuevo.png", 0)
BtnMedir = m_gfx.MAP_Load(App.Path & "\Recursos\btnmedir.png", 0)
BtnSalir = m_gfx.MAP_Load(App.Path & "\Recursos\btnsalir.png", 0)
BtnGrilla = m_gfx.MAP_Load(App.Path & "\Recursos\btngrilla.png", 0)
BtnIzquierda = m_gfx.MAP_Load(App.Path & "\Recursos\leftarrowmouseover.png", 0)
BtnDerecha = m_gfx.MAP_Load(App.Path & "\Recursos\rightarrowmouseover.png", 0)
BtnMenuCompra = m_gfx.MAP_Load(App.Path & "\Recursos\botonmenucompra.png", 0)
BtnMarca = m_gfx.MAP_Load(App.Path & "\Recursos\marca.png", 0)
FondoMsg = m_gfx.MAP_Load(App.Path & "\Recursos\fondomsg.png", 0)
IcoNaves = m_gfx.MAP_Load(App.Path & "\Recursos\iconave.png", 0)
IcoPoder = m_gfx.MAP_Load(App.Path & "\Recursos\icopoder.png", 0)
IcoCristales = m_gfx.MAP_Load(App.Path & "\Recursos\icocristal.png", 0)

'Cargar Controles
'Cargar cuadro de mensaje
With MsgPrincipal
Call .Iniciar(m_gfx, m_Input, m_system, Impact3, 300, 420, 120, 60)
'Personalizamos el control según nuestras necesidades
.UseTransparency2 = Msg_Focus_OR_Cursor
.Transparency = 0
.Transparency2 = 0
.Map_Picture = FondoMsg
.Top_Margin = 50
.Low_Margin = 22
.Left_Margin = 30
.Zbuffer = -5
.Visible = False
End With

'cargar cuadros para menú derecho de compra de mejoras
With MarcoMenu
Call .Iniciar(m_gfx, m_Input, m_system, Impact3, 100, 188, 0, 0)
.UseTransparency2 = Msg_Only_Cursor
.Transparency = 50
.Transparency2 = 0
.BackColor = &HFF101010
.Zbuffer = -3
.Visible = False
End With

With BtnProduccion
Call .Iniciar(m_gfx, m_Input, m_system, Impact3, 26, 180, MarcoMenu.Top + 4, MarcoMenu.Left + 4)
.UseTransparency2 = Msg_Only_Cursor
.Transparency = 50
.Transparency2 = 0
.Map_Picture = BtnMenuCompra
.BackColor = &HFFAAAAAA
.Left_Margin = 5
.Top_Margin = 4
.Low_Margin = 0
.Right_Margin = 4
.Zbuffer = -4
.Visible = False
End With

With BtnPoder
Call .Iniciar(m_gfx, m_Input, m_system, Impact3, 26, 180, MarcoMenu.Top + 34, MarcoMenu.Left + 4)
.UseTransparency2 = Msg_Only_Cursor
.Transparency = 50
.Transparency2 = 0
.Map_Picture = BtnMenuCompra
.BackColor = &HFFAAAAAA
.Left_Margin = 5
.Top_Margin = 4
.Low_Margin = 0
.Right_Margin = 4
.Zbuffer = -4
.Visible = False
End With

With BtnCristales
Call .Iniciar(m_gfx, m_Input, m_system, Impact3, 26, 180, MarcoMenu.Top + 64, MarcoMenu.Left + 4)
.UseTransparency2 = Msg_Only_Cursor
.Transparency = 50
.Transparency2 = 0
.Map_Picture = BtnMenuCompra
.BackColor = &HFFAAAAAA
.Left_Margin = 5
.Top_Margin = 4
.Low_Margin = 0
.Right_Margin = 4
.Zbuffer = -4
.Visible = False
End With



End Sub

Private Sub IniciarSonido()
'Cargamos música en memoria
MusicaFondo = m_Sound.MUSIC_Load(App.Path & "\Recursos\sound\artificial_intelligence_v3.ogg")

'Cargamos efectos de sonido
SndTeclear = m_Sound.SOUND_Load(App.Path & "\Recursos\sound\text_typing2.wav")
SndClickBoton = m_Sound.SOUND_Load(App.Path & "\Recursos\sound\button_click2.wav")
SndClickPlaneta = m_Sound.SOUND_Load(App.Path & "\Recursos\sound\fleet_button_rollover2.wav")
SndAlarma = m_Sound.SOUND_Load(App.Path & "\Recursos\sound\alert.wav")

End Sub


Private Sub Graficar()


Do While MainLoop
    
    Call m_gfx.Frame(, 70, False)
    'Llamar rutina de input del teclado
    TimerInput_Timer
    MsgPrincipal.Draw

    'Llamar a rutinas gráficas según el modo en que se encuentre
    If Previsualizar Then PrevisualizarMapa
    If VerMenu Then VisualizarMenu
    If VerTablero Then VisualizarTablero

    'Dibujar Barra para botones de acceso rápido
    Call m_gfx.DRAW_Box(0, 0, 799, 29, 0, m_gfx.ARGB_Set(255, 255, 255, 255), True, m_gfx.ARGB_Set(255, 150, 150, 150))
    Call m_gfx.DRAW_Map(BtnNuevo, 10, 0, 0, 0, 0)
    Call m_gfx.DRAW_Map(BtnMedir, 40, 0, 0, 0, 0)
    Call m_gfx.DRAW_Map(BtnGrilla, 70, 0, 0, 0, 0)
    Call m_gfx.DRAW_Map(BtnSalir, 760, 0, 0, 0, 0)
    
    
    'Dibujar Fondo del juego
    Call m_gfx.DRAW_Map(Fondo, 0, 69, 8, 0, 0)

    'Ejecutamos las llamadas de la clase grafica:
    Call m_gfx.Frame

Loop

End Sub

Private Sub PrevisualizarMapa()

    Dim i As Integer
    
    'Dibujar Contorno y fondo del Minimapa
    Call m_gfx.DRAW_Box(PosMapaX - 20, PosMapaY - 20, (PosMapaX + TamanoCuadicula * 16) + 20, (PosMapaY + TamanoCuadicula * 16) + 20, 1, m_gfx.ARGB_Set(255, 255, 255, 255), True, m_gfx.ARGB_Set(255, 0, 0, 0))
    Call m_gfx.DRAW_Box(PosMapaX, PosMapaY, (PosMapaX + TamanoCuadicula * 16), (PosMapaY + TamanoCuadicula * 16), 1, m_gfx.ARGB_Set(255, 255, 255, 255), True, m_gfx.ARGB_Set(255, 50, 50, 50))
    Call m_gfx.DRAW_Box(PosMapaX, PosMapaY, (PosMapaX + TamanoCuadicula * 16), (PosMapaY + TamanoCuadicula * 16), 0, m_gfx.ARGB_Set(255, 255, 255, 255), False)
    'Dibujar cuadricula
    For i = 1 To 15
        Call m_gfx.DRAW_Line((PosMapaX + TamanoCuadicula * i), PosMapaY, (PosMapaX + TamanoCuadicula * i), (PosMapaY + TamanoCuadicula * 16), 0, m_gfx.ARGB_Set(255, 255, 255, 255))
        Call m_gfx.DRAW_Line(PosMapaX, (PosMapaY + TamanoCuadicula * i), (PosMapaX + TamanoCuadicula * 16), (PosMapaY + TamanoCuadicula * i), 0, m_gfx.ARGB_Set(255, 255, 255, 255))
    Next
    
    'Dibujar planetas
    Dim PosInicialX As Long
    Dim PosInicialY As Long
    Dim PosFinalX As Long
    Dim PosFinalY As Long
    For i = 0 To NumJugadores + NumPlanetasNeutrales - 1
        PosInicialX = 2 + PosMapaX + Planeta(i).PosX * TamanoCuadicula
        PosInicialY = 2 + PosMapaY + Planeta(i).Posy * TamanoCuadicula
        PosFinalX = TamanoCuadicula - 4 + PosInicialX
        PosFinalY = TamanoCuadicula - 4 + PosInicialY
        Call m_gfx.DRAW_Box(PosInicialX, PosInicialY, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 0, 0, 0), True, ColorJugador(Planeta(i).Propietario))
    Next
    
End Sub

Private Sub VisualizarMenu()
Dim PosHorizontal As Long
'Dibujar bordes del fondo del menú
Call m_gfx.DRAW_Box(20, 70, PosMapaX - 40, Screen_Height - 20, 0, m_gfx.ARGB_Set(255, 0, 0, 0), True, m_gfx.ARGB_Set(255, 0, 0, 0))
Call m_gfx.DRAW_Box(30, 80, PosMapaX - 50, Screen_Height - 30, 0, m_gfx.ARGB_Set(255, 200, 200, 200), True, m_gfx.ARGB_Set(255, 155, 155, 155))

'Dibujar barras deslizantes para número de jugadores y número de planetas neutrales
PosHorizontal = (246 / 7) * (NumJugadores - 2) + 72
Call m_gfx.DRAW_Map(BtnMarca, PosHorizontal, 229, -2, 32, 32)
Call m_gfx.DRAW_Map(BtnIzquierda, 40, 229, -2, 32, 32)
Call m_gfx.DRAW_Map(BtnDerecha, 350, 229, -2, 32, 32)
Call m_gfx.DRAW_Box(50, 242, 370, 248, -1, m_gfx.ARGB_Set(255, 0, 0, 0), True, m_gfx.ARGB_Set(255, 40, 40, 100))

PosHorizontal = (246 / 34) * (NumPlanetasNeutrales - 1) + 72
Call m_gfx.DRAW_Map(BtnMarca, PosHorizontal, 324, -2, 32, 32)
Call m_gfx.DRAW_Map(BtnIzquierda, 40, 324, -2, 32, 32)
Call m_gfx.DRAW_Map(BtnDerecha, 350, 324, -2, 32, 32)
Call m_gfx.DRAW_Box(50, 337, 370, 343, -1, m_gfx.ARGB_Set(255, 0, 0, 0), True, m_gfx.ARGB_Set(255, 40, 40, 100))

PosHorizontal = (246 / 4) * (NivelDificultad - 1) + 72
Call m_gfx.DRAW_Map(BtnMarca, PosHorizontal, 419, -2, 32, 32)
Call m_gfx.DRAW_Map(BtnIzquierda, 40, 419, -2, 32, 32)
Call m_gfx.DRAW_Map(BtnDerecha, 350, 419, -2, 32, 32)
Call m_gfx.DRAW_Box(50, 432, 370, 438, -1, m_gfx.ARGB_Set(255, 0, 0, 0), True, m_gfx.ARGB_Set(255, 40, 40, 100))

'Dibujar caja de texto para ingreso de nombre
'Por crear clase

'Dibujar Etiquetas
Call m_gfx.DRAW_Text(Impact, "Nombre Jugador", 40, 135, 0, &HFF000000, Align_Left)
Call m_gfx.DRAW_Text(Impact, "Cantidad Jugadores   " & NumJugadores, 80, 200, 0, &HFF000000, Align_Left)
Call m_gfx.DRAW_Text(Impact, "Planetas Neutrales   " & NumPlanetasNeutrales, 80, 295, 0, &HFF000000, Align_Left)
Call m_gfx.DRAW_Text(Impact, "Nivel Dificultad   " & NivelDificultad, 80, 390, 0, &HFF000000, Align_Left)

'Dibujar Botones para aceptar o rechazar mapa
Call m_gfx.DRAW_Map(BtnAceptar, PosMapaX + 50, PosMapaY + TamanoCuadicula * 16 + 40, 0, 0, 0)
Call m_gfx.DRAW_Map(BtnCancelar, PosMapaX + 190, PosMapaY + TamanoCuadicula * 16 + 40, 0, 0, 0)

End Sub

Private Sub VisualizarTablero()
Dim i As Integer
Dim PosInicialX As Long
Dim PosInicialY As Long
Dim PosFinalX As Long
Dim PosFinalY As Long
Dim AuxFramePlaneta As Integer
Dim Mensaje As String
'Dibujar cuadricula
' Cuadricula Inicia en 20,70
' Tamaño de cada cuadro de 32*32

'***********************************************************************************************
'Dibujar Tablero
'marco del tablero
i = 0
Call m_gfx.DRAW_Line((20 + 32 * i), 70, (20 + 32 * i), (70 + 32 * 16), 0, m_gfx.ARGB_Set(255, 255, 255, 255))
Call m_gfx.DRAW_Line(20, (70 + 32 * i), (20 + 32 * 16), (70 + 32 * i), 0, m_gfx.ARGB_Set(255, 255, 255, 255))
i = 16
Call m_gfx.DRAW_Line((20 + 32 * i), 70, (20 + 32 * i), (70 + 32 * 16), 0, m_gfx.ARGB_Set(255, 255, 255, 255))
Call m_gfx.DRAW_Line(20, (70 + 32 * i), (20 + 32 * 16), (70 + 32 * i), 0, m_gfx.ARGB_Set(255, 255, 255, 255))

'dibujar grilla
If Not OcultarGrilla Then
    For i = 1 To 15
        Call m_gfx.DRAW_Line((20 + 32 * i), 70, (20 + 32 * i), (70 + 32 * 16), 0, m_gfx.ARGB_Set(255, 255, 255, 255))
        Call m_gfx.DRAW_Line(20, (70 + 32 * i), (20 + 32 * 16), (70 + 32 * i), 0, m_gfx.ARGB_Set(255, 255, 255, 255))
    Next
End If

'dibujar planetas
For i = 0 To NumJugadores + NumPlanetasNeutrales - 1
    PosInicialX = 1 + 20 + Planeta(i).PosX * 32
    PosInicialY = 1 + 70 + Planeta(i).Posy * 32
    PosFinalX = 32 - 2 + PosInicialX
    PosFinalY = 32 - 2 + PosInicialY
    
    'Dibujar planetas a partir del frame FrmPlanetas
    'Designar región del Frame que contiene el planeta a dibujar
    AuxFramePlaneta = (i + PlanetaCero) Mod 44
    RegionPlanetas(i).X = (AuxFramePlaneta Mod 11) * 30
    RegionPlanetas(i).Y = Int(AuxFramePlaneta / 11) * 30
    RegionPlanetas(i).Width = 30
    RegionPlanetas(i).Height = 30

    Call m_gfx.MAP_SetRegion(FrmPlanetas, RegionPlanetas(i))
    Call m_gfx.DRAW_Map(FrmPlanetas, PosInicialX - 1, PosInicialY - 1, 0, 0, 0)
    
    'Dibujar marco del planeta  si este pertenece a algún jugador
    If Planeta(i).Propietario > 0 Then
        Call m_gfx.DRAW_Box(PosInicialX, PosInicialY, PosFinalX, PosFinalY, 0, ColorJugador(Planeta(i).Propietario), False)
        Call m_gfx.DRAW_Box(PosInicialX - 1, PosInicialY - 1, PosFinalX + 1, PosFinalY + 1, 0, ColorJugador(Planeta(i).Propietario), False)
    End If
    '    Call m_gfx.DRAW_Map(FrmPlanetas(0), PosInicialX + 1, PosInicialY + 1, 0, 0, 0)
    'End If
Next

'***********************************************************************************************
'Dibujar Flotas del jugador
Dim PosFlotaX As Long
Dim PosFlotaY As Long
Dim DeltaFlota As Long
Dim Espejo As Blit_Mirror

For i = 0 To 1024
    If Flotas(i).Propietario = cstplayer1 Then 'Buscar solo flotas que pertenezcan al jugador
    'Determinar coordenas para dibujo de recorrido
        PosInicialX = 36 + Planeta(Flotas(i).Origen).PosX * 32
        PosInicialY = 86 + Planeta(Flotas(i).Origen).Posy * 32
        PosFinalX = 36 + Planeta(Flotas(i).Destino).PosX * 32
        PosFinalY = 86 + Planeta(Flotas(i).Destino).Posy * 32
    'Dibujar recorrido de la flota
        Call m_gfx.DRAW_Line(PosInicialX - 1, PosInicialY, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 70, 20, 200))
        Call m_gfx.DRAW_Line(PosInicialX + 1, PosInicialY, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 70, 20, 200))
        Call m_gfx.DRAW_Line(PosInicialX, PosInicialY - 1, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 70, 20, 200))
        Call m_gfx.DRAW_Line(PosInicialX, PosInicialY + 1, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 70, 20, 200))
        Call m_gfx.DRAW_Line(PosInicialX, PosInicialY, PosFinalX, PosFinalY, 0, m_gfx.ARGB_Set(255, 87, 226, 33))
    
    'Posicionar y dibujar Flota
        DeltaFlota = Saturacion(Flotas(i).TurnoArribo - Flotas(i).TurnoInicio, 999, 1)
        PosFlotaX = PosInicialX - 16 + ((PosFinalX - PosInicialX) / DeltaFlota) * ((NumTurno - Flotas(i).TurnoInicio) + 0.5)
        PosFlotaY = PosInicialY - 16 + ((PosFinalY - PosInicialY) / DeltaFlota) * ((NumTurno - Flotas(i).TurnoInicio) + 0.5)
        
        Espejo = Mirror_None 'Iniciar espejo para flota que va a la izquierda
        If (PosFinalX - PosInicialX) > 0 Then Espejo = Mirror_Both 'Determinar si flota va a la derecha
        'Call m_gfx.DRAW_MapEx(FrmFlota, PosFlotaX, PosFlotaY, -1, 0, 0, 0, Blendop_Color, &HFFFFFFFF, Espejo, Filter_None, False)
        Call m_gfx.DRAW_AdvMap(FrmFlota, PosFlotaX, PosFlotaY, -1, 0, 0, Blendop_Color, &HFFFFFFFF, Espejo, Filter_None, False)
    End If
Next

    '***********************************************************************************************
    'Dibujar Mensaje de sistema
    Dim TWidth As Long
    '   seleccionar caso según sea el estado de espera
    Select Case Estado
        Case 0: Mensaje = "Seleccione planeta de origen..."
        Case 1: Mensaje = "Seleccione planeta de destino..."
        Case 2: Mensaje = "Ingrese flota a enviar:  " & CStr(Int(AuxFlotaEnviada))
    End Select
    
    Call m_gfx.DRAW_Text(Impact2, NombreJugador & ": ", 40, 42, 0, &HFFFF0000, Align_Left)
    TWidth = m_gfx.FONT_SystemGetTextWidth(Impact2, NombreJugador & ": ")
    Call m_gfx.DRAW_Text(Impact2, Mensaje, 40 + TWidth, 42, 0, &HFF00FF00, Align_Left)
    'Dibujar Botón Fin Turno
    Call m_gfx.DRAW_Box(440, 40, 530, 60, 0, &HFF00FF00, False)
    Call m_gfx.DRAW_Text(Impact2, "FIN TURNO", 444, 42, 0, &HFF00FF00, Align_Left)
    
    'Dibujar Almacen de Cristales
    Call m_gfx.DRAW_Text(Impact2, CStr(NPC(1).Cristales), 630, 42, 0, &HFF00FF00, Align_Left)
    Call m_gfx.DRAW_Map(IcoCristales, 600, 42, 0, 20, 20)
    
    '***********************************************************************************************
    'Dibujar Información de planeta
    Call m_gfx.DRAW_Box(540, 70, 790, 350, 0, &HFFFFFFFF, False)
    
    Call m_gfx.DRAW_Text(Impact2, "Planeta: ", 550, 80, 0, &HFF00FF00, Align_Left)
    Call m_gfx.DRAW_Text(Impact2, "Dueño: ", 550, 110, 0, &HFF00FF00, Align_Left)
    Call m_gfx.DRAW_Text(Impact2, "Naves: ", 550, 140, 0, &HFF00FF00, Align_Left)
    Call m_gfx.DRAW_Text(Impact2, "Producción: ", 550, 170, 0, &HFF00FF00, Align_Left)
    Call m_gfx.DRAW_Text(Impact2, "Poder: ", 550, 200, 0, &HFF00FF00, Align_Left)
    Call m_gfx.DRAW_Text(Impact2, "Cristales: ", 550, 230, 0, &HFF00FF00, Align_Left)
    Call m_gfx.DRAW_Text(Impact2, "Turno: ", 550, 320, 0, &HFF00FF00, Align_Left)
    
    If Planeta(UltimoPlaneta).Propietario > 0 Then
        'Si el planeta esta bajo el dominio de algún jugador desplegar información del planeta
        Call m_gfx.DRAW_Text(Impact2, ObtenerNombrePlaneta(UltimoPlaneta), 650, 80, 0, ColorJugador(Planeta(UltimoPlaneta).Propietario), Align_Left)
        Call m_gfx.DRAW_Text(Impact2, ObtenerNombre(Planeta(UltimoPlaneta).Propietario), 650, 110, 0, ColorJugador(Planeta(UltimoPlaneta).Propietario), Align_Left)
        Call m_gfx.DRAW_Text(Impact2, CStr(Planeta(UltimoPlaneta).Naves), 650, 140, 0, &HFFC0FFC0, Align_Left)
        Call m_gfx.DRAW_Text(Impact2, CStr(Planeta(UltimoPlaneta).Produccion), 650, 170, 0, &HFFC0FFC0, Align_Left)
        If Planeta(UltimoPlaneta).BonoProduccion > 0 Then Call m_gfx.DRAW_Text(Impact2, " + " & CStr(Round(Planeta(UltimoPlaneta).Produccion * (0.1 * Planeta(UltimoPlaneta).BonoProduccion))), 700, 170, 0, &HFFC0FFC0, Align_Left)
        Call m_gfx.DRAW_Text(Impact2, CStr(Planeta(UltimoPlaneta).PoderBase), 650, 200, 0, &HFFC0FFC0, Align_Left)
        If Planeta(UltimoPlaneta).BonoPoder > 0 Then Call m_gfx.DRAW_Text(Impact2, " + " & CStr(Round(Planeta(UltimoPlaneta).PoderBase * (0.1 * Planeta(UltimoPlaneta).BonoPoder))), 700, 200, 0, &HFFC0FFC0, Align_Left)
        Call m_gfx.DRAW_Text(Impact2, CStr(Planeta(UltimoPlaneta).Cristales), 650, 230, 0, &HFFC0FFC0, Align_Left)
        If Planeta(UltimoPlaneta).BonoCristales > 0 Then Call m_gfx.DRAW_Text(Impact2, " + " & CStr(Round(Planeta(UltimoPlaneta).Cristales * (0.1 * Planeta(UltimoPlaneta).BonoCristales))), 700, 230, 0, &HFFC0FFC0, Align_Left)
    Else
        'Si el planeta esta bajo dominio neutral ocultar información
        Call m_gfx.DRAW_Text(Impact2, ObtenerNombrePlaneta((UltimoPlaneta) Mod 45), 650, 80, 0, ColorJugador(Planeta(UltimoPlaneta).Propietario), Align_Left)
        Call m_gfx.DRAW_Text(Impact2, "NEUTRAL", 650, 110, 0, &HFFFFFFFF, Align_Left)
        Call m_gfx.DRAW_Text(Impact2, "NO DATA", 650, 140, 0, &HFFFF0000, Align_Left)
        Call m_gfx.DRAW_Text(Impact2, "NO DATA", 650, 170, 0, &HFFFF0000, Align_Left)
        Call m_gfx.DRAW_Text(Impact2, "NO DATA", 650, 200, 0, &HFFFF0000, Align_Left)
        Call m_gfx.DRAW_Text(Impact2, "NO DATA", 650, 230, 0, &HFFFF0000, Align_Left)
    End If
    Call m_gfx.DRAW_Text(Impact2, CStr(NumTurno), 650, 320, 0, &HFF00FF00, Align_Left)
    
    'Dibujar bonus
    For i = 1 To Planeta(UltimoPlaneta).BonoProduccion
        Call m_gfx.DRAW_Map(IcoNaves, (550 + (22 * (i - 1))), 250, 0, 20, 20)
    Next
    For i = 1 To Planeta(UltimoPlaneta).BonoPoder
        Call m_gfx.DRAW_Map(IcoPoder, (550 + (22 * (i - 1))), 275, 0, 20, 20)
    Next
    For i = 1 To Planeta(UltimoPlaneta).BonoCristales
        Call m_gfx.DRAW_Map(IcoCristales, (550 + (22 * (i - 1))), 300, 0, 20, 20)
    Next

    '***********************************************************************************************
    'Dibujar menú de compra de mejoras
    MarcoMenu.Draw
    BtnProduccion.Draw
    BtnPoder.Draw
    BtnCristales.Draw
    
End Sub

Private Sub TxtNombre_Change()
NombreJugador = TxtNombre.Text
End Sub

Private Sub MnuAceptar_Click()
If Sonido_Habilitado Then Call m_Sound.SOUND_Play(SndClickBoton, -1, False)
'evitar Aceptar 2 veces el mismo universo
MnuAceptar.Enabled = False
'Llevar a 0 variables de juego al iniciar el universo
NumTurno = 0
Estado = 0

'Cargar en archivo INI los valores utilizados
IniWrite App.Path & "\Config.ini", "General", "Jugador", TxtNombre.Text
IniWrite App.Path & "\Config.ini", "General", "NumJugadores", NumJugadores
IniWrite App.Path & "\Config.ini", "General", "NumNeutrales", NumPlanetasNeutrales
IniWrite App.Path & "\Config.ini", "General", "Dificultad", NivelDificultad
If OcultarGrilla Then
    IniWrite App.Path & "\Config.ini", "General", "OcultarGrilla", "1"
Else
    IniWrite App.Path & "\Config.ini", "General", "OcultarGrilla", "0"
End If

'Cambiar modos y controles gráficos para jugar
TxtNombre.Visible = False
List1.Visible = True
List1.Clear
Previsualizar = False
VerMenu = False
VerTablero = True

End Sub

Private Sub MnuNuevo_Click()
If Sonido_Habilitado Then Call m_Sound.SOUND_Play(SndClickBoton, -1, False)
'habilitar el menu aceptar si se esta en creación de mundo
MnuAceptar.Enabled = True

CrearUniverso 'Llamar a la función que "Crea" un nuevo universo
VerTablero = False
List1.Visible = False
List1.Clear

'Cambiar modos y controles gráficos para modo de creación de universo
Previsualizar = True
VerMenu = True
TxtNombre.Visible = True

End Sub

Private Sub MnuSalir_Click()
If Sonido_Habilitado Then Call m_Sound.SOUND_Play(SndClickBoton, -1, False)
MainLoop = False
End Sub

Private Sub TimerInput_Timer()
Dim PosX, Posy, PosUniverso As Integer
Dim AuxMouseHitLeft As Boolean

'Timer encargado de escanear las entradas de mouse y teclado
With m_Input

'Uso de auxiliar para poder usar mouse_hit en más de una función
AuxMouseHitLeft = .Mouse_Hit(Left_Button)


'***********************************************************************************************
'Detectar click Sobre Botones del juego
'***********************************************************************************************
If AuxMouseHitLeft = True And VerTablero = False Then
    'Detectar si se presiona botón aceptar
    If .Mouse.X >= (PosMapaX + 50) And .Mouse.X <= (PosMapaX + 165) And .Mouse.Y >= (PosMapaY + TamanoCuadicula * 16 + 40) And .Mouse.Y <= (PosMapaY + TamanoCuadicula * 16 + 65) Then MnuAceptar_Click
    'Detectar si se presiona botón cancelar
    If .Mouse.X >= (PosMapaX + 190) And .Mouse.X <= (PosMapaX + 305) And .Mouse.Y >= (PosMapaY + TamanoCuadicula * 16 + 40) And .Mouse.Y <= (PosMapaY + TamanoCuadicula * 16 + 65) Then MnuNuevo_Click
ElseIf AuxMouseHitLeft = True And VerTablero = True Then
    'Detectar si se presiona botón FIN TURNO
    If .Mouse.X >= (440) And .Mouse.X <= (530) And .Mouse.Y >= (40) And .Mouse.Y <= (60) Then
        If MsgPrincipal.Visible = False Then
            FinTurno
        Else
            MsgPrincipal.Visible = False
            MsgPrincipal.Clear
        End If
    End If
End If

'***********************************************************************************************
'Detectar click Sobre botones del área de menú
'***********************************************************************************************
If AuxMouseHitLeft = True Then
    'Detectar si se presiona botón nuevo
    If .Mouse.X >= (10) And .Mouse.X <= (38) And .Mouse.Y >= (0) And .Mouse.Y <= (28) Then MnuNuevo_Click
    'Detectar si se presiona botón medir
    'If .Mouse.X >= (40) And .Mouse.X <= (68) And .Mouse.Y >= (0) And .Mouse.Y <= (28) Then MnuNuevo_Click
    'Detectar si se presiona botón Grilla
    If .Mouse.X >= (70) And .Mouse.X <= (98) And .Mouse.Y >= (0) And .Mouse.Y <= (28) Then OcultarGrilla = Not OcultarGrilla
    'Detectar si se presiona botón salir
    If .Mouse.X >= (760) And .Mouse.X <= (788) And .Mouse.Y >= (0) And .Mouse.Y <= (28) Then MnuSalir_Click
End If




'***********************************************************************************************
'Convertir pixel a coordena de grilla de universo para detectar click sobre sector de la grilla
'***********************************************************************************************
PosX = Int((.Mouse.X - 20) / 32)
Posy = Int((.Mouse.Y - 70) / 32)
'Detectar planeta que pasa a llevar el cursor
If PosX >= 0 And PosX <= 15 And Posy >= 0 And Posy <= 15 Then 'Comprobar que coordenadas existan dentro de la grilla
    PosUniverso = Posy * 16 + PosX 'Convertir coordenada de grilla en posición absoluta
    If Universo2D(PosUniverso) > 0 Then
        UltimoPlaneta = Universo2D(PosUniverso) - 1
    End If
End If

'Acción asociada a la detección de click izquierdo para tomar acción en el juego en modo Juego
If AuxMouseHitLeft = True And VerTablero = True Then  'detectar ratón en modo juego y accionar estados del juego
    If PosX >= 0 And PosX <= 15 And Posy >= 0 And Posy <= 15 Then 'Comprobar que coordenadas existan dentro de la grilla
        PosUniverso = Posy * 16 + PosX 'Convertir coordenada de grilla en posición absoluta
        If Universo2D(PosUniverso) > 0 Then
            'Si estamos a la espera de planeta origen:
            If Estado = 0 Then
                'Comprobar que planeta de origen es un planeta del jugador. De ser así cargar como origen y quedar a la espera de Destino
                If Planeta(Universo2D(PosUniverso) - 1).Propietario = cstplayer1 Then
                    PlanetaOrigen = Universo2D(PosUniverso) - 1
                    Estado = 1
                    Call m_Sound.SOUND_Play(SndClickPlaneta, -1, False)
                End If
            ElseIf Estado = 1 Then
                'Detectar planeta de Destino y quedar a la espera de número de flota a enviar
                PlanetaDestino = Universo2D(PosUniverso) - 1
                If PlanetaDestino <> PlanetaOrigen Then
                    Estado = 2
                    Call m_Sound.SOUND_Play(SndClickPlaneta, -1, False)
                Else
                    Call m_Sound.SOUND_Play(SndAlarma, -1, False)
                End If
            End If
        End If
    End If
ElseIf .Mouse_Hit(Right_Button) = True And VerTablero = True And MsgPrincipal.Visible = False Then
    'Detectar planeta que pasa a llevar el cursor
    If PosX >= 0 And PosX <= 15 And Posy >= 0 And Posy <= 15 Then 'Comprobar que coordenadas existan dentro de la grilla
        PosUniverso = Posy * 16 + PosX 'Convertir coordenada de grilla en posición absoluta
        If Universo2D(PosUniverso) > 0 Then
            PlanetaClick = Universo2D(PosUniverso) - 1
            If Planeta(PlanetaClick).Propietario = 1 Then
                MarcoMenu.Top = .Mouse.Y - 5
                If .Mouse.Y >= 510 Then MarcoMenu.Top = 510
                MarcoMenu.Left = .Mouse.X - 5
                BtnProduccion.Top = MarcoMenu.Top + 4
                BtnProduccion.Left = MarcoMenu.Left + 4
                BtnPoder.Top = MarcoMenu.Top + 34
                BtnPoder.Left = MarcoMenu.Left + 4
                BtnCristales.Top = MarcoMenu.Top + 64
                BtnCristales.Left = MarcoMenu.Left + 4
                
                BtnProduccion.Clear
                BtnProduccion.AddItem "Subir Naves: " & CStr(FactorNaves * 2 ^ Planeta(PlanetaClick).BonoProduccion) & " de Cristal"
                BtnPoder.Clear
                BtnPoder.AddItem "Subir Poder: " & CStr(FactorPoder * 2 ^ Planeta(PlanetaClick).BonoPoder) & " de Cristal"
                BtnCristales.Clear
                BtnCristales.AddItem "Subir Cristal: " & CStr(FactorCristales * 2 ^ Planeta(PlanetaClick).BonoCristales) & " de Cristal"
                
                MarcoMenu.Visible = True
                BtnProduccion.Visible = True
                BtnPoder.Visible = True
                BtnCristales.Visible = True
            End If
        End If
    End If
End If

'***********************************************************************************************
'Detectar Uso del teclado, para ingreso de flota o para cancelar acción actual
'***********************************************************************************************
If .Key_Hit(Key_Escape) Then
    Estado = 0
    AuxFlotaEnviada = "0"
    FlotaEnviada = 0
End If

If Estado = 2 Then
    If .Key_Hit(Key_0) Then
        AuxFlotaEnviada = AuxFlotaEnviada & "0"
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    ElseIf .Key_Hit(Key_1) Then
        AuxFlotaEnviada = AuxFlotaEnviada & "1"
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    ElseIf .Key_Hit(Key_2) Then
        AuxFlotaEnviada = AuxFlotaEnviada & "2"
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    ElseIf .Key_Hit(Key_3) Then
        AuxFlotaEnviada = AuxFlotaEnviada & "3"
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    ElseIf .Key_Hit(Key_4) Then
        AuxFlotaEnviada = AuxFlotaEnviada & "4"
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    ElseIf .Key_Hit(Key_5) Then
        AuxFlotaEnviada = AuxFlotaEnviada & "5"
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    ElseIf .Key_Hit(Key_6) Then
        AuxFlotaEnviada = AuxFlotaEnviada & "6"
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    ElseIf .Key_Hit(Key_7) Then
        AuxFlotaEnviada = AuxFlotaEnviada & "7"
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    ElseIf .Key_Hit(Key_8) Then
        AuxFlotaEnviada = AuxFlotaEnviada & "8"
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    ElseIf .Key_Hit(Key_9) Then
        AuxFlotaEnviada = AuxFlotaEnviada & "9"
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    ElseIf .Key_Hit(Key_Back) Then
        If Len(AuxFlotaEnviada) = 1 Then
            AuxFlotaEnviada = 0
        Else
            AuxFlotaEnviada = Left(AuxFlotaEnviada, Len(AuxFlotaEnviada) - 1)
        End If
        Call m_Sound.SOUND_Play(SndTeclear, -1, False)
    End If

'If (m_Sound.SOUND_Play(SndTeclear, 0, False)) = -1 Then Log_Error "Error al reproducir sonido tecleo" 'invocar sonido de reclas al precionarse
End If

'***********************************************************************************************
'Detectar Uso de tecla ENTER para aceptar envio de flota
'***********************************************************************************************
If .Key_Hit(Key_Enter) Then
    If Estado = 2 Then
        FlotaEnviada = CLng(AuxFlotaEnviada)
        'comprobar que la cantidad de flota seleccionada es una cantidad valida
        If FlotaEnviada > 0 And FlotaEnviada <= Planeta(PlanetaOrigen).Naves Then
            'Llamar a funcion que carga la flota en la tabla de flotas
            ListaFlota_ADD 1, PlanetaOrigen, PlanetaDestino, FlotaEnviada
            Planeta(PlanetaOrigen).Naves = Planeta(PlanetaOrigen).Naves - FlotaEnviada
            Estado = 0
            FlotaEnviada = 0
            AuxFlotaEnviada = "0"
            Call m_Sound.SOUND_Play(SndClickPlaneta, -1, False)
        Else
            'si el valor de flota ingresada no coincide con valor de flota en el planeta informar a usuario y limpiar el campo
            Call m_Sound.SOUND_Play(SndAlarma, -1, False)
            Call MsgBox("No dispone de la cantidad de naves necesarias para realizar dicha acción", vbCritical, "ERROR")
            FlotaEnviada = 0
            AuxFlotaEnviada = "0"
        End If
    ElseIf Estado = 0 Then 'Usar "ENTER" para cambiar de turno
        
        If MsgPrincipal.Visible = False Then 'sólo si no está visible la ventana de mensaje
            Call m_Sound.SOUND_Play(SndClickBoton, -1, False)
            FinTurno
        Else
            MsgPrincipal.Visible = False
            MsgPrincipal.Clear
        End If
    End If
    
End If

'***********************************************************************************************
'Detectar Uso de mouse en pantalla de menú inicio
'***********************************************************************************************
If VerMenu And AuxMouseHitLeft And .Mouse.X >= 40 And .Mouse.X <= 382 Then
    'barra numero de jugadores
    If .Mouse.Y >= 229 And .Mouse.Y <= 261 Then
        If .Mouse.X <= 72 Then 'boton izquierdo
            If NumJugadores > 2 Then NumJugadores = NumJugadores - 1
        ElseIf .Mouse.X >= 350 Then 'boton derecho
            If NumJugadores < 9 Then NumJugadores = NumJugadores + 1
        Else 'barra
            ScrollNumJugadores = True
        End If
        MnuNuevo_Click
    End If
    
        'barra numero de planetas neutrales
    If .Mouse.Y >= 324 And .Mouse.Y <= 356 Then
        If .Mouse.X <= 72 Then 'boton izquierdo
            If NumPlanetasNeutrales > 1 Then NumPlanetasNeutrales = NumPlanetasNeutrales - 1
        ElseIf .Mouse.X >= 350 Then 'boton derecho
            If NumPlanetasNeutrales < 35 Then NumPlanetasNeutrales = NumPlanetasNeutrales + 1
        Else 'barra
            ScrollNumPlanetasNeutrales = True
        End If
        MnuNuevo_Click
    End If
    
        'barra numero de jugadores
    If .Mouse.Y >= 419 And .Mouse.Y <= 451 Then
        If .Mouse.X <= 72 Then 'boton izquierdo
            If NivelDificultad > 1 Then NivelDificultad = NivelDificultad - 1
        ElseIf .Mouse.X >= 350 Then 'boton derecho
            If NivelDificultad < 5 Then NivelDificultad = NivelDificultad + 1
        Else 'barra
            ScrollDificultad = True
        End If
        Call m_Sound.SOUND_Play(SndClickBoton, -1, False)
    End If
    
End If

'Rutina para el arrastre de las barras de selección de número de jugadores, de número de planetas y dificultad
Dim TempBarra As Integer
If VerMenu And .Mouse.Left_Button And .Mouse.X >= 73 And .Mouse.X <= 330 Then
    If ScrollNumJugadores And .Mouse.Y >= 229 And .Mouse.Y <= 261 Then
        TempBarra = ((.Mouse.X - 88) / (246 / 7)) + 2
        If NumJugadores <> TempBarra Then 'si detecta cambio en el valor real de la variable generar nuevo mapa
            NumJugadores = TempBarra
            MnuNuevo_Click
        End If
    Else
        ScrollNumJugadores = False
    End If
    
    If ScrollNumPlanetasNeutrales And .Mouse.Y >= 324 And .Mouse.Y <= 356 Then
        TempBarra = ((.Mouse.X - 80) / (246 / 34)) + 1
        If TempBarra < 1 Then TempBarra = 1
        If TempBarra > 35 Then TempBarra = 35
        If NumPlanetasNeutrales <> TempBarra Then 'si detecta cambio en el valor real de la variable generar nuevo mapa
            NumPlanetasNeutrales = TempBarra
            MnuNuevo_Click
        End If
    Else
        ScrollNumPlanetasNeutrales = False
    End If
    
    If ScrollDificultad And .Mouse.Y >= 419 And .Mouse.Y <= 451 Then
        TempBarra = ((.Mouse.X - 88) / (246 / 4)) + 1
        If NivelDificultad <> TempBarra Then 'si detecta cambio en el valor real de la variable generar nuevo mapa
            NivelDificultad = TempBarra
            Call m_Sound.SOUND_Play(SndClickBoton, -1, False)
        End If
    Else
        ScrollDificultad = False
    End If
    
End If

'Lógica de control de controles
MsgPrincipal.Input_
BtnProduccion.Input_
BtnPoder.Input_
BtnCristales.Input_
MarcoMenu.Input_

'Colocar en pantalla coordenadas en pixel y como grilla de la posición del cursor para debug
Text1.Text = .Mouse.X & ":" & .Mouse.Y & " / " & PosX & ":" & Posy & " / " & PosUniverso & "  / " & Universo2D(PosUniverso)
End With
End Sub

Private Sub FinTurno()
Dim i As Integer
Dim FinJuego As Integer

'Los personajes no jugadores deciden que hacer
Calcular_Descriptores
For i = 2 To NumJugadores
    MovimientoComputador i
Next

'incrementar número de turno
NumTurno = NumTurno + 1

'Actualizar producción de los planetas
ActualizarProduccion

'Revisar movimiento de flotas
ComprobarFlota

'Detectar criterio de Fin del juego y decidir acción a tomar
FinJuego = GameOver()

If FinJuego = 1 Then
    MsgBox "Terrible Konquistador del universo, has vencido en el turno " & NumTurno, vbOKOnly, "GANADOR"
    MnuNuevo_Click
    MsgPrincipal.Visible = False
    MsgPrincipal.Clear
ElseIf FinJuego = 2 Then
    MsgBox "Tu nombre no merece ser recordado, arrojate a un agujero negro para nunca volver ", vbOKOnly, "DERROTADO"
    MnuNuevo_Click
    MsgPrincipal.Visible = False
    MsgPrincipal.Clear
End If

End Sub

Private Sub MsgPrincipal_click()
MsgPrincipal.Visible = False
MsgPrincipal.Clear
End Sub

Private Sub MarcoMenu_LostCursor()
    MarcoMenu.Visible = False
    BtnProduccion.Visible = False
    BtnPoder.Visible = False
    BtnCristales.Visible = False
End Sub

Private Sub MarcoMenu_click()
'    MsgBox "problema"
End Sub

Private Sub BtnProduccion_click()
    If NPC(1).Cristales >= FactorNaves * 2 ^ Planeta(PlanetaClick).BonoProduccion Then
        NPC(1).Cristales = NPC(1).Cristales - FactorNaves * 2 ^ Planeta(PlanetaClick).BonoProduccion
        Planeta(PlanetaClick).BonoProduccion = Planeta(PlanetaClick).BonoProduccion + 1

        MarcoMenu.Visible = False
        BtnProduccion.Visible = False
        BtnPoder.Visible = False
        BtnCristales.Visible = False
        Call m_Sound.SOUND_Play(SndClickPlaneta, -1, False)
    Else
        Call m_Sound.SOUND_Play(SndAlarma, -1, False)
    End If
End Sub

Private Sub BtnPoder_click()
    If NPC(1).Cristales >= FactorPoder * 2 ^ Planeta(PlanetaClick).BonoPoder Then
        NPC(1).Cristales = NPC(1).Cristales - FactorPoder * 2 ^ Planeta(PlanetaClick).BonoPoder
        Planeta(PlanetaClick).BonoPoder = Planeta(PlanetaClick).BonoPoder + 1
    
        MarcoMenu.Visible = False
        BtnProduccion.Visible = False
        BtnPoder.Visible = False
        BtnCristales.Visible = False
        Call m_Sound.SOUND_Play(SndClickPlaneta, -1, False)
    Else
        Call m_Sound.SOUND_Play(SndAlarma, -1, False)
    End If
End Sub

Private Sub BtnCristales_click()
    If NPC(1).Cristales >= FactorCristales * 2 ^ Planeta(PlanetaClick).BonoCristales Then
        NPC(1).Cristales = NPC(1).Cristales - FactorCristales * 2 ^ Planeta(PlanetaClick).BonoCristales
        Planeta(PlanetaClick).BonoCristales = Planeta(PlanetaClick).BonoCristales + 1
    
        MarcoMenu.Visible = False
        BtnProduccion.Visible = False
        BtnPoder.Visible = False
        BtnCristales.Visible = False
        Call m_Sound.SOUND_Play(SndClickPlaneta, -1, False)
    Else
        Call m_Sound.SOUND_Play(SndAlarma, -1, False)
    End If
End Sub
