Journal Mon petit jeu pour navigateur et (pas grand chose de) plus

Posté par  . Licence CC By‑SA.
32
20
sept.
2013

Bonjournal à tous,

Le journal de xytovl< m'a donné envie de vous présenter ce mini-jeu que j'avais codé l'année dernière pour me familiariser avec la gestion des écrans tactiles en HTML/JavaScript : http://fr.orange-pagesperso.pagesperso-orange.fr/begglo/

Pour commencer à jouer directement, vous pouvez simplement valider les options par défaut (clic sur icône en bas à droite) puis appuyer sur le bouton "Play/Lecture".

Il s'agit tout simplement d'un jeu de type Boggle : il faut déplacer les lettres afin de trouver tous les mots possibles composés de 3 à 5 lettres (même principe que le Boggle Flash).

Coté technique, tout est géré coté navigateur via JQuery. Le site est compatible avec la plupart des navigateurs récents (!=IE7 par exemple) sur PC et mobile/tablette (même Iphone il semblerait). J'ai utilisé les dictionnaires (français, breton, anglais, espagnol, allemand …) disponibles dans les packages ispell et aspell. Les options sont enregistrées dans vos cookies.

Je n'avais pas trop diffusé cette URL pour plusieurs raisons :
- Le code JavaScript est grade : au départ j'avais l'intention de faire une seule page HTML avec tout le JavaScript en mode "from scratch" … idée vite abandonnée pour passer sur JQuery (du coup il reste des document.getElementById et autres joyeusetés dans le source …);
- Je voulais ajouter plus d'options (nombre de lettres, mode de saisie au clavier …);
- Je voulais revoir la façon de déplacer les lettres;
- Je n'ai pas regardé comment étaient fait les dictionnaires d'ispell/aspell, du coup il manque par exemple certaines conjugaisons;
- Je ne me suis pas posé la question de la licence (sûrement GPL3) … du coup je n'ai pas mis le code en ligne (par exemple les scripts générant les fichiers JSON à partir des dictionnaires d'aspell/ispell)

Malgré ces défauts, le jeu est assez addictif, j'ai vu des personnes (dont des enfants) y passer pas mal de temps (surtout sur téléphone). A des fins "éducatives" j'ai ajouté des liens vers des dictionnaires en lignes (wiktionary) sur les réponses (ça permet de savoir que le verbe "catir" veut dire "Faire un traitement aboutissant à raidir le drap").

