Some vars renamed

This commit is contained in:
Salatiel Genol 2023-05-20 10:28:56 +02:00
parent 9521cae0f1
commit a100af63e1
7 changed files with 39 additions and 39 deletions

View File

@ -18,7 +18,7 @@ class GameChecks(private val player: Boolean, private val gridData: List<Ficha>)
}
result = 0
for (gridId in start..(stage * 2 + start) step stage) {
if (gridData[gridId].player == player) {
if (gridData[gridId].playerMark == player) {
result++
}
if (result == 3) return true
@ -32,7 +32,7 @@ class GameChecks(private val player: Boolean, private val gridData: List<Ficha>)
for (start in 0..2) {
result = 0
for (gridId in start..start + 6 step 3) {
if (gridData[gridId].player == player) {
if (gridData[gridId].playerMark == player) {
result++
}
if (result == 3) return true
@ -46,7 +46,7 @@ class GameChecks(private val player: Boolean, private val gridData: List<Ficha>)
for (start in 0..6 step 3) {
result = 0
for (gridId in start..start + 2) {
if (gridData[gridId].player == player) {
if (gridData[gridId].playerMark == player) {
result++
}
if (result == 3) return true

View File

@ -1,3 +1,3 @@
package es.genol.tictactoe.data.model
data class Ficha(var player: Boolean? = null)
data class Ficha(var playerMark: Boolean? = null)

View File

@ -2,7 +2,6 @@ package es.genol.tictactoe.ui.elements
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
@ -16,21 +15,13 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import es.genol.tictactoe.ui.state.GameState
import es.genol.tictactoe.ui.state.GameStateVM
import es.genol.tictactoe.ui.theme.TicTacToeTheme
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun AppContent() {
val viewModel: GameState = viewModel()
if (viewModel.isWinner) {
WinnerDialog(winner = viewModel.currentPlayer, behavior = { viewModel.cleanGrid() })
}
if (viewModel.moveNumber == 9) {
DrawDialog(behavior = { viewModel.cleanGrid() })
}
val viewModel: GameStateVM = viewModel()
TicTacToeTheme {
Surface(
@ -42,7 +33,7 @@ fun AppContent() {
TopAppBar(
title = { Text(text = "TicTacToe") },
actions = {
if (viewModel.moveNumber != null) {
if (viewModel.gridMarkCount != null) {
Button(onClick = { viewModel.cleanGrid() }) {
Text(text = "REINICIAR")
}
@ -54,15 +45,15 @@ fun AppContent() {
Modifier
.padding(it)
.padding(vertical = 15.dp)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
GameBoard(
boardSize = 3,
playerValue = { gridId ->
viewModel.gridState[gridId].player
viewModel.gridState[gridId].playerMark
},
buttonEnabled = !viewModel.isWinner && viewModel.moveNumber != 9
buttonEnabled = !viewModel.isWinner && viewModel.gridMarkCount != 9
) { gridId ->
viewModel.playerMarkGrid(gridId)
}
@ -70,5 +61,14 @@ fun AppContent() {
}
}
}
if (viewModel.isWinner) {
WinnerDialog(winner = viewModel.currentPlayer, behavior = { viewModel.cleanGrid() })
}
if (viewModel.gridMarkCount == 9) {
DrawDialog(behavior = { viewModel.cleanGrid() })
}
}

View File

@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
@ -48,9 +49,9 @@ fun GameBoard(
) {
playerValue(grid[row][col])?.let { player ->
if (player) {
CircleIcon()
CircleIcon(modifier = Modifier.fillMaxSize())
} else {
CrossIcon()
CrossIcon(modifier = Modifier.fillMaxSize())
}
}
}

View File

@ -24,9 +24,9 @@ fun WinnerDialog(
title = { Text(text = "Ganador!!!")},
text = {
if (winner) {
CircleIcon()
CircleIcon(modifier = Modifier.fillMaxSize())
} else {
CrossIcon()
CrossIcon(modifier = Modifier.fillMaxSize())
}
}
)
@ -44,7 +44,7 @@ fun DrawDialog(
Modifier.fillMaxSize(.95f),
title = { Text(text = "Empate")},
text = {
DrawIcon()
DrawIcon(modifier = Modifier.fillMaxSize())
}
)
}

View File

@ -9,7 +9,7 @@ import es.genol.tictactoe.GameChecks
import es.genol.tictactoe.data.model.Ficha
import kotlin.random.Random
class GameState : ViewModel() {
class GameStateVM : ViewModel() {
private var _gridState = MutableList(9) { Ficha() }.toMutableStateList()
val gridState get() = _gridState.toList()
@ -19,15 +19,15 @@ class GameState : ViewModel() {
private var _isWinner by mutableStateOf(false)
val isWinner get() = _isWinner
private var _moveNumber by mutableStateOf<Int?>(null)
val moveNumber get() = _moveNumber
private var _gridMarkCount by mutableStateOf<Int?>(null)
val gridMarkCount get() = _gridMarkCount
fun playerMarkGrid(gridId: Int) {
if (_gridState[gridId].player == null) {
_gridState[gridId] = _gridState[gridId].copy(player = _currentPlayer)
if (_gridState[gridId].playerMark == null) {
_gridState[gridId] = _gridState[gridId].copy(playerMark = _currentPlayer)
_isWinner = GameChecks(_currentPlayer, gridData = gridState).playerWinnerCheck()
_moveNumber = (_gridState.count { it.player != null })
_gridMarkCount = (_gridState.count { it.playerMark != null })
_currentPlayer = !_currentPlayer
}
}
@ -36,7 +36,7 @@ class GameState : ViewModel() {
repeat(9) { _gridState[it] = Ficha() }
_currentPlayer = ramdomPlayer()
_isWinner = false
_moveNumber = null
_gridMarkCount = null
}
private fun ramdomPlayer() = (Random.nextBits(bitCount = 1) > 0)

View File

@ -1,6 +1,5 @@
package es.genol.tictactoe.ui.theme
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material3.Icon
@ -10,31 +9,31 @@ import androidx.compose.ui.res.painterResource
import es.genol.tictactoe.R
@Composable
fun CrossIcon() {
fun CrossIcon(modifier: Modifier = Modifier) {
Icon(
Icons.Default.Close,
contentDescription = "Cross red icon",
modifier = Modifier.fillMaxSize(),
modifier = modifier,
tint = CustomRed
)
}
@Composable
fun CircleIcon() {
fun CircleIcon(modifier: Modifier = Modifier) {
Icon(
painter = painterResource(id = R.drawable.outline_circle_24),
contentDescription = "Cross red icon",
modifier = Modifier.fillMaxSize(),
modifier = modifier,
tint = CustomGreen
)
}
@Composable
fun DrawIcon() {
fun DrawIcon(modifier: Modifier = Modifier) {
Icon(
painter = painterResource(id = R.drawable.baseline_handshake_24),
contentDescription = "Draw blue icon",
modifier = Modifier.fillMaxSize(),
modifier = modifier,
tint = CustomBlue
)
}