diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-06-26 18:50:56 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-06-26 18:50:56 +0330 |
commit | 3699c47c9c5c9323c96d8257de6cdcf19cb5f935 (patch) | |
tree | 8751198eb93cf7de755bb98969feaa4fdadec7a9 | |
parent | b6ecd5026e5e64b5e8fb67f84d6c89ec6a24db31 (diff) |
add rotate
going to add hints
4 files changed, 52 insertions, 27 deletions
diff --git a/app/src/main/java/com/a404m/mine_game/model/GameState.kt b/app/src/main/java/com/a404m/mine_game/model/GameState.kt index 69d022a..45b2fb7 100644 --- a/app/src/main/java/com/a404m/mine_game/model/GameState.kt +++ b/app/src/main/java/com/a404m/mine_game/model/GameState.kt @@ -25,9 +25,6 @@ class GameState( val minutes:Int get() = ((millis/1000)/60).toInt() - val remainingBombs: Int - get() = matrix.sumOf { it.count { cell -> cell.isBomb && !cell.isOpened } } - val flagCounts: Int get() = matrix.sumOf { it.count { cell -> cell.isFlag } } diff --git a/app/src/main/java/com/a404m/mine_game/storage/StorageBase.kt b/app/src/main/java/com/a404m/mine_game/storage/StorageBase.kt index d3e0269..8aafc79 100644 --- a/app/src/main/java/com/a404m/mine_game/storage/StorageBase.kt +++ b/app/src/main/java/com/a404m/mine_game/storage/StorageBase.kt @@ -88,25 +88,25 @@ open class StorageBase( null, ) - protected fun getInt(key: String) = getPrefs().getInt( + protected fun getInt(key: String) = if(getPrefs().contains(key)) getPrefs().getInt( key, -1, - ) + ) else null - protected fun getLong(key: String) = getPrefs().getLong( + protected fun getLong(key: String) = if(getPrefs().contains(key)) getPrefs().getLong( key, -1, - ) + ) else null - protected fun getFloat(key: String) = getPrefs().getFloat( + protected fun getFloat(key: String) = if(getPrefs().contains(key)) getPrefs().getFloat( key, -1f, - ) + ) else null - protected fun getBoolean(key: String) = getPrefs().getBoolean( + protected fun getBoolean(key: String) = if(getPrefs().contains(key)) getPrefs().getBoolean( key, false, - ) + ) else null protected fun getStringSet(key: String) = getPrefs().getStringSet( key, diff --git a/app/src/main/java/com/a404m/mine_game/storage/StorageGame.kt b/app/src/main/java/com/a404m/mine_game/storage/StorageGame.kt index 402fe20..13b8970 100644 --- a/app/src/main/java/com/a404m/mine_game/storage/StorageGame.kt +++ b/app/src/main/java/com/a404m/mine_game/storage/StorageGame.kt @@ -8,6 +8,7 @@ object StorageGame : StorageBase("StorageSettings") { private const val GAME_SETTINGS_KEY = "game_settings" private const val LAST_GAME_STATE_KEY = "last_game" private const val PRIMARY_ACTION_KEY = "primary_action" + private const val HINT_COUNT_KEY = "hint_count" fun save(value: GameSettings) = save( GAME_SETTINGS_KEY, @@ -41,10 +42,19 @@ object StorageGame : StorageBase("StorageSettings") { ) fun getPrimaryAction(): Action? { - val value = getInt(PRIMARY_ACTION_KEY) + val value = getInt(PRIMARY_ACTION_KEY) ?: return null return Action.from(value) } fun deletePrimaryAction() = delete(PRIMARY_ACTION_KEY) + + fun saveHintCount(value: Action) = save( + HINT_COUNT_KEY, + value.ordinal, + ) + + fun getHintCount(): Int? = getInt(HINT_COUNT_KEY) + + fun deleteHintCount() = delete(HINT_COUNT_KEY) }
\ No newline at end of file diff --git a/app/src/main/java/com/a404m/mine_game/ui/page/Game.kt b/app/src/main/java/com/a404m/mine_game/ui/page/Game.kt index cf3b991..aa82b98 100644 --- a/app/src/main/java/com/a404m/mine_game/ui/page/Game.kt +++ b/app/src/main/java/com/a404m/mine_game/ui/page/Game.kt @@ -68,7 +68,11 @@ fun GamePage( }" } } - val minesRemaining by remember { derivedStateOf { gameState.remainingBombs - gameState.flagCounts } } + val minesRemaining by remember { + derivedStateOf { + gameState.bombCount - gameState.flagCounts + } + } val isLost by remember { derivedStateOf { gameState.isLost() @@ -83,6 +87,7 @@ fun GamePage( var action by rememberSaveable { mutableStateOf(Action.current) } var zoomOverall by rememberSaveable { mutableFloatStateOf(1f) } + var rotationOverall by rememberSaveable { mutableFloatStateOf(0f) } LaunchedEffect(Unit) { val startTime = PersianDate() @@ -170,17 +175,24 @@ fun GamePage( rememberFreeScrollState(), onGesture = { centroid: Offset, pan: Offset, zoom: Float, rotation: Float -> zoomOverall *= zoom - if (zoomOverall >= 1f) { - zoomOverall = 1f + if (zoomOverall >= 2f) { + zoomOverall = 2f } else if (zoomOverall <= 0.1f) { zoomOverall = 0.1f } + rotationOverall += rotation + if(rotationOverall >= 360f){ + rotationOverall -= 360 + }else if(rotationOverall < 0f){ + rotationOverall += 360f + } Log.d( TAG, - "GamePage: zoom = $zoomOverall" + "GamePage: zoom = $zoomOverall rotation = $rotation" ) }, ) + .rotate(rotationOverall) .padding(innerPadding) .padding(100.dp), ) { @@ -193,7 +205,7 @@ fun GamePage( cell = cell, zoom = zoomOverall, onSelect = { - if(isLost || isWon){ + if (isLost || isWon) { return@Cell } when (action) { @@ -241,7 +253,7 @@ fun GamePage( var dialogIsDismissed by remember { mutableStateOf(false) } - if(!dialogIsDismissed) { + if (!dialogIsDismissed) { if (isLost) { Dialog( onDismissRequest = { @@ -249,10 +261,13 @@ fun GamePage( }, ) { Column( - modifier = Modifier.fillMaxWidth().background( - color = MaterialTheme.colorScheme.background, - shape = MaterialTheme.shapes.large, - ).padding(10.dp), + modifier = Modifier + .fillMaxWidth() + .background( + color = MaterialTheme.colorScheme.background, + shape = MaterialTheme.shapes.large, + ) + .padding(10.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, ) { @@ -303,10 +318,13 @@ fun GamePage( }, ) { Column( - modifier = Modifier.fillMaxWidth().background( - color = MaterialTheme.colorScheme.background, - shape = MaterialTheme.shapes.large, - ).padding(10.dp), + modifier = Modifier + .fillMaxWidth() + .background( + color = MaterialTheme.colorScheme.background, + shape = MaterialTheme.shapes.large, + ) + .padding(10.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, ) { @@ -321,7 +339,7 @@ fun GamePage( modifier = Modifier .fillMaxWidth() .padding(bottom = 10.dp), - text = "You found ${gameState.remainingBombs} mines in ${gameState.minutes}:${ + text = "You found ${gameState.bombCount} mines in ${gameState.minutes}:${ gameState.seconds.toString().padStart( 2, '0' |