Вы можете создать класс данных для каждого уровня и поместить все свои уровни в список.Затем создайте функцию, которая выполняет выравнивание - вы не хотите помещать весь свой код в один цикл:
data class Level(
val shotRange: IntRange,
val level: Int,
val color: Color
)
val levels = listOf(
Level(0..4, 0, Color.BLUE)
// Add all levels
)
fun setLevel(cShotCount: Int) {
val level = levels.find { cShotCount in it.shotRange }
?: throw IllegalArgumentException("Shot count out of level range")
levelTextView.text = "Level: ${level.level}" // Display level
editor2.putInt("levelCount", 0) // Set level
editor2.apply()
mChart.setProgress(cShotCount.toFloat() / (level.shotRange.endInclusive + 1) * 100, true) // Display progress
mChart.progressColor(level.color) // Set progress bar color
}
Затем в вашем цикле вы можете вызвать функцию setLevel
, чтобы установитьlevel:
var cShotCount = 0
while (true) {
// Do stuff
setLevel(cShotCount)
}
Вы можете оптимизировать поиск по уровням, поместив уровни в более совершенную структуру данных для оптимизации поиска по уровням.Если у вас есть ожидаемое количество выстрелов, вы можете сделать Array<Level>
, проиндексированный по счету выстрелов, чтобы получить быстрый O(1)
поиск.Или вы можете использовать дерево, выполнять бинарный поиск и т. Д.