Rien que le fait d'écrire ce journal me redonne l'envie de continuer le projet … n'hésitez donc pas à faire des remarques, elles seront peut-être prises en compte rapidement.

  • # Sympa

    Posté par  (site web personnel) . Évalué à 4.

    Pas mal ! On comprend assez vite le concept et on se prend effectivement au jeu de trouver le maximum de mots.

    • [^] # Re: Sympa

      Posté par  . Évalué à 6.

      Très sympa en effet, LinuxFR en veux à ma productivité aujourd'hui.

    • [^] # Re: Sympa

      Posté par  (site web personnel) . Évalué à 5.

      Je pense à un truc, comme ça.
      Au lieu d'une seule rangée de lettres, tu en aurais 2 :
      - la première contient toutes les lettres dans le désordre et ne peut pas être réorganisée
      - la deuxième est là où tu vas glisser les lettres pour former les mots, avec un bouton "clear" à droite pour vider la rangée. Tu peux soit partir de la rangée au dessus, soit réorganiser comme tu le proposes actuellement.

      Ca permettrait de garder la souplesse actuelle lorsque tu veux passer de "sons" à "son" par exemple, mais aussi, lorsque le prochain mot qu'on trouve ne ressemble pas du tout au précédent, de pouvoir très vite partir d'une rangée vierge.

      • [^] # Re: Sympa

        Posté par  . Évalué à 3.

        Oui, c'est une bonne idée. J'avais d'ailleurs déjà pensé à ce système dans le cadre d'une adaptation à la saisie par clavier : la seconde rangée serait alors remplie automatiquement lors de la frappe des touches.

  • # Publication du jeux

    Posté par  (Mastodon) . Évalué à 8.

    Bonjour,

    J'ai cru comprendre qu'il est assez simple (sinon très simple) de publier ce genre d'application sur la « boutique » en ligne pour Firefox.
    https://marketplace.firefox.com/developers/

    C'est le meilleur moyen de créer le cercle vertueux « il y a plein d'applications sympas pour ce système libre et ouvert, donc on est nombreux à utiliser ce système libre et ouvert, donc il y a plein d'applications … »

    Et en plus, Xytovl< et toi, vous risquez juste de gagner un smartphone sous FirefoxOS si vous postulez au concours « Phones for Apps for Firefox OS » (voir le § « Phase 2 now open » ici : https://hacks.mozilla.org/2013/09/calling-all-app-ports/)

    • [^] # Re: Publication du jeux

      Posté par  . Évalué à 4.

      Merci pour l'info, j'avais oublié que Mozilla avait ce programme.
      Je vais y participer, je ne trouve pas Firefox OS plus vertueux que Android pour le moment (il y a eu des discussions sur le fait que l'utilisateur soit toujours autant enfermé), mais il n'y a pas de raison de boycotter la plateforme.

      J'ai peur que le jeu soit horriblement lent sur un CPU à 1GHz, je vais devoir revoir les animations.

  • # Et les accents (bug ?)

    Posté par  . Évalué à 1. Dernière modification le 20 septembre 2013 à 15:03.

    Dans la liste de mot donné en solution il y a des mot avec et sans accent. Par exemple "lune" et "luné". Comment faire pour "valider" celui avec accent ?

    J'ai rien dit apparemment ça le fait tout seul

    • [^] # Re: Et les accents (bug ?)

      Posté par  . Évalué à 7.

      Je profite de ton message pour expliquer un peu le fonctionnement de la recherche des mots dans le dictionnaire. Comme tu peux le voir, j'ai généré un fichier dictionnaire par langue (http://fr.orange-pagesperso.pagesperso-orange.fr/begglo/dict.fr.json, http://fr.orange-pagesperso.pagesperso-orange.fr/begglo/dict.en.json …).

      Chaque fichier JSON contient un tableau associatif ayant pour clé la longueur des mots (3, 4 et 5). En valeurs il y a liste des mots possibles au format "clé mot".

      Afin d'optimiser le temps de recherche, chaque mot est transformé en clé via la moulinette suivante :
      - Remplacement des caractères accentués par la version sans accent (èéê=>e, à=>a …)
      - Tri des lettres pour générer une "clé"

      Par exemple ça va donner pour les mots "laper", "parle", "parlé", "perla" la même clé "aelpr".

      Donc pour trouver tous les mots correspondants à cette clé je n'ai qu'à parcourir les différents tableaux (mots de 3, 4 et 5 lettres) et chercher les éléments correspondant à la RegExp "a?e?l?p?r".

      C'est donc grâce à cette technique que je peux retrouver les différentes versions accentuées d'une même graphie sans accent (aeegr=>agrée, agréé, égare, égaré, garée, ragée).

  • # dico

    Posté par  (site web personnel) . Évalué à 2.

    Salut,

    Tu te bases sur quel dictionnaire ? En effet, plusieurs fois, j'ai vu des mots pas reconnu, par exemple « scan » (je peux comprendre, c'est anglais) ou « baise ». Sinon c'est assez prenant comme jeu, c'est bien, merci :)

    • [^] # Re: dico

      Posté par  . Évalué à 2.

      Comme je l'ai indiqué dans mon journal :

      J'ai utilisé les dictionnaires (français, breton, anglais, espagnol, allemand …) disponibles dans les packages ispell et aspell

      Pour être plus précis cela correspond aux fichiers stockés dans /usr/share/dict/ de ta distrib' Linux préférée. Pour ton exemple :

      $ cat /usr/share/dict/french | grep "baise"
      baisemain
      baisemains
      baiser
      baisers

      Ce qui est étrange c'est qu'il manque des mots moins "limites" que "baise" : der (la der des ders), réa …

      Si tu trouves des dictionnaires "libres" mieux fourni je suis preneur.

      • [^] # Re: dico

        Posté par  (site web personnel) . Évalué à 2.

        C'est vrai que « baise » est aujourd'hui quasi-exclusivement du langage familier (la preuve, c'est que « baisemain » est bien dans le dico).

        « der » étant une apocope, ça me choque pas tant que ça. Je ne suis pas sûr que ce soit dans le Larousse. Pour « réa », que ce soit le verbe « réer » ou bien la roue, dans les deux cas c'est un mot très rare.

        Malheureusement non, je n'ai pas de meilleur dictionnaire libre !

  • # ème

    Posté par  . Évalué à 2. Dernière modification le 25 septembre 2013 à 03:33.

    Très sympa (peut-être devrais-je dire « Glop ! Glop ! »).

    Mais c’est l’occasion de voir qu’il doit y avoir des erreurs dans les dictionnaires que tu as utilisé (pas que des conjugaisons manquantes).

    Des mots qui manquent, par exemple : dinar, ire, radin, rai, rus (pluriel de ru).
    J’admets que pour certains, on ne les utilise pas tous les jours, mais il y a pourtant dans ces dictionnaires d’autres mots que je n’avais jamais vu de ma vie et que je n’aurai certainement jamais l’occasion d’utiliser, peut-être même pas de lire dans un texte, comme ïambe.

    Plus gênant (dans le cadre d’un tel jeu ; pour la correction orthographique, c’est l’inverse), des faux mots en trop (!) : ème (probablement pour laisser passer des formes comme 3ème), and (je ne sais pas s’il y a aussi while ; pour or, if et for, c’est bon, ils existent en français), fco, men (quant à ceux-là, aucune idée)…

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

    • [^] # Re: ème

      Posté par  . Évalué à 2.

      Glop! Glop ! routard galactique,

      Cette histoire de dictionnaire est assez étrange, comme je l'ai indiqué au dessus, je me base sur le dictionnaire "french" d'ispell (/usr/share/dict/french).

      C'est vrai que je ne vois vraiment pas ce que viens faire "fco" la dedans :

      $ cat /usr/share/dict/french | grep fco
      fco

      et pourquoi "radin" n'y figure pas :

      $ cat /usr/share/dict/french | grep radin
      gradin
      gradins
      radiner
      radinerie

      Il serait peut-être temps de mettre un coup de jeune à ce dictionnaire … en effet d'après les informations du package wfrench ça n'a pas bougé depuis 2003 :

      This French wordlist is no longer maintained upstream.
      The new "upstream" version was made by Nicolas Sabouret nico@debian.org
      adding some missing words in the dico file.

      -- Nicolas Sabouret nico@debian.org Fri, 5 Sep 2003 10:24:53 +0200

      En voyant que Firefox me souligne "fco" en rouge et pas "radin", je viens de penser que je pourrais plutôt utiliser ce dictionnaire … et en effet, il est facilement trouvable : /usr/lib/firefox-9.0.1/dictionaries/fr_FR.dic et il semble plus cohérent :

      $ cat /usr/lib/firefox-9.0.1/dictionaries/fr_FR.dic | grep fco
      saufconduit/S.

      Par contre, il faut que je regarde comment analyser la partir après le "/" pour reconstruire tous les mots possibles à partir d'une racine. En effet il n'y a souvent que le féminin d'un mot, j'imagine qu'il faut reconstruire le masculin et le pluriel avec l'indication après le "/".

      $ cat /usr/lib/firefox-9.0.1/dictionaries/fr_FR.dic | grep "content"
      contente/F.()
      contentement/S.
      contenter/a0a+()
      contentieuse/W.()
      contention/S.
      contentive/F.()
      contentée/F.()

      Alors que c'est beaucoup plus simple avec wfrench :

      $ cat /usr/share/dict/french | grep "content"
      content
      contenta
      contentaient
      contentais
      contentait
      contentant
      contente
      contenté
      contentée
      contentées
      contentement
      contentent
      contenter
      contentera
      contenterai
      contenteraient
      contenterais
      contenterait
      contenteras
      contentèrent
      contenterez
      contenteriez
      contenterions
      contenterons
      contenteront
      contentes
      contentés
      contentez
      contentieuse
      contentieuses
      contentieux
      contentiez
      contentions
      contentons
      contents

      • [^] # Re: ème

        Posté par  (site web personnel) . Évalué à 1.

        Bonjour et un grand merci pour ce petit jeu.
        Depuis que je l'ai découvert j'y joue très régulièrement et le fait découvrir à tout un tas de gens autour de moi qui l'aime et y joue souvent aussi.
        C'est pourquoi je me permet de relever le défaut majeur de ce jeu (celui que tout le monde trouve en moins de 10 minutes) est le dico (mots manquants ou faux) donc j'ai trouvé ce dico http://www.dicollecte.org/download.php?prj=fr qui sera sûrement plus complet.
        Comme évolution pas mal (à mon sens) il y aurait la possibilité de choisir de nombre de lettres, 5, 6 ou 7 par exemple, ça donnerait une dimension encore meilleure pour les gens trop forts avec 5 lettres.
        Une dernière chose, est il possible de récupérer les sources de ce jeu quelque part ?

        Cordialement.

        kentoc'h mervel eget bezan saotred

        • [^] # Re: ème

          Posté par  . Évalué à 2.

          Merci pour ce retour.

          J'ai regardé de plus près cette histoire de dictionnaire. Il semblerait qu'Hunspell soit la référence actuellement (Firefox, OpenOffice) et remplace MySpell. Comme dit plus haut le problème c'est que ça se base sur histoire de lemmes/drapeaux qu'il faut analyser pour trouver la totalité des mots possibles.

          Mais, tout semble avoir été prévu dans les scripts fournis dans le package hunspell-tools : http://stackoverflow.com/questions/13725861/generate-all-word-forms-using-lucene-hunspell

          J'ai fait un test rapide, et en effet le dictionnaire "unmunché" du package hunspell-fr semble bien complet (conjugaisons …). J'essaye de faire une nouvelle version de Begglo dès ce soir.

          Pour l'option pour des mots plus long, ce n'est pas très difficile mais ça demande un peu plus de boulot.

          Je te tiens au courant (je vais sûrement ajouter une icône d'information pour suivre les évolutions du jeu).

          • [^] # Re: ème

            Posté par  (site web personnel) . Évalué à 1.

            Super, j'étais justement sur la même page pour générer des fichiers de mots.
            Mais je ne trouve pas unmunch dans mes binaires du paquet hunspell (sur debian stable), mais si tu y arrives c'est bon.

            kentoc'h mervel eget bezan saotred

            • [^] # Re: ème

              Posté par  . Évalué à 1.

              Coté Ubuntu il faut installer le package hunspell-tools … c'est sûrement la même chose coté Debian.

              • [^] # Re: ème

                Posté par  (site web personnel) . Évalué à 1.

                Absolument c'était ce paquet ! Merci beaucoup.

                Du coup j'ai fait un petit script qui génère un fichier avec le nombre de lettre désiré et qui substitue quelques caractères accentués et enlève les doublons.
                Peut être cela pourra t il t'aider ?

                #! /bin/bash
                
                nb_mots=$1
                fichier=mots_$nb_mots
                
                
                for i in `unmunch fr-moderne.dic fr-moderne.aff`; do
                    if [ "${#i}" -eq $nb_mots ]; then
                        echo $i >> $fichier
                    fi
                done
                
                sed -i".tmp" '/[0-9]/d' $fichier
                sed -i".tmp" 's/[âàä]/a/g' $fichier
                sed -i".tmp" 's/[ï]/i/g' $fichier
                sed -i".tmp" 's/[éèê]/e/g' $fichier
                cat $fichier | sort -u > "$fichier".tmp
                
                mv "$fichier".tmp "$fichier"
                
                exit 0

                il faut bien entendu donner le nombre de lettres désiré ai lancement du script.

                kentoc'h mervel eget bezan saotred

                • [^] # Re: ème

                  Posté par  . Évalué à 1.

                  Merci pour le script, mais j'avais déjà un script Perl qui faisait la transformation vers le format JSON attendu par Begglo.

                  J'ai par contre du adapter ce dernier pour filtrer certains mots :
                  - Transformation des "e dans l'o" (œ) en oe
                  - Suppression des mots contenant autre chose que des minuscules (ça enlève les prénoms, les mots composés, les sigles et pas mal d'unité de mesure)

                  J'ai aussi fait une modification du .aff afin d'enlever les règles sur les unités … comme ça je n'ai plus les kcal, dcal …

                  Bref, la nouvelle version est en ligne avec le nouveau dictionnaire (presque le double de mots) : http://fr.orange-pagesperso.pagesperso-orange.fr/begglo/ :
                  - Mise à jour dictionnaire
                  - Ajout de la page d'aide/information

                  Pour les prochaines version :
                  - Mettre à jour les autres dictionnaires avec les packages HunSpell quand c'est possible
                  - Ajouter l'option pour avoir plus de lettres
                  - Revoir la gestion du placement de lettre (et le rendre compatible avec la saisie par clavier)
                  - Revoir l'IHM … on m'a remonté que la page ne faisait pas assez "jeu" par rapport aux applications mobiles du même style.

                  Si tu vois d'autres choses à améliorer, n'hésite pas à me le faire savoir.

                  • [^] # Re: ème

                    Posté par  (site web personnel) . Évalué à 1.

                    -Transformation des "e dans l'o" (œ) en oe
                    -Suppression des mots contenant autre chose que des minuscules (ça enlève les prénoms, les mots composés, les sigles et pas mal d'unité de mesure)

                    Oui je l'ai fait aussi mais après et comme je ne savais pas si tu utiliserais ce script je n'ai pas posté les modifs.

                    J'ai aussi fait une modification du .aff afin d'enlever les règles sur les unités … comme ça je n'ai plus les kcal, dcal …

                    Bien vu je n'y avais pas pensé !

                    Bref, la nouvelle version est en ligne avec le nouveau dictionnaire

                    Super, mais peut être que les mises à jour ne sont pas encore valide car au moment ou j'écris, ria ne passe toujours pas pourtant il est dans le dico.
                    Bref merci !

                    Du coup je remet quand même le script fini au cas ou ça serve à quelqu'un

                    #! /bin/bash
                    
                    if [ $# -eq 0 ]; then
                        echo "Usage : $(basename $0) <nombre de lettres>"
                        exit 1
                    fi
                    
                    nb_mots=$1
                    fichier=mots_$nb_mots
                    
                    
                    for i in `unmunch fr-toutesvariantes.dic fr-toutesvariantes.aff |awk '{print $1}'`; do
                        if [ "${#i}" -eq $nb_mots ]; then
                            echo $i >> $fichier
                        fi
                    done
                    
                    sed -i".tmp" '/[0-9]/d' $fichier
                    sed -i".tmp" '/[A-Z]/d' $fichier
                    sed -i".tmp" '/-/d' $fichier
                    sed -i".tmp" 's/[âàä]/a/g' $fichier
                    sed -i".tmp" 's/œ/oe/g' $fichier
                    sed -i".tmp" 's/[ïî]/i/g' $fichier
                    sed -i".tmp" 's/[öô]/o/g' $fichier
                    sed -i".tmp" 's/[ûüù]/u/g' $fichier
                    sed -i".tmp" 's/[éèêë]/e/g' $fichier
                    cat $fichier | sort -u > "$fichier".tmp
                    
                    mv "$fichier".tmp "$fichier"
                    
                    exit 0

                    Vivement la suite.

                    kentoc'h mervel eget bezan saotred

                    • [^] # Re: ème

                      Posté par  . Évalué à 2.

                      Super, mais peut être que les mises à jour ne sont pas encore valide car au moment ou j'écris, ria ne passe toujours pas pourtant il est dans le dico.

                      Je pense que les mises à jour sont effectives : « dol », « abot »… je viens de découvrir ces mots que je n’avais jamais vu avant y compris sur Begglo, et ça m’étonnerait que je ne sois pas encore tombé sur un choix de lettres avec D O L dedans.

                      Par contre, j’ai quand même eu le dico sur « oud », qu’il n’a pas.

                      « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

                      • [^] # Re: ème

                        Posté par  (site web personnel) . Évalué à 1.

                        pourtant il est censé être dedans
                        http://www.dicollecte.org/entry.php?prj=fr&id=216142
                        Tu as généré la liste de mots avec quelle dico ? moi j'en avait plusieurs dans l'archive.

                        kentoc'h mervel eget bezan saotred

                        • [^] # Re: ème

                          Posté par  . Évalué à 1.

                          Alors, j'ai utilisé le dictionnaire fournis dans le package hunspell-fr d'Ubuntu. Je ne sais pas comment il a été construit mais j'ai pas mal de divergences avec le dictionnaire "toutes variantes".

                          J'ai donc ajouté 2 dictionnaires français sur Begglo :
                          * Français (fr) : package hunspell-dictionary-fr sur Ubuntu. Après filtrage (mots composés, prénom, unité de mesure …) il contient 10583 mots (559 de 3 lettres, 2324 de 4 lettres et 7700 de 5 lettres).
                          * Français TV (fr-TV) : source 'toutes variantes' de http://www.dicollecte.org/documentation.php?prj=fr : 314 mots de 3 lettres, 1102 mots de 4 lettres et 2886 mots de 5 lettres.
                          * Français MIX : Mix des dictionnaires 'fr' et 'fr-TV' : 586 mots de 3 lettres, 2437 mots de 4 lettres et 7967 mots de 5 lettres

                          Donc la version la plus complète est "Français MIX" … ce qui est étrange c'est le peu de mot dans "fr-TV" correspondant à mon extraction du dictionnaire "toutes variantes". Il faudrait regarder de plus près tout ça.

                          Sinon si ça t'intéresse voici le script Perl qui me permet de passer d'un fichier généré par unmunch au fichier de dictionnaire JSON utilisé par Begglo : http://fr.orange-pagesperso.pagesperso-orange.fr/begglo/generate_and_split_dict.pl

                          Enfin, petite astuce : si tu veux tester les combinaisons possibles pour 5 lettres données, tu peux utiliser le champ "Utiliser ces lettres pour la prochaine partie". Il suffit de renseigner les lettres que tu veux, de sauvegarder, et au prochain lancement se seront ces lettres qui seront utilisée (par exemple "emoud" pour voir si oud est bien dans le dictionnaire).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.