feat: 每个模式分别记忆AI难度、手牌上限、总玩家数
This commit is contained in:
parent
bfd22f56a8
commit
800238df40
@ -75,5 +75,17 @@ data class GameRules(
|
|||||||
GameMode.NO_MERCY -> 10
|
GameMode.NO_MERCY -> 10
|
||||||
else -> 0 // no limit for other modes
|
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("困难");
|
HARD("困难");
|
||||||
|
|
||||||
companion object {
|
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)
|
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 }
|
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)
|
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 context = LocalContext.current
|
||||||
val rules = remember { GameRules.forMode(mode, GameRules.loadMaxHandSize(context, mode)) }
|
val rules = remember { GameRules.forMode(mode, GameRules.loadMaxHandSize(context, mode)) }
|
||||||
val engine = remember { GameEngine(rules) }
|
val engine = remember { GameEngine(rules) }
|
||||||
val aiDiff = remember { AIDifficulty.load(context) }
|
val aiDiff = remember { AIDifficulty.load(context, mode) }
|
||||||
val gameStartTime = remember { System.currentTimeMillis() }
|
val gameStartTime = remember { System.currentTimeMillis() }
|
||||||
|
|
||||||
val players = remember {
|
val players = remember {
|
||||||
|
|||||||
@ -34,10 +34,10 @@ fun LocalSetupScreen(
|
|||||||
onStartGame: (Int, String, List<String>) -> Unit,
|
onStartGame: (Int, String, List<String>) -> Unit,
|
||||||
onBack: () -> 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
|
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) }
|
val initMaxHandSize = remember { com.unogame.game.GameRules.loadMaxHandSize(context, mode) }
|
||||||
var maxHandSize by remember { mutableIntStateOf(initMaxHandSize) }
|
var maxHandSize by remember { mutableIntStateOf(initMaxHandSize) }
|
||||||
|
|
||||||
@ -310,8 +310,9 @@ fun LocalSetupScreen(
|
|||||||
|
|
||||||
Button(
|
Button(
|
||||||
onClick = {
|
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.saveMaxHandSize(context, mode, maxHandSize)
|
||||||
|
com.unogame.game.GameRules.savePlayerCount(context, mode, totalPlayers)
|
||||||
onStartGame(totalPlayers, name.ifBlank { "玩家" }, botNames.take(totalPlayers - 1))
|
onStartGame(totalPlayers, name.ifBlank { "玩家" }, botNames.take(totalPlayers - 1))
|
||||||
},
|
},
|
||||||
modifier = Modifier.fillMaxWidth().height(56.dp),
|
modifier = Modifier.fillMaxWidth().height(56.dp),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user