[ADD] Logique fonctionnelle

RepositoryAndroid
Renaud BEURET 1 year ago
parent 042f9399af
commit d0faf2e972

@ -18,7 +18,6 @@ import fr.iut.sciencequest.ui.theme.ScienceQuestTheme
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val vm by viewModels<ScientifiquesDecouvertsVM>()
setContent { setContent {
ScienceQuestTheme { ScienceQuestTheme {
// A surface container using the 'background' color from the theme // A surface container using the 'background' color from the theme
@ -26,7 +25,7 @@ class MainActivity : ComponentActivity() {
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background color = MaterialTheme.colorScheme.background
) { ) {
NavHost(vm) NavHost()
} }
} }
} }

@ -1,15 +1,19 @@
package fr.iut.sciencequest.ViewModels package fr.iut.sciencequest.ViewModels
import android.util.Log
import androidx.lifecycle.ViewModel
import fr.iut.sciencequest.ViewModels.UiStates.PenduUIState import fr.iut.sciencequest.ViewModels.UiStates.PenduUIState
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
class PenduVIewModel { class PenduViewModel : ViewModel() {
var uiState = MutableStateFlow<PenduUIState>(PenduUIState()) var uiState = MutableStateFlow<PenduUIState>(PenduUIState())
// mot : mot à trouver // mot : mot à trouver
// motAct : état actuel du mot trouvé par l'utilisateur // motAct : état actuel du mot trouvé par l'utilisateur
public fun PlayAction(lettre: Char) { public fun PlayAction(lettre: Char) {
Log.d("PenduViewModel","Un utilisateur joue une action")
if (uiState.value.motATrou.contains(lettre)) { if (uiState.value.motATrou.contains(lettre)) {
Log.d("PenduViewModel","L'utilisateur a fait une action invalide")
uiState.value = PenduUIState(false, uiState.value = PenduUIState(false,
uiState.value.nbViesRestantes, uiState.value.nbViesRestantes,
uiState.value.motATrouver, uiState.value.motATrouver,
@ -17,6 +21,7 @@ class PenduVIewModel {
) )
} }
if (uiState.value.motATrouver.contains(lettre)) { if (uiState.value.motATrouver.contains(lettre)) {
Log.d("PenduViewModel","L'utilisateur a trouvé une lettre")
var nvMotATrou = uiState.value.motATrou var nvMotATrou = uiState.value.motATrou
for (index in uiState.value.motATrouver.indices) { for (index in uiState.value.motATrouver.indices) {
if (uiState.value.motATrouver[index] == lettre) { if (uiState.value.motATrouver[index] == lettre) {
@ -29,6 +34,7 @@ class PenduVIewModel {
uiState.value.motATrou uiState.value.motATrou
) )
} else { } else {
Log.d("PenduViewModel","L'utilisateur s'est trompé de lettre")
uiState.value = PenduUIState(true, uiState.value = PenduUIState(true,
uiState.value.nbViesRestantes - 1, uiState.value.nbViesRestantes - 1,
uiState.value.motATrouver, uiState.value.motATrouver,

@ -3,6 +3,6 @@ package fr.iut.sciencequest.ViewModels.UiStates
data class PenduUIState( data class PenduUIState(
val isActionGood: Boolean = false, val isActionGood: Boolean = false,
val nbViesRestantes: Int = 10, val nbViesRestantes: Int = 10,
val motATrouver: String = "", val motATrouver: String = "Mot",
val motATrou: String = "" val motATrou: String = "___"
) )

@ -1,16 +1,14 @@
package fr.iut.sciencequest.navigation package fr.iut.sciencequest.navigation
import android.util.Log
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import fr.iut.sciencequest.ViewModels.PenduViewModel
import fr.iut.sciencequest.ViewModels.ScientifiquesDecouvertsVM import fr.iut.sciencequest.ViewModels.ScientifiquesDecouvertsVM
import fr.iut.sciencequest.model.dto.extensions.ToModel
import fr.iut.sciencequest.stub.StubQuestionWithReponses import fr.iut.sciencequest.stub.StubQuestionWithReponses
import fr.iut.sciencequest.stub.getScientifiqueListeStub
import fr.iut.sciencequest.view.AccountScreen import fr.iut.sciencequest.view.AccountScreen
import fr.iut.sciencequest.view.HomeScreen import fr.iut.sciencequest.view.HomeScreen
import fr.iut.sciencequest.view.LoginScreen import fr.iut.sciencequest.view.LoginScreen
@ -20,12 +18,12 @@ import fr.iut.sciencequest.view.scientifiques.scientifiqueListeScreen
@Composable @Composable
fun NavHost(scientifiquesDecouvertsVM: ScientifiquesDecouvertsVM) { fun NavHost() {
val navController = rememberNavController() val navController = rememberNavController()
NavHost( NavHost(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
navController = navController, navController = navController,
startDestination = "listeScientifiques" startDestination = "pendu"
) { ) {
composable(route = "home") { composable(route = "home") {
HomeScreen( HomeScreen(

@ -2,18 +2,39 @@ package fr.iut.sciencequest.view.games
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import fr.iut.sciencequest.R import fr.iut.sciencequest.R
import fr.iut.sciencequest.ViewModels.PenduViewModel
import fr.iut.sciencequest.view.TopBar import fr.iut.sciencequest.view.TopBar
@Composable @Composable
fun PenduScreen(goToAccount: () -> Unit, goToHome: () -> Unit) { fun PenduScreen(viewModel: PenduViewModel = viewModel(),
goToAccount: () -> Unit,
goToHome: () -> Unit) {
val state = viewModel.uiState.collectAsState()
Column(modifier = Modifier.fillMaxWidth()) { Column(modifier = Modifier.fillMaxWidth()) {
TopBar(goToAccount, goToHome, stringResource(id = R.string.pendu)) TopBar(goToAccount, goToHome, stringResource(id = R.string.pendu))
//Text(text = stringResource(id = R.string.pendu), modifier = Modifier.padding(top=10.dp)) //Text(text = stringResource(id = R.string.pendu), modifier = Modifier.padding(top=10.dp))
Column(modifier = Modifier.align(Alignment.CenterHorizontally))
{
Text(text = state.value.motATrou)
TextField(value = "",
onValueChange = {
if (it.isNotEmpty()) {
viewModel.PlayAction(it[0])
}},
modifier = Modifier.padding(20.dp))
}
} }
} }

Loading…
Cancel
Save