Inicio Apuntes FPApuntes DAMSuerteCilla: app Android de sorteo agitando el móvil

SuerteCilla: app Android de sorteo agitando el móvil

Publicado por
about suerte-cilla

Una vez más aquí. Hoy vengo a dejar una pequeña aplicación en relación a una situación que me sucedió hace un par de días. El caso es que me encontré ante una situación en la que 5 personas teníamos que decidir el orden en el que actuar cada uno de nosotros, y como siempre no había acuerdo. Bueno, pues como suele ocurrir en estas situaciones, tocó sortear la posiciones mediante el Pito Pito Gorgorito … lo cual nunca me pareció la forma más neutral de realizar un sorteo. Y ahí fue cuando me di cuenta que una app para el teléfono que te permita realizar sorteos rápidos, es algo que por una u otra razón, siempre viene bien tener instalada en el teléfono. Por esta razón, y con un par de cafeteras, me puse a escribir el código de SuerteCilla

Como decía líneas más arriba, si has necesitado alguna vez elegir un número al azar en una reunión, una clase o una partida de bingo y solo tenías el móvil a mano, SuerteCilla es una aplicación Android pensada exactamente para eso: defines un rango de números, agitas el teléfono y la app selecciona un resultado de forma aleatoria mientras dura la sacudida del teléfono. Cuando dejas de mover el dispositivo, el sorteo se detiene y el número queda fijado en una bola de bingo.

En las siguientes líneas vamos a echar un vistazo rápido a cómo funciona SuerteCilla, qué partes del código son clave para desarrolladores y usuarios curiosos, y qué usos prácticos puede tener una app de este tipo en el día a día, en eventos y en entornos educativos.

¿Qué es SuerteCilla?

app instalada

SuerteCilla es una app de sorteo para Android de código abierto (el código lo he publicado bajo licencia GPL-3.0). Su repositorio es público y está disponible en GitHub. A diferencia de otras aplicaciones como esta, que solo muestran un botón de “generar número”, SuerteCilla aprovecha el acelerómetro del teléfono para convertir el gesto de agitar en la mecánica principal del sorteo.

Esta decisión de diseño aporta tres ventajas claras:

1. Interacción física y divertida: el gesto recuerda a un bombo de bingo o a una urna, lo que facilita usarla en grupo.

2. Transparencia percibida: mientras sacudes, los números van cambiando en pantalla; todo el mundo ve el proceso.

3. Simplicidad: no hace falta menús complejos para lanzar un sorteo; defines el rango y agitas.

Está desarrollada con Kotlin y Jetpack Compose orientada a Android 8.0 (API 26) o superior, y requiere un dispositivo con acelerómetro.

Cómo funciona SuerteCilla paso a paso

El flujo de uso está pensado para ser inmediato, incluso si la persona que sostiene el móvil no es usuaria habitual de la app. Vamos, que sacudir un brazo, hasta el lápiz menos afilado del estuche sabe hacerlo.

1. Pantalla de inicio (splash)

logo suertecilla

Al abrir SuerteCilla aparece un splash con el logo durante unos dos segundos. Sirve como presentación de marca y da tiempo a cargar preferencias guardadas (como el tema claro u oscuro).

2. Configuración del rango de números en SuerteCilla

En la pantalla principal el usuario puede indicar el valor desde y el valor hasta. Por defecto el rango suele asociarse a un bingo clásico (del 1 al 90), pero puedes ajustarlo a lo que necesites: del 1 al 10 para un juego rápido, del 1 al 50 para una rifa, o cualquier intervalo válido.

La app valida que el valor inferior no sea mayor que el superior y muestra cuántos números quedan disponibles.

3. Agitar el teléfono para sortear

sorteo suerte-cilla

Cuando agitas el móvil:

  • La app detecta la sacudida mediante el sensor de aceleración.
  • Mientras la sacudida está activa, los números van cambiando de forma continua en la bola.
  • Al dejar de agitar (tras un breve margen para confirmar que el movimiento ha parado), el cambio se detiene y se muestra el número final con una animación de revelación.

Este comportamiento es importante: no se trata de un único clic que genera un resultado oculto, sino de un sorteo visible y ligado al gesto.

4. Opciones de SuerteCilla

opciones suerte-cilla

En Opciones puedes:

  • Eliminar números ya salidos: si lo activas, cada número elegido se retira del conjunto y no vuelve a salir. Ideal para bingos y rifas sin repetición.
  • Restablecer números: vuelve a poner en juego todo el rango.
  • Modo claro / modo oscuro: adapta la interfaz al entorno o a tu preferencia.
  • Acerca de: descripción de la app y acceso al repositorio en GitHub.

También hay un historial de números ya salidos, útil cuando varias personas siguen la partida.

Arquitectura y partes importantes del código

Si te interesa el desarrollo Android o quieres reutilizar ideas del proyecto, estas son las piezas más relevantes de SuerteCilla.

SplashActivity y MainActivity

  • `SplashActivity` es la actividad de arranque: muestra el logo, espera dos segundos y navega a MainActivity.
  • `MainActivity` orquesta la interfaz con Navigation Compose, conecta el ViewModel con las pantallas y registra el detector de sacudida solo cuando el usuario está en la pantalla principal (así no se sortea por accidente desde Ajustes).

ShakeDetector: el corazón del gesto

La clase ShakeDetector escucha el acelerómetro a través de SensorManager. En lugar de reaccionar solo a toques en pantalla, calcula la fuerza del movimiento restando la gravedad a la magnitud de la aceleración. Si supera un umbral, considera que hay sacudida; si pasa un tiempo sin picos (settleMs), dispara el final del gesto.

