RepositoryAndroid
Alix JEUDI--LEMOINE 1 year ago
commit a979a66de4

@ -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<ScientifiquesDecouvertsVM>()
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()
}
}
}

@ -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>(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
)
}
}
}

@ -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 = "___"
)

@ -3,7 +3,7 @@ package fr.iut.sciencequest.ViewModels.UiStates
import fr.iut.sciencequest.model.metier.Scientifique
class ScientifiqueDecouvertsUIState {
lateinit var scientifiques: MutableList<Scientifique>
var scientifiques: MutableList<Scientifique>
constructor() {
scientifiques = ArrayList<Scientifique>().toMutableList()

@ -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(

@ -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))
}
}
}

Loading…
Cancel
Save