https://play.google.com/apps/testing/com.micallab.lottocraft
이번 포스팅에서는 Kotlin과 Jetpack Compose를 활용해 로또 번호 생성기 및 번호 통계 화면을 구현한 과정을 정리합니다. 이 글은 앱의 핵심 기능인 번호 생성, 출현 빈도 그래프, 그리고 AdMob 광고 통합을 포함합니다.
로또 번호는 두 가지 방식으로 생성됩니다.
Button(onClick = {
displayedNumbers = (1..45).shuffled().take(6).sorted()
bonusNumber = (1..45).shuffled().first { it !in displayedNumbers }
animationTrigger++
}) {
Text("일반 번호 생성")
}
fun generateScientificNumbers(data: List<LottoRound>): List<Int> {
val frequencyMap = calculateNumberFrequency(data)
val weightedNumbers = mutableListOf<Int>()
for ((number, count) in frequencyMap) {
repeat(count) { weightedNumbers.add(number) }
}
return weightedNumbers.shuffled().take(6).sorted()
}
출현 빈도 그래프는 LazyColumn을 활용해 각 번호의 출현 횟수를 막대 그래프로 표시합니다.
@Composable
fun LottoStatisticsGraph(frequencyMap: Map<Int, Int>) {
val maxFrequency = frequencyMap.values.maxOrNull() ?: 1
LazyColumn(modifier = Modifier.padding(16.dp)) {
items(frequencyMap.keys.sorted()) { number ->
val frequency = frequencyMap[number] ?: 0
Row(verticalAlignment = Alignment.CenterVertically) {
Text("$number", modifier = Modifier.width(40.dp))
Box(
Modifier
.height(24.dp)
.width((frequency / maxFrequency.toFloat() * 250.dp).coerceAtLeast(1.dp))
.background(Color.Blue)
)
Text("$frequency 회", Modifier.padding(start = 8.dp))
}
}
}
}
AdMob를 활용하여 전면 광고와 보상형 광고를 구현했습니다.
private fun loadInterstitialAd() {
val adRequest = AdRequest.Builder().build()
InterstitialAd.load(this, testInterstitialAdUnitId, adRequest, object : InterstitialAdLoadCallback() {
override fun onAdLoaded(ad: InterstitialAd) {
interstitialAd = ad
}
})
}
private fun showRewardedAd(onComplete: () -> Unit) {
rewardedAd?.show(this) { rewardItem ->
onComplete()
loadRewardedAd()
}
}
Box(
modifier = Modifier
.height(24.dp)
.width((frequency / maxFrequency.toFloat() * 250.dp).coerceAtLeast(1.dp))
.clip(CircleShape)
.background(
when {
frequency <= 5 -> Color(0xFFB3E5FC)
frequency <= 10 -> Color(0xFF81D4FA)
else -> Color(0xFF0288D1)
}
)
)
suspend fun fetchLottoData(range: Int): List<LottoRound> {
return withContext(Dispatchers.IO) {
// 데이터 크롤링 로직
}
}
이번 프로젝트는 Kotlin과 Jetpack Compose를 통해 로또 번호 생성기와 통계 분석 앱을 구현한 사례입니다. 특히 광고 통합, 데이터 시각화, 그리고 Firebase 설정 등 다양한 기술을 학습하고 적용한 점에서 유익했습니다.
추후 업데이트에서는 사용자 인터페이스 최적화 및 추가 기능(예: 번호 추천 알고리즘)을 고려하고 있습니다.
CleverPad 앱 개발 이야기: 초보 개발자의 도전기 3 (0) | 2025.01.12 |
---|---|
CleverPad 앱 개발 이야기: 초보 개발자의 도전기 2 (1) | 2025.01.12 |
CleverPad 앱 개발 이야기: 초보 개발자의 도전기 1 (1) | 2025.01.12 |