Esto permite distinguir entre un pequeño movimiento al sostener el móvil y una sacudida real. Para una app de sorteo, calibrar ese umbral es crítico: demasiado sensible genera falsos positivos; demasiado estricto obliga a agitar con violencia innecesaria.

MainViewModel: lógica del sorteo continuo

El MainViewModel mantiene el estado de la interfaz (DrawUiState): rango, números disponibles, historial, tema, si se está sacudiendo, etc.

Cuando llega la señal de sacudida, no se limita a elegir un número una sola vez. Arranca un trabajo en corrutina (rollingJob) que, mientras la sesión de sacudida sigue activa, elige un número aleatorio del conjunto disponible cada pocos milisegundos y lo publica en el estado. Así la bola “rueda” de forma fluida.

Al terminar la sacudida:

  • Se cancela el bucle de selección.
  • Se fija el último número.
  • Si está activo el modo “eliminar salidos”, se quita ese valor de la lista disponible.
  • Se añade el resultado al historial y se dispara la animación de revelación.

Este diseño separa bien detección del gesto (sensor) y comportamiento del sorteo (ViewModel), lo que facilita mantener y ampliar la app.

BingoBall: la experiencia visual

sorteo aleatorio con SuerteCilla

El componente Compose BingoBall intenta representar la bola de bingo. Mientras hay sacudida, anima leve inclinación y escala; al revelar el resultado, ejecuta una animación de entrada (rebote y rotación). El número se muestra en el centro, sobre un diseño circular que evoca el bombo tradicional.

SettingsRepository y preferencias

Las preferencias (rango, eliminar salidos, tema oscuro) se guardan con DataStore. Así, al reabrir la aplicación, el usuario encuentra su configuración anterior sin depender de una base de datos pesada.

Tema claro y oscuro

Theme.kt define esquemas de color para ambos modos con Material 3. Las pantallas usan MaterialTheme.colorScheme en lugar de colores fijos, de modo que el cambio de tema es coherente en toda la interfaz.

Casos de uso: ¿para qué sirve una app como SuerteCilla?

Sobre todo sirve para practicar Kotlin. Aun que también puede usarse en muchos contextos. Estos son algunos de los más lógicos serían:

Bingo casero y partidas familiares

Configura el rango 1–90 (o el de tu variante local), activa la eliminación de números ya salidos y deja que alguien agite el móvil como si fuera el bombo. El historial ayuda a comprobar qué ha salido.

Rifas y sorteos en asociaciones o eventos

Si tienes 30 participantes numerados, define el rango 1–30 y sortea sin repetición. Es más ágil que papeles en un bol y más transparente que un generador web poco claro para el público presente.

Aulas y dinámicas educativas

Elegir alumno o equipo al azar, decidir el orden de exposición o seleccionar una pregunta de un listado numerado. El gesto de agitar reduce la sensación de “el profesor elige a dedo”.

Juegos de mesa y party games

Muchas dinámicas necesitan un dado grande, un contador o un selector. SuerteCilla puede sustituir un dado de muchos lados o un contador improvisado cuando no hay material físico.

Decisiones cotidianas ligeras

¿Quién paga el café? ¿Qué canal vemos? ¿Qué tarea hacemos primero? Con un rango pequeño y una sacudida, la decisión se vuelve un momento de juego en lugar de una discusión.

Prototipo y base para otras apps

Para desarrolladores, el proyecto es un ejemplo práctico de:

  • Integración del acelerómetro en Android.
  • Estado reactivo con StateFlow y ViewModel.
  • UI moderna con Jetpack Compose.
  • Preferencias persistentes con DataStore.
  • Animaciones ligadas a un evento de usuario.

Puede servir como punto de partida para apps de fitness con gestos, juegos serios o experiencias interactivas en museos y ferias.

Consejos para sacar el máximo partido a SuerteCilla

  • Define bien el rango antes de empezar la ronda, sobre todo si usas eliminación de salidos.
  • Activa Eliminar números ya salidos en bingos y rifas; desactívalo si quieres un generador con repetición (por ejemplo, un dado).
  • Restablece el conjunto al iniciar una partida nueva.
  • Usa el modo oscuro en ambientes con poca luz y el modo claro en exteriores o proyectores.
  • Asegúrate de que el dispositivo tenga acelerómetro y permisos de sensores disponibles (en la mayoría de móviles vienen de fábrica).

Requisitos técnicos e instalación de SuerteCilla

  • Android 8.0 (API 26) o superior.
  • Dispositivo o emulador con acelerómetro.
  • Para compilar desde el código: Android Studio reciente, JDK 17 y SDK 35.

Puedes clonar el proyecto desde GitHub, abrirlo en Android Studio y generar el APK, o instalar la versión publicada en las releases del repositorio.

Conclusión

SuerteCilla es una idea sencilla —elegir un número al azar—. Su funcionamiento es transparente: agitas, ves los números cambiar y, al parar, queda el resultado. Por dentro, un detector de sacudida, un ViewModel con sorteo continuo y una interfaz Compose trabajan juntos para ofrecer esa experiencia al usuario

Ya sea para un bingo familiar, una rifa de asociación, una dinámica de aula o como referencia de desarrollo Android con sensores, SuerteCilla es una herramienta práctica, ligera y de código abierto. Si quieres probarla, contribuir o adaptarla a tu propio proyecto, visita el repositorio oficial.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.