Loteria Mexicana

 Objetivo

Crear mediante el uso B4A una loteria mexicana que barajee las cartas aleatoriamente y usando nuestra voz para decirlas

Codigo

Sub Class_Globals
Private Root As B4XView
Private xui As XUI
   
Private btnAuto As B4XView
Private btnReiniciar As B4XView
Private btnSiguiente As B4XView
Private imgCarta As B4XView
Private lblNombreCarta As B4XView
Private ivfondo As ImageView
Dim cartas As List
Dim indiceActual As Int
Dim mp As MediaPlayer
Dim tmrAuto As Timer
Dim ivfondo As ImageView
End Sub

Public Sub Initialize
' No se requiere código aquí por ahora
End Sub

Private Sub B4XPage_Created (Root1 As B4XView)

Root = Root1
Root.LoadLayout("MainPage")
ivfondo.Initialize("")
Root.AddView(ivfondo, 0, 0, Root.Width, Root.Height)
ivfondo.Bitmap = LoadBitmap(File.DirAssets, "mexico-cinco-mayo-fondo-sombrero-mexicano_1101-3237-removebg-preview.png")
ivfondo.SendToBack
ivfondo.Gravity = Gravity.FILL
mp.Initialize
tmrAuto.Initialize("tmrAuto", 3000)

EstilizarBotones
InicializarCartas
BarajarCartas
indiceActual = 0
MostrarCarta(indiceActual)
End Sub

Sub InicializarCartas
cartas.Initialize
For i = 1 To 54
cartas.Add(i)
Next
End Sub


Sub MostrarCarta(index As Int)
Dim numcarta As Int = cartas.Get(index)
imgCarta.SetBitmap(LoadBitmap(File.DirAssets, $"carta${numcarta}.jpg"$))
    
lblNombreCarta.Text = NombreCarta(numcarta)
imgCarta.SetVisibleAnimated(400, True)
lblNombreCarta.SetVisibleAnimated(400, True)

If mp.IsPlaying Then mp.Stop
mp.Load(File.DirAssets, $"carta${numcarta}.mp3"$)
mp.Play
End Sub

Sub btnSiguiente_Click
SiguienteCarta
End Sub

Sub btnAuto_Click
tmrAuto.Enabled = Not(tmrAuto.Enabled)
btnAuto.Visible = False
btnAuto.Visible = True
End Sub

Sub tmrAuto_Tick
SiguienteCarta
End Sub

Sub btnReiniciar_Click
tmrAuto.Enabled = False
BarajarCartas
indiceActual = 0
MostrarCarta(indiceActual)
End Sub

Sub SiguienteCarta
indiceActual = indiceActual + 1
If indiceActual >= cartas.Size Then
tmrAuto.Enabled = False
indiceActual = 0
Wait For (xui.MsgboxAsync("¡Se acabaron las cartas!", "Lotería")) Complete (Result As Int)
Return
End If
MostrarCarta(indiceActual)
End Sub

Sub BarajarCartas
cartas = ShuffleList(cartas)
End Sub

Sub ShuffleList(original As List) As List
Dim nueva As List
nueva.Initialize
nueva.AddAll(original)

For i = nueva.Size - 1 To 1 Step -1
Dim j As Int = Rnd(0, i + 1)
Dim temp As Object = nueva.Get(i)
nueva.Set(i, nueva.Get(j))
nueva.Set(j, temp)
Next
Return nueva
End Sub

Sub EstilizarBotones
EstilizarIcono(btnAuto, "push-control-button-blue-steel-technology-switch-sign-symbol-business-electronic-equipment-icon-start-stop-off-on-object-power-device-communication-system-computer-multimedia-click-concept-3d-render-p.png")
EstilizarIcono(btnReiniciar, "reiniciar.png")
EstilizarIcono(btnSiguiente, "siguiente.png")
End Sub

Sub EstilizarIcono(boton As B4XView, nombreIcono As String)
Dim b As Button = boton
Dim bmp As Bitmap = LoadBitmap(File.DirAssets, nombreIcono)
Dim bd As BitmapDrawable
bd.Initialize(bmp)
b.Background = bd
b.Text = "" ' Oculta el texto
End Sub

Sub NombreCarta(numero As Int) As String
Dim nombres As List = Array As String( _
        "El Gallo", "El Diablo", "La Dama", "El Catrín", "El Paraguas", "La Sirena", _
        "La Escalera", "La Botella", "El Barril", "El Árbol", "El Melón", "El Valiente", _
        "El Gorrito", "La Muerte", "La Pera", "La Bandera", "El Bandolón", "El Violoncello", _
        "La Garza", "El Pájaro", "La Mano", "La Bota", "La Luna", "El Cotorro", "El Borracho", _
        "El Negrito", "El Corazón", "La Sandía", "El Tambor", "El Camarón", "Las Jaras", _
        "El Músico", "La Araña", "El Soldado", "La Estrella", "El Cazo", "El Mundo", _
        "El Apache", "El Nopal", "El Alacrán", "La Rosa", "La Calavera", "La Campana", _
        "El Cantarito", "El Venado", "El Sol", "La Corona", "La Chalupa", "El Pino", _
        "El Pescado", "La Palma", "La Maceta", "El Arpa", "La Rana", "El Pájaro")

If numero >= 1 And numero <= nombres.Size Then
Return nombres.Get(numero - 1)
Else
Return $"Carta #${numero}"$
End If
End Sub

Diseño






Aplicacion









Comentarios

Entradas más populares de este blog

Proyecto final: Plataforma de gestion de informacion de Pacientes