From 1cdf28bcdd93d951acf3f975c5b502ef0652a01d Mon Sep 17 00:00:00 2001 From: tomivt Date: Mon, 17 Feb 2025 15:19:48 +0100 Subject: [PATCH 1/5] Answers clickable now --- .../what_the_fantasy/ui/screens/QuizPage.kt | 52 +++++++++++++++---- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt index a342a02..2970bd2 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt @@ -1,5 +1,6 @@ package com.example.what_the_fantasy.ui.screens +import android.util.Log import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -18,6 +19,11 @@ import androidx.compose.material3.ButtonColors import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset @@ -28,16 +34,34 @@ import androidx.compose.ui.unit.sp import com.example.what_the_fantasy.data.local.QuestionStub import com.example.what_the_fantasy.data.model.Question + +val questions = QuestionStub.allQuestions +var pts = 0 + @Composable fun QuizPage() { + var idCurrentQuestion by remember { mutableIntStateOf(0) } + fun goNext(correctAns: String, ans: String) { + if (correctAns == "A") { + if (questions[idCurrentQuestion].ansA == ans) pts += 1 + } + if (correctAns == "B") { + if (questions[idCurrentQuestion].ansB == ans) pts += 1 + } + if (correctAns == "C") { + if (questions[idCurrentQuestion].ansC == ans) pts += 1 + } + if (correctAns == "D") { + if (questions[idCurrentQuestion].ansD == ans) pts += 1 + } + if (idCurrentQuestion < questions.size) idCurrentQuestion += 1 + } val gradient = Brush.linearGradient( colors = listOf(Color(0xFF7B1FA2), Color(0xFF311B92)), // Violet clair → Violet foncé start = Offset(0f, 1000f), // Départ en bas à gauche end = Offset(1000f, 0f) // Fin en haut à droite ) - val questions = QuestionStub.allQuestions - Box( modifier = Modifier .fillMaxSize() @@ -46,13 +70,21 @@ fun QuizPage() { ) { // Numéro de la question en haut Text( - text = "Question numéro : " + questions.first().id.toString(), + text = "Question numéro : " + questions[idCurrentQuestion].id.toString(), color = Color.White, fontSize = 18.sp, // Taille réduite pour tenir sur un écran portrait modifier = Modifier .align(Alignment.TopCenter) // Position en haut au centre .padding(top = 16.dp) // Un peu d'espace en haut ) + Text( + text = "Nombre de points : " + pts.toString(), + color = Color.White, + fontSize = 18.sp, // Taille réduite pour tenir sur un écran portrait + modifier = Modifier + .align(Alignment.TopCenter) // Position en haut au centre + .padding(top = 50.dp) // Un peu d'espace en haut + ) // Contenu centré, mais avec une gestion plus équilibrée du placement Column( @@ -64,7 +96,7 @@ fun QuizPage() { ) { // Question principale Text( - text = questions.first().question, + text = questions[idCurrentQuestion].question, color = Color.White, fontSize = 22.sp, // Taille plus petite pour tenir sur un écran portrait modifier = Modifier.padding(bottom = 16.dp) // Réduit l'espacement entre la question et les réponses @@ -72,13 +104,15 @@ fun QuizPage() { // Liste des réponses val answers = listOf( - questions.first().ansA, - questions.first().ansB, - questions.first().ansC, - questions.first().ansD + questions[idCurrentQuestion].ansA, + questions[idCurrentQuestion].ansB, + questions[idCurrentQuestion].ansC, + questions[idCurrentQuestion].ansD, + ) // Pour chaque réponse, on applique une Box avec un espacement uniforme + answers.forEach { answer -> Box( modifier = Modifier @@ -88,7 +122,7 @@ fun QuizPage() { brush = gradient, shape = RoundedCornerShape(16.dp) // Coins arrondis ) - .clickable { /* Action pour la réponse */ } + .clickable { goNext(questions[idCurrentQuestion].correctAns, answer) } .padding(horizontal = 8.dp), // Padding interne contentAlignment = Alignment.Center ) { From 3a01eaa1b7aaeadc43a90eaa283502f0c863496c Mon Sep 17 00:00:00 2001 From: "louis.guichard-montguers" Date: Mon, 17 Feb 2025 20:03:40 +0100 Subject: [PATCH 2/5] ajoout QuizAccueil --- .../example/what_the_fantasy/MainActivity.kt | 6 +- .../ui/screens/QuizAccueil.kt | 136 ++++++++++++++++++ .../what_the_fantasy/ui/screens/QuizPage.kt | 21 ++- .../app/src/main/res/drawable/quiz.jpg | Bin 0 -> 13644 bytes 4 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt create mode 100644 What_The_Fantasy/app/src/main/res/drawable/quiz.jpg diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt index 45b0771..cc76997 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt @@ -11,10 +11,13 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.navigation.compose.rememberNavController import com.example.what_the_fantasy.ui.screens.AppNavigator import com.example.what_the_fantasy.ui.theme.What_The_FantasyTheme import com.example.what_the_fantasy.ui.screens.LoginPage import com.example.what_the_fantasy.ui.screens.ProfilPage +import com.example.what_the_fantasy.ui.screens.QuizAccueil +import com.example.what_the_fantasy.ui.screens.QuizApp import com.example.what_the_fantasy.ui.screens.QuizPage class MainActivity : ComponentActivity() { @@ -31,9 +34,10 @@ class MainActivity : ComponentActivity() { ) } } + //AppNavigator() // Accès à la page login et SingUp (pour le moment) //ProfilPage() //Accès à la page profil - QuizPage() + QuizApp() } } } diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt new file mode 100644 index 0000000..f9f7e9c --- /dev/null +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt @@ -0,0 +1,136 @@ +package com.example.what_the_fantasy.ui.screens + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import com.example.what_the_fantasy.R + + +@Composable +fun QuizAccueil(navController: NavController) { + Row( + modifier = Modifier + .fillMaxSize() + .background(Color(0xFF100C1B)) + .padding(top = 100.dp) + ) { + Spacer(modifier = Modifier.weight(0.1f)) + + Column( + modifier = Modifier + .weight(0.9f) + .fillMaxHeight(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Box( + modifier = Modifier + .size(width = 150.dp, height = 100.dp) + .padding(8.dp) + .clickable { + navController.navigate("quizPage") + } + ) { + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Quiz 1", + modifier = Modifier.fillMaxSize(), + contentScale = ContentScale.Crop + ) + } + + Box( + modifier = Modifier + .size(width = 150.dp, height = 100.dp) + .padding(8.dp) + .clickable { + + navController.navigate("quizPage") + } + ) { + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Quiz 2", + modifier = Modifier.fillMaxSize(), + contentScale = ContentScale.Crop + ) + } + } + + Spacer(modifier = Modifier.width(10.dp)) + + Column( + modifier = Modifier + .weight(0.9f) + .fillMaxHeight(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Box( + modifier = Modifier + .size(width = 150.dp, height = 100.dp) + .padding(8.dp) + .clickable { + navController.navigate("quizPage") + } + ) { + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Quiz 3", + modifier = Modifier.fillMaxSize(), + contentScale = ContentScale.Crop + ) + } + + Box( + modifier = Modifier + .size(width = 150.dp, height = 100.dp) + .padding(8.dp) + .clickable { + navController.navigate("quizPage") + } + ) { + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Quiz 4", + modifier = Modifier.fillMaxSize(), + contentScale = ContentScale.Crop + ) + } + } + + Spacer(modifier = Modifier.weight(0.1f)) + } +} + +@Composable +fun QuizApp() { + val navController = rememberNavController() + + NavHost(navController = navController, startDestination = "quizAccueil") { + composable("quizAccueil") { + QuizAccueil(navController = navController) + } + composable("quizPage") { + QuizPage(navController = navController) + } + } +} \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt index 2970bd2..8eee9c3 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt @@ -14,9 +14,13 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material3.Button import androidx.compose.material3.ButtonColors import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -31,6 +35,7 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.navigation.NavController import com.example.what_the_fantasy.data.local.QuestionStub import com.example.what_the_fantasy.data.model.Question @@ -39,7 +44,7 @@ val questions = QuestionStub.allQuestions var pts = 0 @Composable -fun QuizPage() { +fun QuizPage(navController: NavController) { var idCurrentQuestion by remember { mutableIntStateOf(0) } fun goNext(correctAns: String, ans: String) { if (correctAns == "A") { @@ -68,6 +73,20 @@ fun QuizPage() { .background(Color(0xFF100C1B)) // Fond global de l'écran .padding(16.dp) // Marges autour de tout le contenu ) { + IconButton( + onClick = { + navController.popBackStack() // Revenir à la page précédente (QuizAccueil) + }, + modifier = Modifier + .align(Alignment.TopStart) + ) { + Icon( + imageVector = Icons.Default.ArrowBack, // Flèche de retour + contentDescription = "Retour", + tint = Color.White + ) + } + // Numéro de la question en haut Text( text = "Question numéro : " + questions[idCurrentQuestion].id.toString(), diff --git a/What_The_Fantasy/app/src/main/res/drawable/quiz.jpg b/What_The_Fantasy/app/src/main/res/drawable/quiz.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0bcef9fef19346165fa1fc927c32b73f58f5e7c GIT binary patch literal 13644 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 Date: Tue, 18 Feb 2025 11:09:21 +0100 Subject: [PATCH 3/5] Update QuizPage code --- .../example/what_the_fantasy/MainActivity.kt | 6 - .../what_the_fantasy/ui/screens/QuizPage.kt | 182 ++++++------------ 2 files changed, 62 insertions(+), 126 deletions(-) diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt index cc76997..691ac43 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt @@ -11,14 +11,8 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.navigation.compose.rememberNavController -import com.example.what_the_fantasy.ui.screens.AppNavigator import com.example.what_the_fantasy.ui.theme.What_The_FantasyTheme -import com.example.what_the_fantasy.ui.screens.LoginPage -import com.example.what_the_fantasy.ui.screens.ProfilPage -import com.example.what_the_fantasy.ui.screens.QuizAccueil import com.example.what_the_fantasy.ui.screens.QuizApp -import com.example.what_the_fantasy.ui.screens.QuizPage class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt index 8eee9c3..4317669 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizPage.kt @@ -1,33 +1,16 @@ package com.example.what_the_fantasy.ui.screens -import android.util.Log import androidx.compose.foundation.background import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonColors -import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset @@ -37,124 +20,83 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavController import com.example.what_the_fantasy.data.local.QuestionStub -import com.example.what_the_fantasy.data.model.Question - - -val questions = QuestionStub.allQuestions -var pts = 0 @Composable fun QuizPage(navController: NavController) { + val questions = QuestionStub.allQuestions var idCurrentQuestion by remember { mutableIntStateOf(0) } - fun goNext(correctAns: String, ans: String) { - if (correctAns == "A") { - if (questions[idCurrentQuestion].ansA == ans) pts += 1 - } - if (correctAns == "B") { - if (questions[idCurrentQuestion].ansB == ans) pts += 1 - } - if (correctAns == "C") { - if (questions[idCurrentQuestion].ansC == ans) pts += 1 - } - if (correctAns == "D") { - if (questions[idCurrentQuestion].ansD == ans) pts += 1 - } - if (idCurrentQuestion < questions.size) idCurrentQuestion += 1 - } + var pts by remember { mutableIntStateOf(0) } + val gradient = Brush.linearGradient( - colors = listOf(Color(0xFF7B1FA2), Color(0xFF311B92)), // Violet clair → Violet foncé - start = Offset(0f, 1000f), // Départ en bas à gauche - end = Offset(1000f, 0f) // Fin en haut à droite + colors = listOf(Color(0xFF7B1FA2), Color(0xFF311B92)), + start = Offset(0f, 1000f), + end = Offset(1000f, 0f) ) + fun onAnswerSelected(answer: String) { + val currentQuestion = questions[idCurrentQuestion] + val correctAnswer = mapOf( + "A" to currentQuestion.ansA, + "B" to currentQuestion.ansB, + "C" to currentQuestion.ansC, + "D" to currentQuestion.ansD + )[currentQuestion.correctAns] + + if (answer == correctAnswer) pts++ + if (idCurrentQuestion < questions.size - 1) idCurrentQuestion++ + else navController.popBackStack() // Retour menu + } + Box( modifier = Modifier .fillMaxSize() - .background(Color(0xFF100C1B)) // Fond global de l'écran - .padding(16.dp) // Marges autour de tout le contenu + .background(Color(0xFF100C1B)) + .padding(16.dp) ) { - IconButton( - onClick = { - navController.popBackStack() // Revenir à la page précédente (QuizAccueil) - }, - modifier = Modifier - .align(Alignment.TopStart) - ) { - Icon( - imageVector = Icons.Default.ArrowBack, // Flèche de retour - contentDescription = "Retour", - tint = Color.White - ) - } - - // Numéro de la question en haut - Text( - text = "Question numéro : " + questions[idCurrentQuestion].id.toString(), - color = Color.White, - fontSize = 18.sp, // Taille réduite pour tenir sur un écran portrait - modifier = Modifier - .align(Alignment.TopCenter) // Position en haut au centre - .padding(top = 16.dp) // Un peu d'espace en haut - ) - Text( - text = "Nombre de points : " + pts.toString(), - color = Color.White, - fontSize = 18.sp, // Taille réduite pour tenir sur un écran portrait - modifier = Modifier - .align(Alignment.TopCenter) // Position en haut au centre - .padding(top = 50.dp) // Un peu d'espace en haut - ) - - // Contenu centré, mais avec une gestion plus équilibrée du placement Column( modifier = Modifier - .fillMaxSize() - .padding(top = 48.dp), // Réduit l'espace entre le numéro de la question et la question elle-même - verticalArrangement = Arrangement.Center, // Centre verticalement - horizontalAlignment = Alignment.CenterHorizontally // Centre horizontalement + .fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally ) { - // Question principale - Text( - text = questions[idCurrentQuestion].question, - color = Color.White, - fontSize = 22.sp, // Taille plus petite pour tenir sur un écran portrait - modifier = Modifier.padding(bottom = 16.dp) // Réduit l'espacement entre la question et les réponses - ) - - // Liste des réponses - val answers = listOf( - questions[idCurrentQuestion].ansA, - questions[idCurrentQuestion].ansB, - questions[idCurrentQuestion].ansC, - questions[idCurrentQuestion].ansD, - - ) + val question = questions[idCurrentQuestion] - // Pour chaque réponse, on applique une Box avec un espacement uniforme - - answers.forEach { answer -> + Column ( + horizontalAlignment = Alignment.CenterHorizontally, + ) { Box( - modifier = Modifier - .width(220.dp) // Largeur plus petite pour que ça tienne mieux - .height(50.dp) // Hauteur ajustée - .background( - brush = gradient, - shape = RoundedCornerShape(16.dp) // Coins arrondis - ) - .clickable { goNext(questions[idCurrentQuestion].correctAns, answer) } - .padding(horizontal = 8.dp), // Padding interne - contentAlignment = Alignment.Center + modifier = Modifier.fillMaxWidth() ) { - Text( - text = answer, - color = Color.White, - fontSize = 18.sp // Taille du texte ajustée pour un écran portrait - ) + IconButton( + onClick = { navController.popBackStack() }, + modifier = Modifier.align(Alignment.TopStart) + ) { + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Retour", tint = Color.White) + } + } + Text("Question ${question.id}", color = Color.White, fontSize = 18.sp, modifier = Modifier.padding(top = 20.dp)) + Text("Points : $pts", color = Color.White, fontSize = 18.sp, modifier = Modifier.padding(top = 40.dp)) + Text(question.question, color = Color.White, fontSize = 22.sp, modifier = Modifier.padding(40.dp)) + } + Column ( + modifier = Modifier + .padding(top = 30.dp) + ) { + listOf(question.ansA, question.ansB, question.ansC, question.ansD).forEach { answer -> + Box( + modifier = Modifier + .width(220.dp) + .height(50.dp) + .background(brush = gradient, shape = RoundedCornerShape(16.dp)) + .clickable { onAnswerSelected(answer) } + .padding(horizontal = 8.dp), + contentAlignment = Alignment.Center + ) { + Text(answer, color = Color.White, fontSize = 18.sp) + } + Spacer(modifier = Modifier.height(60.dp)) } - Spacer(modifier = Modifier.height(16.dp)) // Espacement réduit entre les réponses } + } } -} - - +} \ No newline at end of file From bfe8bf5b9df2cd424ee1b20b3bfed4547d052b4f Mon Sep 17 00:00:00 2001 From: tomivt Date: Wed, 19 Feb 2025 09:13:54 +0100 Subject: [PATCH 4/5] WIP : Create QuizEnd View --- .../example/what_the_fantasy/MainActivity.kt | 6 +- .../ui/screens/QuizAccueil.kt | 5 +- .../ui/screens/QuizEndPage.kt | 218 ++++++++++++++++++ 3 files changed, 225 insertions(+), 4 deletions(-) create mode 100644 What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt index 691ac43..3ba2662 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/MainActivity.kt @@ -20,17 +20,17 @@ class MainActivity : ComponentActivity() { enableEdgeToEdge() setContent { What_The_FantasyTheme { - Column { + /*Column { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Title( title = "What The Fantasy", modifier = Modifier.padding(innerPadding) ) } - } + }*/ //AppNavigator() // Accès à la page login et SingUp (pour le moment) - //ProfilPage() //Accès à la page profil + //ProfilPage() //Accès à la page profil QuizApp() } } diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt index f9f7e9c..b237afd 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizAccueil.kt @@ -125,12 +125,15 @@ fun QuizAccueil(navController: NavController) { fun QuizApp() { val navController = rememberNavController() - NavHost(navController = navController, startDestination = "quizAccueil") { + NavHost(navController = navController, startDestination = "quizEndPage") { composable("quizAccueil") { QuizAccueil(navController = navController) } composable("quizPage") { QuizPage(navController = navController) } + composable("quizEndPage") { + QuizEndPage(5, 1) + } } } \ No newline at end of file diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt new file mode 100644 index 0000000..9fdf003 --- /dev/null +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt @@ -0,0 +1,218 @@ +package com.example.what_the_fantasy.ui.screens + +import android.widget.ImageButton +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableDoubleStateOf +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.example.what_the_fantasy.R + +val gradient = Brush.linearGradient( + colors = listOf(Color(0xFF7B1FA2), Color(0xFF311B92)), + start = Offset(0f, 1000f), + end = Offset(1000f, 0f) +) + +@Composable +fun QuizEndPage(points : Int, idQuiz : Int) { + Column ( + modifier = Modifier + .fillMaxSize() + .background(Color(0xFF100C1B)) + ) { + // Bandeau ( Bouton Retour / Bouton Profil / Dark-Light Mode ) + Row ( + modifier = Modifier + .background(Color(0xFF300052)) + .height(100.dp) + .fillMaxWidth() + .padding(20.dp) + ) { + Row ( + modifier = Modifier + .fillMaxSize() + ) { + Row ( + modifier = Modifier + .fillMaxWidth() + .clickable { }, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Box { + IconButton( + onClick = { }, + modifier = Modifier + .align(Alignment.TopStart) + .fillMaxHeight() + ) { + Icon( + Icons.AutoMirrored.Filled.ArrowBack, + contentDescription = "Retour", + tint = Color.White) + } + } + Box ( + modifier = Modifier + .background(Color.Yellow, shape = CircleShape), + contentAlignment = Alignment.Center + ) { + Image ( + // Image transparente + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Back Button" + ) + } + Box ( + modifier = Modifier + .background(Color.Yellow, shape = CircleShape), + contentAlignment = Alignment.Center + ) { + Image ( + // Image transparente + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Back Button" + ) + } + } + } + } + + // Titre de la page + Box( + modifier = Modifier + .fillMaxWidth() + .height(100.dp) + .background(Color.Red), + contentAlignment = Alignment.Center + ) { + Text ( + text = "▶ Résultats ◀", + color = Color.White, + style = TextStyle( + fontSize = 25.sp, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center + ), + modifier = Modifier.fillMaxWidth() + ) + } + + // Résultat du quiz + Column ( + modifier = Modifier + .padding(50.dp) + ) { + Column ( + modifier = Modifier + .background(brush = gradient, shape = RoundedCornerShape(20.dp)) + .fillMaxHeight() + .padding(30.dp) + ) { + Box ( + modifier = Modifier + .fillMaxWidth() + .height(50.dp), + contentAlignment = Alignment.Center + ) { + Text ( + text = "Quiz N°${idQuiz.toString()}", + color = Color.White, + style = TextStyle( + fontSize = 25.sp, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center + ), + modifier = Modifier.fillMaxWidth() + ) + } + } + } + + // Bandeau ( Bouton Likes / Bouton Menu / Bouton Quiz ) + Row ( + modifier = Modifier + .background(Color(0xFF300052)) + .height(100.dp) + .fillMaxWidth() + .padding(20.dp) + ) { + Row ( + modifier = Modifier + .fillMaxSize() + ) { + Row ( + modifier = Modifier + .fillMaxWidth() + .clickable { }, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Box ( + modifier = Modifier + .background(Color.Yellow, shape = CircleShape), + contentAlignment = Alignment.Center + ) { + Image ( + // Image transparente + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Back Button" + ) + } + Box ( + modifier = Modifier + .background(Color.Yellow, shape = CircleShape), + contentAlignment = Alignment.Center + ) { + Image ( + // Image transparente + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Back Button" + ) + } + Box ( + modifier = Modifier + .background(Color.Yellow, shape = CircleShape), + contentAlignment = Alignment.Center + ) { + Image ( + // Image transparente + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Back Button" + ) + } + } + } + } + } +} + From 140be5e8f4cdd7e74e20941c10f6251dbf2dca54 Mon Sep 17 00:00:00 2001 From: tomivt Date: Wed, 19 Feb 2025 17:02:06 +0100 Subject: [PATCH 5/5] Finish QuizEnd View --- .../ui/screens/QuizEndPage.kt | 257 +++++++----------- 1 file changed, 101 insertions(+), 156 deletions(-) diff --git a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt index 9fdf003..359e7f7 100644 --- a/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt +++ b/What_The_Fantasy/app/src/main/java/com/example/what_the_fantasy/ui/screens/QuizEndPage.kt @@ -1,30 +1,16 @@ package com.example.what_the_fantasy.ui.screens -import android.widget.ImageButton import androidx.compose.foundation.Image import androidx.compose.foundation.background -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableDoubleStateOf import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset @@ -37,6 +23,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.example.what_the_fantasy.R +import com.example.what_the_fantasy.data.local.QuestionStub val gradient = Brush.linearGradient( colors = listOf(Color(0xFF7B1FA2), Color(0xFF311B92)), @@ -44,175 +31,133 @@ val gradient = Brush.linearGradient( end = Offset(1000f, 0f) ) + + @Composable -fun QuizEndPage(points : Int, idQuiz : Int) { - Column ( - modifier = Modifier - .fillMaxSize() - .background(Color(0xFF100C1B)) +fun QuizEndPage(points: Int, idQuiz: Int) { + Column( + modifier = Modifier.fillMaxSize().background(Color(0xFF100C1B)) ) { - // Bandeau ( Bouton Retour / Bouton Profil / Dark-Light Mode ) - Row ( + // Bandeau supérieur + Row( modifier = Modifier - .background(Color(0xFF300052)) - .height(100.dp) .fillMaxWidth() - .padding(20.dp) + .weight(0.1f) + .background(Color(0xFF300052)) + .padding(20.dp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically ) { - Row ( - modifier = Modifier - .fillMaxSize() - ) { - Row ( - modifier = Modifier - .fillMaxWidth() - .clickable { }, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Box { - IconButton( - onClick = { }, - modifier = Modifier - .align(Alignment.TopStart) - .fillMaxHeight() - ) { - Icon( - Icons.AutoMirrored.Filled.ArrowBack, - contentDescription = "Retour", - tint = Color.White) - } - } - Box ( - modifier = Modifier - .background(Color.Yellow, shape = CircleShape), - contentAlignment = Alignment.Center - ) { - Image ( - // Image transparente - painter = painterResource(id = R.drawable.quiz), - contentDescription = "Back Button" - ) - } - Box ( - modifier = Modifier - .background(Color.Yellow, shape = CircleShape), - contentAlignment = Alignment.Center - ) { - Image ( - // Image transparente - painter = painterResource(id = R.drawable.quiz), - contentDescription = "Back Button" - ) - } - } + IconButton(onClick = { }) { + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Retour", tint = Color.White) } + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Profil", + modifier = Modifier.size(50.dp).background(Color.Yellow, CircleShape) + ) + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Profil", + modifier = Modifier.size(50.dp).background(Color.Yellow, CircleShape) + ) } - // Titre de la page - Box( + // Contenu principal + Column( modifier = Modifier - .fillMaxWidth() - .height(100.dp) - .background(Color.Red), - contentAlignment = Alignment.Center + .weight(0.8f) + .padding(horizontal = 50.dp, vertical = 20.dp) + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally ) { - Text ( + Text( text = "▶ Résultats ◀", color = Color.White, - style = TextStyle( - fontSize = 25.sp, - fontWeight = FontWeight.Bold, - textAlign = TextAlign.Center - ), - modifier = Modifier.fillMaxWidth() + style = TextStyle(fontSize = 25.sp, fontWeight = FontWeight.Bold, textAlign = TextAlign.Center) ) - } - - // Résultat du quiz - Column ( - modifier = Modifier - .padding(50.dp) - ) { + Spacer(modifier = Modifier.height(16.dp)) Column ( modifier = Modifier .background(brush = gradient, shape = RoundedCornerShape(20.dp)) - .fillMaxHeight() .padding(30.dp) + .fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally ) { - Box ( + Text ( + text = "Quiz N°$idQuiz", + color = Color.White, + style = TextStyle(fontSize = 25.sp, fontWeight = FontWeight.Bold, textAlign = TextAlign.Center) + ) + + val nbQuestions = QuestionStub.allQuestions.size + + Text ( + text = "Nombres de Questions : $nbQuestions", + color = Color.White, + style = TextStyle(fontSize = 15.sp, fontWeight = FontWeight.Bold, textAlign = TextAlign.Center) + ) + Text ( + text = "Nombres de bonnes réponses : $points", + color = Color.White, + style = TextStyle(fontSize = 15.sp, fontWeight = FontWeight.Bold, textAlign = TextAlign.Center) + ) + Row ( modifier = Modifier - .fillMaxWidth() - .height(50.dp), - contentAlignment = Alignment.Center + .fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceAround ) { - Text ( - text = "Quiz N°${idQuiz.toString()}", - color = Color.White, - style = TextStyle( - fontSize = 25.sp, - fontWeight = FontWeight.Bold, - textAlign = TextAlign.Center - ), - modifier = Modifier.fillMaxWidth() + // Bouton Quiz Précédent + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Profil", + modifier = Modifier.size(50.dp).background(Color.Yellow, CircleShape) + ) + // Bouton Retour Menu Quiz + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Profil", + modifier = Modifier.size(50.dp).background(Color.Yellow, CircleShape) + ) + // Bouton Quiz Suivant + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Profil", + modifier = Modifier.size(50.dp).background(Color.Yellow, CircleShape) ) } + } } - // Bandeau ( Bouton Likes / Bouton Menu / Bouton Quiz ) - Row ( + // Bandeau inférieur + Row( modifier = Modifier - .background(Color(0xFF300052)) - .height(100.dp) .fillMaxWidth() - .padding(20.dp) + .weight(0.1f) + .background(Color(0xFF300052)) + .padding(20.dp), + horizontalArrangement = Arrangement.SpaceAround, + verticalAlignment = Alignment.CenterVertically ) { - Row ( - modifier = Modifier - .fillMaxSize() - ) { - Row ( - modifier = Modifier - .fillMaxWidth() - .clickable { }, - horizontalArrangement = Arrangement.SpaceBetween - ) { - Box ( - modifier = Modifier - .background(Color.Yellow, shape = CircleShape), - contentAlignment = Alignment.Center - ) { - Image ( - // Image transparente - painter = painterResource(id = R.drawable.quiz), - contentDescription = "Back Button" - ) - } - Box ( - modifier = Modifier - .background(Color.Yellow, shape = CircleShape), - contentAlignment = Alignment.Center - ) { - Image ( - // Image transparente - painter = painterResource(id = R.drawable.quiz), - contentDescription = "Back Button" - ) - } - Box ( - modifier = Modifier - .background(Color.Yellow, shape = CircleShape), - contentAlignment = Alignment.Center - ) { - Image ( - // Image transparente - painter = painterResource(id = R.drawable.quiz), - contentDescription = "Back Button" - ) - } - } - } + // Bouton Likes + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Bouton", + modifier = Modifier.size(50.dp).background(Color.Yellow, CircleShape) + ) + // Bouton WhatTheFantasy + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Bouton", + modifier = Modifier.size(50.dp).background(Color.Yellow, CircleShape) + ) + // Bouton Quiz + Image( + painter = painterResource(id = R.drawable.quiz), + contentDescription = "Bouton", + modifier = Modifier.size(50.dp).background(Color.Yellow, CircleShape) + ) } } } -