Implemente le mini-jeu Mots meles (grille reelle, placement 4 directions)
Build and deploy / test-python (push) Failing after 1m0s
Build and deploy / test-js (push) Failing after 50s
Build and deploy / lint-python (push) Failing after 1m2s
Build and deploy / lint-js (push) Failing after 1m7s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Build and deploy / sonarqube (push) Failing after 1m1s
Build and deploy / test-python (push) Failing after 1m0s
Build and deploy / test-js (push) Failing after 50s
Build and deploy / lint-python (push) Failing after 1m2s
Build and deploy / lint-js (push) Failing after 1m7s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Build and deploy / sonarqube (push) Failing after 1m1s
Quatrieme mini-jeu du support de formation : le createur ecrit 5 a 10 mots (recommandation souple, comme MIN_PAIRS/MIN_CARDS), places par le serveur dans une grille carree horizontalement, verticalement, ou en diagonale (deux sens seulement, jamais a l'envers) via un vrai algorithme de placement avec retry/agrandissement de grille en cas de conflit. La grille ET la position exacte de chaque mot sont calculees cote serveur puis embarquees en JSON ; le client valide chaque selection (glisser ou cliquer-cliquer) par comparaison de coordonnees exactes, jamais une simple comparaison de texte (qui se tromperait sur des lettres partagees entre deux mots qui se croisent). Comme Association/Memory, la grille reste affichee une fois tous les mots trouves : seul le bouton Recommencer (.docMinigameRestartBar, partage) apparait. Verifie via simulation DOM reelle (jsdom) : selection au glisser ET au clic-clic, mot invalide sans crash, barre de fin qui bascule, panneau Proprietes (ajout/suppression de mot avec revalidation serveur). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
1b1307bb85
commit
d8be80ebd1
@@ -139,3 +139,43 @@ carte invalide est silencieusement supprimée de la liste. La liste finale
|
||||
est tronquée à `MAX_CARDS`.
|
||||
- **Retour** : dict complet (mêmes clés que `DEFAULT_MEMORY_CONFIG`).
|
||||
- **Exceptions** : aucune.
|
||||
|
||||
## `mots_config.py` — modèle de données du mini-jeu Mots mêlés
|
||||
|
||||
Quatrième mini-jeu implémenté : l'apprenant retrouve chaque mot caché
|
||||
dans une grille de lettres (horizontalement, verticalement, ou en
|
||||
diagonale — voir `document_engine/rendering/render_document_element.py`::
|
||||
`_render_mots_player`, qui construit la grille elle-même). Même
|
||||
convention que `quiz_config.py`.
|
||||
|
||||
### `MIN_WORDS`, `MAX_WORDS: int`
|
||||
Bornes de validation (`5`/`10` mots). `MIN_WORDS` n'est pas imposé par
|
||||
`sanitize_mots_config` (même logique que `MIN_PAIRS`/`MIN_CARDS`
|
||||
côté Association/Memory) — recommandation pour le panneau Propriétés,
|
||||
pas une contrainte technique du rendu : un seul mot valide reste
|
||||
accepté, la grille se construit quand même autour de lui.
|
||||
|
||||
### `MIN_WORD_LENGTH`, `MAX_WORD_LENGTH: int`
|
||||
Bornes de longueur d'un mot individuel une fois nettoyé (`2`/`20`
|
||||
lettres) — un mot trop court n'a pas de sens à chercher, un mot trop
|
||||
long compliquerait inutilement le calcul de la taille de la grille
|
||||
(voir `_mots_grid_size_for_words` dans `render_document_element.py`).
|
||||
|
||||
### `DEFAULT_MOTS_CONFIG: dict[str, Any]`
|
||||
`{"theme_color": "#ff5f2e", "words": []}`.
|
||||
|
||||
### `sanitize_mots_config(raw_config: Any) -> dict[str, Any]`
|
||||
Valide/nettoie une config de mots mêlés arbitraire (JSON venu du
|
||||
client) — jamais ne lève, renvoie toujours un dict COMPLET fusionné sur
|
||||
`DEFAULT_MOTS_CONFIG`. Chaque mot de `raw_config["words"]` est nettoyé
|
||||
indépendamment (voir `_sanitize_word`, privée) : mis en MAJUSCULES,
|
||||
les accents sont retirés (décomposition NFKD + filtrage ASCII, pour que
|
||||
deux mots qui se croisent sur une même case de la grille puissent
|
||||
partager exactement la même lettre), seules les lettres sont
|
||||
conservées. Un mot qui ne contient plus rien d'exploitable (ou moins de
|
||||
`MIN_WORD_LENGTH` lettres) une fois nettoyé est silencieusement
|
||||
supprimé de la liste, de même qu'un doublon exact d'un mot déjà retenu
|
||||
(un mot répété deux fois n'aurait rien de plus à faire trouver). La
|
||||
liste finale est tronquée à `MAX_WORDS`.
|
||||
- **Retour** : dict complet (mêmes clés que `DEFAULT_MOTS_CONFIG`).
|
||||
- **Exceptions** : aucune.
|
||||
|
||||
Reference in New Issue
Block a user