summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/com/a404m/mine_game/model/GameState.kt3
-rw-r--r--app/src/main/java/com/a404m/mine_game/storage/StorageBase.kt16
-rw-r--r--app/src/main/java/com/a404m/mine_game/storage/StorageGame.kt12
-rw-r--r--app/src/main/java/com/a404m/mine_game/ui/page/Game.kt48
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'