feat: 每个模式分别记忆AI难度、手牌上限、总玩家数
This commit is contained in:
parent
bfd22f56a8
commit
800238df40
@ -75,5 +75,17 @@ data class GameRules(
|
||||
GameMode.NO_MERCY -> 10
|
||||
else -> 0 // no limit for other modes
|
||||
}
|
||||
|
||||
private const val PLAYERS_KEY_PREFIX = "players_"
|
||||
|
||||
fun loadPlayerCount(context: Context, mode: GameMode): Int {
|
||||
return context.getSharedPreferences("unogame_prefs", Context.MODE_PRIVATE)
|
||||
.getInt(PLAYERS_KEY_PREFIX + mode.name, 2)
|
||||
}
|
||||
|
||||
fun savePlayerCount(context: Context, mode: GameMode, count: Int) {
|
||||
context.getSharedPreferences("unogame_prefs", Context.MODE_PRIVATE)
|
||||
.edit().putInt(PLAYERS_KEY_PREFIX + mode.name, count).apply()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,17 +10,19 @@ enum class AIDifficulty(val displayName: String) {
|
||||
HARD("困难");
|
||||
|
||||
companion object {
|
||||
private const val KEY = "ai_difficulty"
|
||||
private const val KEY_PREFIX = "ai_diff_"
|
||||
|
||||
fun load(context: Context): AIDifficulty {
|
||||
fun load(context: Context, mode: GameMode): AIDifficulty {
|
||||
val key = KEY_PREFIX + mode.name
|
||||
val name = context.getSharedPreferences("unogame_prefs", Context.MODE_PRIVATE)
|
||||
.getString(KEY, NORMAL.name) ?: NORMAL.name
|
||||
.getString(key, NORMAL.name) ?: NORMAL.name
|
||||
return try { valueOf(name) } catch (_: Exception) { NORMAL }
|
||||
}
|
||||
|
||||
fun save(context: Context, diff: AIDifficulty) {
|
||||
fun save(context: Context, mode: GameMode, diff: AIDifficulty) {
|
||||
val key = KEY_PREFIX + mode.name
|
||||
context.getSharedPreferences("unogame_prefs", Context.MODE_PRIVATE)
|
||||
.edit().putString(KEY, diff.name).apply()
|
||||
.edit().putString(key, diff.name).apply()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -128,7 +128,7 @@ fun LocalGameScreen(
|
||||
val context = LocalContext.current
|
||||
val rules = remember { GameRules.forMode(mode, GameRules.loadMaxHandSize(context, mode)) }
|
||||
val engine = remember { GameEngine(rules) }
|
||||
val aiDiff = remember { AIDifficulty.load(context) }
|
||||
val aiDiff = remember { AIDifficulty.load(context, mode) }
|
||||
val gameStartTime = remember { System.currentTimeMillis() }
|
||||
|
||||
val players = remember {
|
||||
|
||||
@ -34,10 +34,10 @@ fun LocalSetupScreen(
|
||||
onStartGame: (Int, String, List<String>) -> Unit,
|
||||
onBack: () -> Unit
|
||||
) {
|
||||
var totalPlayers by remember { mutableIntStateOf(2) }
|
||||
var name by remember { mutableStateOf(playerName) }
|
||||
var difficulty by remember { mutableStateOf(com.unogame.game.AIDifficulty.NORMAL) }
|
||||
val context = androidx.compose.ui.platform.LocalContext.current
|
||||
var totalPlayers by remember { mutableIntStateOf(com.unogame.game.GameRules.loadPlayerCount(context, mode)) }
|
||||
var name by remember { mutableStateOf(playerName) }
|
||||
var difficulty by remember { mutableStateOf(com.unogame.game.AIDifficulty.load(context, mode)) }
|
||||
val initMaxHandSize = remember { com.unogame.game.GameRules.loadMaxHandSize(context, mode) }
|
||||
var maxHandSize by remember { mutableIntStateOf(initMaxHandSize) }
|
||||
|
||||
@ -310,8 +310,9 @@ fun LocalSetupScreen(
|
||||
|
||||
Button(
|
||||
onClick = {
|
||||
com.unogame.game.AIDifficulty.save(context, difficulty)
|
||||
com.unogame.game.AIDifficulty.save(context, mode, difficulty)
|
||||
com.unogame.game.GameRules.saveMaxHandSize(context, mode, maxHandSize)
|
||||
com.unogame.game.GameRules.savePlayerCount(context, mode, totalPlayers)
|
||||
onStartGame(totalPlayers, name.ifBlank { "玩家" }, botNames.take(totalPlayers - 1))
|
||||
},
|
||||
modifier = Modifier.fillMaxWidth().height(56.dp),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user