diff options
Diffstat (limited to 'app')
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'  |