diff --git a/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt b/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt index 5ed99f9..3ea7785 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/MainActivity.kt @@ -18,7 +18,6 @@ import fr.iut.sciencequest.ui.theme.ScienceQuestTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - val vm by viewModels() setContent { ScienceQuestTheme { // A surface container using the 'background' color from the theme @@ -26,7 +25,7 @@ class MainActivity : ComponentActivity() { modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { - NavHost(vm) + NavHost() } } } diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt new file mode 100644 index 0000000..94ebd4f --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/PenduViewModel.kt @@ -0,0 +1,45 @@ +package fr.iut.sciencequest.ViewModels + +import android.util.Log +import androidx.lifecycle.ViewModel +import fr.iut.sciencequest.ViewModels.UiStates.PenduUIState +import kotlinx.coroutines.flow.MutableStateFlow + +class PenduViewModel : ViewModel() { + var uiState = MutableStateFlow(PenduUIState()) + + // mot : mot à trouver + // motAct : état actuel du mot trouvé par l'utilisateur + public fun PlayAction(lettre: Char) { + Log.d("PenduViewModel","Un utilisateur joue une action") + if (uiState.value.motATrou.contains(lettre)) { + Log.d("PenduViewModel","L'utilisateur a fait une action invalide") + uiState.value = PenduUIState(false, + uiState.value.nbViesRestantes, + uiState.value.motATrouver, + uiState.value.motATrou + ) + } + if (uiState.value.motATrouver.contains(lettre)) { + Log.d("PenduViewModel","L'utilisateur a trouvé une lettre") + var nvMotATrou = uiState.value.motATrou + for (index in uiState.value.motATrouver.indices) { + if (uiState.value.motATrouver[index] == lettre) { + nvMotATrou = nvMotATrou.replaceRange(index,index, lettre.toString()) + } + } + uiState.value = PenduUIState(true, + uiState.value.nbViesRestantes, + uiState.value.motATrouver, + uiState.value.motATrou + ) + } else { + Log.d("PenduViewModel","L'utilisateur s'est trompé de lettre") + uiState.value = PenduUIState(true, + uiState.value.nbViesRestantes - 1, + uiState.value.motATrouver, + uiState.value.motATrou + ) + } + } +} \ No newline at end of file diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/PenduUIState.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/PenduUIState.kt new file mode 100644 index 0000000..0717bed --- /dev/null +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/PenduUIState.kt @@ -0,0 +1,8 @@ +package fr.iut.sciencequest.ViewModels.UiStates + +data class PenduUIState( + val isActionGood: Boolean = false, + val nbViesRestantes: Int = 10, + val motATrouver: String = "Mot", + val motATrou: String = "___" +) diff --git a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/ScientifiqueDecouvertsUIState.kt b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/ScientifiqueDecouvertsUIState.kt index 4af7448..68eec9e 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/ScientifiqueDecouvertsUIState.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/ViewModels/UiStates/ScientifiqueDecouvertsUIState.kt @@ -3,7 +3,7 @@ package fr.iut.sciencequest.ViewModels.UiStates import fr.iut.sciencequest.model.metier.Scientifique class ScientifiqueDecouvertsUIState { - lateinit var scientifiques: MutableList + var scientifiques: MutableList constructor() { scientifiques = ArrayList().toMutableList() diff --git a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt index 65889c6..4d0176a 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/navigation/NavHost.kt @@ -1,16 +1,14 @@ package fr.iut.sciencequest.navigation -import android.util.Log import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import fr.iut.sciencequest.ViewModels.PenduViewModel 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.getScientifiqueListeStub import fr.iut.sciencequest.view.AccountScreen import fr.iut.sciencequest.view.HomeScreen import fr.iut.sciencequest.view.LoginScreen @@ -20,12 +18,12 @@ import fr.iut.sciencequest.view.scientifiques.scientifiqueListeScreen @Composable -fun NavHost(scientifiquesDecouvertsVM: ScientifiquesDecouvertsVM) { +fun NavHost() { val navController = rememberNavController() NavHost( modifier = Modifier.fillMaxSize(), navController = navController, - startDestination = "listeScientifiques" + startDestination = "pendu" ) { composable(route = "home") { HomeScreen( diff --git a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt index 98abfc5..1a86694 100644 --- a/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt +++ b/android/app/src/main/java/fr/iut/sciencequest/view/games/Pendu.kt @@ -2,18 +2,39 @@ package fr.iut.sciencequest.view.games import androidx.compose.foundation.layout.Column 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.collectAsState +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource 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.ViewModels.PenduViewModel import fr.iut.sciencequest.view.TopBar @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()) { TopBar(goToAccount, goToHome, stringResource(id = R.string.pendu)) //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)) + } } }