diff --git a/docs/sessions/02-moteur-pedagogique.md b/docs/sessions/02-moteur-pedagogique.md new file mode 100644 index 0000000..41d322c --- /dev/null +++ b/docs/sessions/02-moteur-pedagogique.md @@ -0,0 +1,98 @@ +# Session 2 — Moteur pédagogique, en Svelte pur + +**Date :** 2026-07-27 · **Livrable :** trois modes de jeu, l'album, la progression locale. + +## La porte de sortie, honnêtement + +| Critère | Cible | Mesuré | +|---|---|---| +| **Le jeu est amusant sans Phaser** | jugement humain | **à trancher par le porteur** — voir plus bas | +| Navigation clavier | complète | contrôles ` + + +

+

{messageImport}

+ + + + diff --git a/src/routes/[[locale=locale]]/je/rekonet/+page.svelte b/src/routes/[[locale=locale]]/je/rekonet/+page.svelte new file mode 100644 index 0000000..fced4a4 --- /dev/null +++ b/src/routes/[[locale=locale]]/je/rekonet/+page.svelte @@ -0,0 +1,276 @@ + + + + +
+

{t(locale, 'jeu.quitter')}

+ + {#if questions.length === 0} + +
+ +

{t(locale, 'jeu.indisponible.titre')}

+

{t(locale, 'jeu.indisponible.texte')}

+

+ {jouables.length} espèce{jouables.length > 1 ? 's' : ''} sur {FRUITS.length} + dispose d’une photographie validée. Il en faut au moins quatre pour poser une question + honnête. +

+

+ Ce mode fonctionne uniquement sur des photographies réelles, validées par un humain. Il ne + se rabattra jamais sur une image générée : ce serait apprendre à reconnaître ce qu’un + modèle invente. +

+

+ {t(locale, 'manques.aider')} + {t(locale, 'jeu.kache')} +

+
+ {:else if fini} +
+

{t(locale, 'jeu.termine')}

+

+ + {score} +

+

{t(locale, 'jeu.resultat', { bons: bonnes, total: questions.length })}

+

+ + {t(locale, 'jeu.album')} +

+
+ {:else if q} +
+

{t(locale, 'jeu.rekonet')}

+

{index + 1} / {questions.length} — {t(locale, 'jeu.score')} : {score}

+
+ +
+ {t(locale, +
+ {q.photo.auteur} — {q.photo.licence} +
+
+ +
+

{t(locale, 'jeu.question')}

+
    + {#each q.choix as choix (choix.id)} +
  • + +
  • + {/each} +
+
+ +
+ {#if reponse} +

+ {correct ? t(locale, 'jeu.bonne-reponse') : t(locale, 'jeu.mauvaise-reponse')} +

+

{t(locale, 'jeu.reponse-etait', { nom: q.cible.noms.gcf })}

+

+ + {t(locale, 'zerbaj.voir')} +

+ {/if} +
+ {/if} +
+ + diff --git a/src/routes/[[locale=locale]]/je/sezon/+page.svelte b/src/routes/[[locale=locale]]/je/sezon/+page.svelte new file mode 100644 index 0000000..3f6887a --- /dev/null +++ b/src/routes/[[locale=locale]]/je/sezon/+page.svelte @@ -0,0 +1,284 @@ + + + + +
+

{t(locale, 'jeu.quitter')}

+ + +

+ {t(locale, 'fiche.saison-non-sourcee')} + {t(locale, 'manques.aider')} +

+ + {#if !questions.length} +

{t(locale, 'jeu.indisponible.texte')}

+ {:else if fini} +
+

{t(locale, 'jeu.termine')}

+

+ + {score} +

+

{t(locale, 'jeu.resultat', { bons: bonnes, total: questions.length })}

+

+ + {t(locale, 'jeu.quitter')} +

+
+ {:else if q} +
+

{t(locale, 'jeu.sezon')}

+

{index + 1} / {questions.length} — {t(locale, 'jeu.score')} : {score}

+
+ +
+

+ Quel fruit trouve-t-on en {MOIS[q.mois - 1]} ? +

+ + + +
    + {#each q.choix as choix (choix.id)} +
  • + +
  • + {/each} +
+
+ +
+ {#if reponse} +

+ {correct ? t(locale, 'jeu.bonne-reponse') : t(locale, 'jeu.mauvaise-reponse')} +

+

{t(locale, 'jeu.reponse-etait', { nom: q.cible.noms.gcf })}

+

+ {q.cible.noms.gcf} : {q.cible.saison_mois?.map((m) => MOIS[m - 1]).join(', ')} +

+

+ + {t(locale, 'zerbaj.voir')} +

+ {/if} +
+ {/if} +
+ +