Skip to content

تسجيلة بلوت

A Baloot score calculator with exclusive features, traditional and advanced scoring, and statistics.

Overview

Baloot is a popular card game played in teams, with points calculated each round. The app records the score sheet, adds a new scoring method and an advanced scoring method, supports statistics tracking, and includes the دق الولد feature. It speeds up the calculation.

Tech stack

Features

Advanced calculator

UX

Automatic score calculation with Baloot rules.

A wheel that calculates automatically: the Sun total is 26, so when you enter 20 for us it automatically sets 6 for the opponent, with projects added on top of the 26 in one tap. It supports traditional and advanced scoring and follows Baloot logic and rules.

دق الولد

UX

Random teams with saved names.

Distributes the attendees into teams randomly and saves player names.

Statistics

UX

Track match statistics.

Statistics for tracking match results.

Colour wheel

UX

Customise the app with any colour.

A customisation wheel that supports all colours: choose any colour by hex code or by dragging the wheel, with sounds and haptics to enhance the user's feeling and immersion in the app.

Deep-dive

The app follows MVVM with manual dependency injection through a small AppContainer. Room stores games, players and rounds, DataStore holds preferences, and a pure-Kotlin ScoringEngine owns every rule with no Android imports. A feedback layer separates sound cues, haptics and latency so the table experience stays consistent across screens.

Kotlin
fun calculateRound(
    gameType: GameType,
    basePointsUs: Int,
    basePointsThem: Int,
    projects: List<ProjectEntry>,
    multiplier: Multiplier,
): Pair<Int, Int> {
    val projectPointsUs = projects
        .filter { it.team == Team.US }
        .sumOf { it.project.pointsFor(gameType) }
    val projectPointsThem = projects
        .filter { it.team == Team.THEM }
        .sumOf { it.project.pointsFor(gameType) }

    val factor = multiplier.factor
    return (basePointsUs + projectPointsUs) * factor to
        (basePointsThem + projectPointsThem) * factor
}