Skip to content

Commit 6105e5a

Browse files
authored
Merge pull request #257 from caxewsh/mvp-ranking-system
feat: add ranking system @coderabbitai
2 parents e6c6601 + 6eae853 commit 6105e5a

File tree

7 files changed

+61
-26
lines changed

7 files changed

+61
-26
lines changed

.maestro/launchGame.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,9 @@ appId: com.axe.l.r.drinkup
2424
- tapOn: "ON EST PRET !"
2525

2626
- repeat:
27-
times: 10
2827
while:
2928
notVisible: "Fin de Partie"
3029
commands:
3130
- tapOn: "TOUR SUIVANT"
3231

33-
- tapOn:
34-
id: "homeButton"
35-
- stopApp
32+
Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,32 @@
11
import React from "react";
2-
import { View, Text } from "react-native";
2+
import { View, Text, ScrollView } from "react-native";
3+
4+
const EndscreenCard = ({ players }) => {
5+
const sortedPlayers = [...players].sort((a, b) => b.score - a.score);
36

4-
const EndscreenCard = () => {
57
return (
68
<View
7-
style={{ backgroundColor: "rgba(255, 255, 255, 0.1)" }}
8-
className="flex-1 justify-center w-78 m-10 mx-4 p-10 rounded-lg"
9-
>
10-
<Text className=" text-white font-semibold text-center text-sm">
11-
Merci d'avoir participé à la beta. Faites nous part de vos retour
12-
via le lien ci-dessous :
13-
</Text>
14-
</View>
9+
style={{ backgroundColor: "rgba(255, 255, 255, 0.1)" }}
10+
className="flex-1 justify-center w-78 m-10 mx-4 p-10 rounded-lg"
11+
>
12+
<Text className="text-white font-semibold text-center text-sm mb-4">
13+
Plus tu prends chères, plus tu accumules les points ! Voici les scores :
14+
</Text>
15+
16+
<ScrollView className="mt-4">
17+
{sortedPlayers.map((player, index) => (
18+
<View key={index} className="flex-row justify-between my-2 p-2 bg-gray-800 rounded-lg">
19+
<Text className="text-white font-semibold">
20+
{player.name}
21+
</Text>
22+
<Text className="text-white font-semibold">
23+
Score: {player.score}
24+
</Text>
25+
</View>
26+
))}
27+
</ScrollView>
28+
</View>
1529
);
1630
};
1731

18-
export default EndscreenCard;
32+
export default EndscreenCard;

components/endscreen/EndscreenHeader.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const EndscreenHeader = ({ onPress }) => {
1313
<HomeIcon color="white" size="30" className="" testID="homeButton" />
1414
</TouchableOpacity>
1515
<Text className="text-white absolute left-28 text-2xl font-black">
16-
Fin de Partie
16+
Classement
1717
</Text>
1818
</View>
1919
)

components/lobbyscreen/LobbyButton.jsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,20 @@ import Animated, { SlideInDown } from "react-native-reanimated";
44

55
const LobbyButton = ({ onPress, disabled }) => {
66
return (
7-
<Animated.View className="flex-1 justify-center items-center " entering={SlideInDown.duration(800)}>
7+
<Animated.View
8+
className="flex-1 justify-center items-center"
9+
entering={SlideInDown.duration(800)}
10+
>
811
<TouchableOpacity
912
disabled={disabled}
1013
onPress={onPress}
11-
className=" bg-white absolute top-0 w-40 px-4 py-4 border-solid rounded-lg mt-4 justify-center align-items-center"
14+
className={`absolute top-0 w-40 px-4 py-4 border-solid rounded-lg mt-4 justify-center items-center ${
15+
disabled ? 'bg-gray-300' : 'bg-white'
16+
}`}
1217
>
13-
<Text className="text-cyan-900 text-sm text-center font-bold">
18+
<Text className={`text-sm text-center font-bold ${
19+
disabled ? 'text-gray-500' : 'text-cyan-900'
20+
}`}>
1421
ON EST PRET !
1522
</Text>
1623
</TouchableOpacity>

components/lobbyscreen/PlayerNameInput.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const PlayerNameInput = ({ onChangeText, onSubmitEditing, value }) => {
88
value={value}
99
onChangeText={onChangeText}
1010
onSubmitEditing={onSubmitEditing}
11+
autoCorrect={false}
1112
textAlign="center"
1213
placeholder="Nom du joueur"
1314
className=" bg-white font-semibold w-5/6 mx-4 h-10 px-4 py-1 rounded-md"

screens/Endscreen.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import EndscreenHeader from "../components/endscreen/EndscreenHeader";
88
import EndscreenButton from "../components/endscreen/EndscreenButton";
99
import EndscreenCard from "../components/endscreen/EndscreenCard";
1010

11-
export default function Endscreen() {
11+
export default function Endscreen({ route }) {
1212
const { backgroundImageSource } = useImage();
1313
const navigation = useNavigation();
14+
const { players } = route.params;
1415
const goToHomescreen = () => {
1516
navigation.navigate("Home");
1617
};
@@ -30,7 +31,7 @@ export default function Endscreen() {
3031
<SafeAreaView className="flex-1">
3132
<StatusBar style="light" />
3233
<EndscreenHeader onPress={goToHomescreen} />
33-
<EndscreenCard />
34+
<EndscreenCard players={players} />
3435
<EndscreenButton onPress={restartGame} />
3536
</SafeAreaView>
3637
</View>

screens/Gamescreen.js

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export default function Gamescreen() {
2929
const fetchQuestionsAndPlayers = async () => {
3030
setIsLoading(true);
3131
try {
32-
let { data: questionsData, error } = await supabase.from("questions").select("*");
32+
let { data: questionsData, error } = await supabase.from("questionsV3").select("*");
3333
if (error) throw error;
3434

3535
if (!Array.isArray(questionsData)) {
@@ -41,8 +41,13 @@ export default function Gamescreen() {
4141

4242
// Fetch players from AsyncStorage
4343
const playerData = await AsyncStorage.getItem("players");
44-
const parsedPlayers = JSON.parse(playerData) || [];
44+
let parsedPlayers = JSON.parse(playerData) || [];
4545

46+
parsedPlayers = parsedPlayers.map(player => ({
47+
...player,
48+
score: player.score || 0 // Initialize score if not present
49+
}));
50+
4651
if (!Array.isArray(parsedPlayers)) {
4752
throw new TypeError("Parsed players data is not an array");
4853
}
@@ -68,11 +73,21 @@ export default function Gamescreen() {
6873
};
6974
const navigation = useNavigation();
7075

71-
const handleNextRound = () => {
72-
76+
const handleNextRound = async () => {
77+
const currentQuestion = questions[currentQuestionIndex];
78+
const currentPlayerIndex = currentQuestionIndex % players.length;
79+
const currentPlayer = players[currentPlayerIndex];
80+
81+
currentPlayer.score += currentQuestion.severity || 1;
82+
try {
83+
await AsyncStorage.setItem("players", JSON.stringify(players));
84+
} catch (error) {
85+
console.error("Error updating scores:", error);
86+
}
87+
7388
if (currentQuestionIndex + 1 >= questions.length) {
7489
// No more questions, navigate to Endscreen or reset for a new game
75-
navigation.navigate("End");
90+
navigation.navigate("End", { players });
7691
} else {
7792
// Increment index to move to the next question
7893
setCurrentQuestionIndex(currentQuestionIndex + 1);

0 commit comments

Comments
 (0)