feat: implémentation de la section Règles des jeux
Les activités RulesListActivity et RuleDetailActivity étaient des stubs vides (TODO) -> écran noir depuis la migration du hub. - Liste des 3 jeux (Classic, 89++, Papelito) dans le style du hub - Fiche de règles détaillées par jeu (déroulement, valeurs spéciales, conditions de victoire), écrites à partir du comportement réel du code - Bouton «Jouer maintenant» ouvrant directement la configuration du jeu
This commit is contained in:
@@ -1,12 +1,68 @@
|
||||
package com.example.boidelov3.rules;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.app.Activity;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.example.boidelov3.R;
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
|
||||
/**
|
||||
* Règles détaillées d'un jeu, avec accès direct à sa configuration
|
||||
*/
|
||||
public class RuleDetailActivity extends AppCompatActivity {
|
||||
|
||||
public class RuleDetailActivity extends Activity {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// TODO: Implement rule detail screen
|
||||
setContentView(R.layout.activity_rule_detail);
|
||||
|
||||
MaterialToolbar toolbar = findViewById(R.id.toolbar);
|
||||
toolbar.setNavigationOnClickListener(v -> finish());
|
||||
|
||||
String gameId = getIntent().getStringExtra(RulesListActivity.EXTRA_GAME_ID);
|
||||
if (gameId == null) {
|
||||
gameId = RulesListActivity.GAME_CLASSIC;
|
||||
}
|
||||
|
||||
int iconRes = R.drawable.ic_boidelo_classic;
|
||||
int titleRes = R.string.boidelo_classic_title;
|
||||
int summaryRes = R.string.boidelo_classic_description;
|
||||
int detailRes = R.string.rules_classic_detail;
|
||||
Class<?> setupActivity = com.example.boidelov3.games.boideloclassic.BoideloClassicSetupActivity.class;
|
||||
|
||||
switch (gameId) {
|
||||
case RulesListActivity.GAME_89:
|
||||
iconRes = R.drawable.ic_game_89;
|
||||
titleRes = R.string.game_89_title;
|
||||
summaryRes = R.string.game_89_description;
|
||||
detailRes = R.string.rules_89_detail;
|
||||
setupActivity = com.example.boidelov3.games.game89.Game89SetupActivity.class;
|
||||
break;
|
||||
case RulesListActivity.GAME_PAPELITO:
|
||||
iconRes = R.drawable.ic_papelito;
|
||||
titleRes = R.string.rules_papelito_title;
|
||||
summaryRes = R.string.undercover_description;
|
||||
detailRes = R.string.rules_papelito_detail;
|
||||
setupActivity = com.example.boidelov3.games.papelito.PapelitoSetupActivity.class;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
toolbar.setTitle(getString(titleRes));
|
||||
((ImageView) findViewById(R.id.ruleIcon)).setImageResource(iconRes);
|
||||
((TextView) findViewById(R.id.ruleTitle)).setText(titleRes);
|
||||
((TextView) findViewById(R.id.ruleSummary)).setText(summaryRes);
|
||||
((TextView) findViewById(R.id.ruleText)).setText(detailRes);
|
||||
|
||||
MaterialButton playButton = findViewById(R.id.playButton);
|
||||
final Class<?> targetActivity = setupActivity;
|
||||
playButton.setOnClickListener(v ->
|
||||
startActivity(new Intent(this, targetActivity)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,43 @@
|
||||
package com.example.boidelov3.rules;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.app.Activity;
|
||||
|
||||
public class RulesListActivity extends Activity {
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.example.boidelov3.R;
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
|
||||
/**
|
||||
* Liste des règles : une carte par jeu, ouvre le détail des règles
|
||||
*/
|
||||
public class RulesListActivity extends AppCompatActivity {
|
||||
|
||||
/** Identifiant du jeu dont on veut les règles */
|
||||
public static final String EXTRA_GAME_ID = "RULES_GAME_ID";
|
||||
public static final String GAME_CLASSIC = "classic";
|
||||
public static final String GAME_89 = "89";
|
||||
public static final String GAME_PAPELITO = "papelito";
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// TODO: Implement rules list screen
|
||||
setContentView(R.layout.activity_rules_list);
|
||||
|
||||
MaterialToolbar toolbar = findViewById(R.id.toolbar);
|
||||
toolbar.setNavigationOnClickListener(v -> finish());
|
||||
|
||||
findViewById(R.id.cardClassic).setOnClickListener(v -> openRules(GAME_CLASSIC));
|
||||
findViewById(R.id.card89).setOnClickListener(v -> openRules(GAME_89));
|
||||
findViewById(R.id.cardPapelito).setOnClickListener(v -> openRules(GAME_PAPELITO));
|
||||
}
|
||||
|
||||
/**
|
||||
* Ouvre l'écran de règles détaillées du jeu choisi
|
||||
*/
|
||||
private void openRules(String gameId) {
|
||||
Intent intent = new Intent(this, RuleDetailActivity.class);
|
||||
intent.putExtra(EXTRA_GAME_ID, gameId);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/background"
|
||||
android:fitsSystemWindows="true"
|
||||
tools:context=".rules.RuleDetailActivity">
|
||||
|
||||
<!-- App Bar -->
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/ThemeOverlay.AppCompat.Dark">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="@color/primary"
|
||||
android:navigationIcon="@android:drawable/ic_menu_revert"
|
||||
app:title="@string/rules_list_title"
|
||||
app:titleTextColor="@color/text_on_primary"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp" />
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<!-- Main Content -->
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="24dp">
|
||||
|
||||
<!-- Icône du jeu -->
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:layout_width="88dp"
|
||||
android:layout_height="88dp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="16dp"
|
||||
app:cardBackgroundColor="@color/accent"
|
||||
app:cardCornerRadius="16dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ruleIcon"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/rules_list_title"
|
||||
android:src="@drawable/ic_boidelo_classic"
|
||||
app:tint="@color/text_primary" />
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<!-- Titre du jeu -->
|
||||
<TextView
|
||||
android:id="@+id/ruleTitle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/text_primary"
|
||||
android:textSize="24sp"
|
||||
android:textStyle="bold"
|
||||
tools:text="Boidelo Classic" />
|
||||
|
||||
<!-- Résumé en une ligne -->
|
||||
<TextView
|
||||
android:id="@+id/ruleSummary"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/text_hint"
|
||||
android:textSize="14sp"
|
||||
tools:text="Le jeu original de questions et défis" />
|
||||
|
||||
<!-- Séparateur -->
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:background="@color/card_stroke" />
|
||||
|
||||
<!-- Règles détaillées -->
|
||||
<TextView
|
||||
android:id="@+id/ruleText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:lineSpacingExtra="4dp"
|
||||
android:textColor="@color/text_primary"
|
||||
android:textSize="16sp"
|
||||
tools:text="Comment jouer..." />
|
||||
|
||||
<!-- Bouton Jouer -->
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/playButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="32dp"
|
||||
android:padding="14dp"
|
||||
android:text="@string/play_now"
|
||||
android:textColor="@color/text_on_primary"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold"
|
||||
app:backgroundTint="@color/primary"
|
||||
app:cornerRadius="12dp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
@@ -0,0 +1,321 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/background"
|
||||
android:fitsSystemWindows="true"
|
||||
tools:context=".rules.RulesListActivity">
|
||||
|
||||
<!-- App Bar -->
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/ThemeOverlay.AppCompat.Dark">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="@color/primary"
|
||||
android:navigationIcon="@android:drawable/ic_menu_revert"
|
||||
app:title="@string/rules_list_title"
|
||||
app:titleTextColor="@color/text_on_primary"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp" />
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<!-- Main Content -->
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp">
|
||||
|
||||
<!-- Title -->
|
||||
<TextView
|
||||
style="@style/BoideloTitle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/rules_list_title" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/rules_list_subtitle"
|
||||
android:textColor="@color/text_hint"
|
||||
android:textSize="14sp" />
|
||||
|
||||
<!-- Boidelo Classic -->
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/cardClassic"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
app:cardBackgroundColor="@color/card_background"
|
||||
app:cardCornerRadius="12dp"
|
||||
app:cardElevation="2dp"
|
||||
app:strokeColor="@color/card_stroke"
|
||||
app:strokeWidth="1dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:padding="16dp">
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
app:cardBackgroundColor="@color/accent"
|
||||
app:cardCornerRadius="8dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/boidelo_classic_title"
|
||||
android:src="@drawable/ic_boidelo_classic"
|
||||
app:tint="@color/text_primary" />
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/boidelo_classic_title"
|
||||
android:textColor="@color/text_primary"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2dp"
|
||||
android:text="@string/boidelo_classic_description"
|
||||
android:textColor="@color/text_hint"
|
||||
android:textSize="14sp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="8dp"
|
||||
app:cardBackgroundColor="@color/primary"
|
||||
app:cardCornerRadius="20dp"
|
||||
app:cardElevation="2dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/rules_list_title"
|
||||
android:src="@android:drawable/ic_media_play"
|
||||
app:tint="@color/text_on_primary" />
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<!-- 89++ -->
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/card89"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
app:cardBackgroundColor="@color/card_background"
|
||||
app:cardCornerRadius="12dp"
|
||||
app:cardElevation="2dp"
|
||||
app:strokeColor="@color/card_stroke"
|
||||
app:strokeWidth="1dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:padding="16dp">
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
app:cardBackgroundColor="@color/accent"
|
||||
app:cardCornerRadius="8dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/game_89_title"
|
||||
android:src="@drawable/ic_game_89"
|
||||
app:tint="@color/text_primary" />
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/game_89_title"
|
||||
android:textColor="@color/text_primary"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2dp"
|
||||
android:text="@string/game_89_description"
|
||||
android:textColor="@color/text_hint"
|
||||
android:textSize="14sp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="8dp"
|
||||
app:cardBackgroundColor="@color/primary"
|
||||
app:cardCornerRadius="20dp"
|
||||
app:cardElevation="2dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/rules_list_title"
|
||||
android:src="@android:drawable/ic_media_play"
|
||||
app:tint="@color/text_on_primary" />
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<!-- Papelito -->
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/cardPapelito"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
app:cardBackgroundColor="@color/card_background"
|
||||
app:cardCornerRadius="12dp"
|
||||
app:cardElevation="2dp"
|
||||
app:strokeColor="@color/card_stroke"
|
||||
app:strokeWidth="1dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:padding="16dp">
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
app:cardBackgroundColor="@color/accent"
|
||||
app:cardCornerRadius="8dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/rules_papelito_title"
|
||||
android:src="@drawable/ic_papelito"
|
||||
app:tint="@color/text_primary" />
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/rules_papelito_title"
|
||||
android:textColor="@color/text_primary"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2dp"
|
||||
android:text="@string/undercover_description"
|
||||
android:textColor="@color/text_hint"
|
||||
android:textSize="14sp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="8dp"
|
||||
app:cardBackgroundColor="@color/primary"
|
||||
app:cardCornerRadius="20dp"
|
||||
app:cardElevation="2dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/rules_list_title"
|
||||
android:src="@android:drawable/ic_media_play"
|
||||
app:tint="@color/text_on_primary" />
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
@@ -77,4 +77,12 @@
|
||||
|
||||
<!-- Legacy strings (to be removed after refactor) -->
|
||||
<string name="test_de_connectivit_openai">Tester la connexion</string>
|
||||
<!-- Rules Section -->
|
||||
<string name="rules_list_title">Règles des jeux</string>
|
||||
<string name="rules_list_subtitle">Choisissez un jeu pour découvrir ses règles</string>
|
||||
<string name="play_now">Jouer maintenant</string>
|
||||
<string name="rules_papelito_title">Papelito (Undercover)</string>
|
||||
<string name="rules_classic_detail">Comment jouer ?\n\n1. Ajoutez au moins 3 joueurs, puis choisissez le nombre de questions et le nombre de gorgées.\n\n2. À chaque manche, l\'application pose une question du type « Ceux/Celles qui… » : tous les joueurs concernés boivent le nombre de gorgées affiché.\n\n3. Certaines questions permettent au joueur désigné de distribuer ses gorgées aux autres.\n\nLes défis à manches\n\nCertaines questions imposent une contrainte qui dure plusieurs manches (parler au passé, interdiction de rire…). La contrainte reste affichée en haut de l\'écran : celui qui ne la respecte pas boit !\n\nLe bouton « Passer » abandonne le défi en cours et enchaîne sur la question suivante.\n\nBon à savoir\n\n• Une question déjà posée ne revient pas tant que le stock n\'est pas épuisé.\n• Activez l\'option IA dans les paramètres pour générer des questions inédites (OpenAI, OpenRouter, Z.AI).\n• En fin de partie, l\'application affiche les statistiques de la soirée.</string>
|
||||
<string name="rules_89_detail">Le principe\n\n89++ se joue avec de vraies cartes (32 ou 52). L\'application sert d\'arbitre : elle gère le timer des défis et le compteur de gorgées.\n\nLes joueurs posent chacun leur tour une carte en annonçant le total cumulé à voix haute. Le joueur qui atteint ou dépasse 89 a perdu !\n\nValeurs spéciales\n\n• Valet : -10\n• Dame : change le sens du jeu\n• Roi : le joueur choisit la valeur\n\nLes gorgées\n\nÀ chaque dizaine atteinte (10, 20, 30…), distribuez autant de gorgées que la valeur de la dizaine. Attention, 70 = double : 14 gorgées à distribuer !\n\nLes défis\n\nUn compte à rebours s\'affiche en haut de l\'écran. Quand il se termine, un carillon retentit et un défi aléatoire apparaît : réalisez-le, puis touchez le défi pour relancer le compte à rebours.\n\nLe bouton « Enregistrer des gorgées » suit ce que boit chaque joueur, et les statistiques sont consultables à tout moment.</string>
|
||||
<string name="rules_papelito_detail">Le principe\n\nChaque joueur reçoit un mot secret… sauf les undercovers, qui reçoivent un mot légèrement différent du même univers.\n\nDéroulement d\'un tour\n\n1. Révélation : passez le téléphone, chaque joueur découvre son mot en privé.\n\n2. Discussion : à tour de rôle, chacun décrit son mot en une phrase, sans le dire. Les undercovers doivent improviser sans se faire repérer !\n\n3. Vote : chaque joueur vivant vote pour éliminer le plus suspect.\n\nFin de partie\n\n• Si tous les undercovers sont éliminés, les civils gagnent.\n• Si les undercovers résistent jusqu\'à la fin, ils gagnent !\n\nLes deux mots sont révélés à la fin de la partie.\n\nPersonnalisation\n\nDans la configuration, choisissez le nombre d\'undercovers et la durée de la discussion.</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user