Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.8.0 - Qt Creator : 4.3.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Modéliser une grille de mots croisés...

Bonjour !

Je reprends et élargis un de mes projets, anciennement mcroises et pour l'instant nom de code emc2 (extraordinaires mots croisés version 2 mais aussi e=mc²... ne riez pas trop fort)
mcroises intégrait des "dictionnaires" - en fait des listes de mots dans 4 ou 5 langues - et apportait de l'aide aux cruciverbistes, scrabbleurs et autres amateurs de jeux de lettres.
J'ai l'ambition de rajouter un onglet dans emc2 pour aider maintenant les verbicrucistes (ceux qui conçoivent des grilles)...
Principe : on choisit la largeur et la hauteur, le % de cases noires, on détermine "la potence" (le 1 horizontal et le 1 vertical), un clic, et hop ! ça se remplit tout seul.

J'ai les outils pour les calculs, l'algo de recherche est presque prêt, mais d'abord il me faut modéliser une grille.
Pas d'idée préconçue mais je me suis dit que cela intéresserait peut-être certains qu'on y réfléchisse ensemble.

Je commence. La grille elle-même, c'est des dimensions w (largeur) et h (hauteur). Un tableau de QChar me conviendrait
Donc N (w*h) cases contenant
- soit une lettre non accentuée majuscule
- soit rien (en fait pour mes outils je préfère que ce soit un '?', mais ce sera affiché comme un espace)
- soit une case noire

Pour le stockage cela devrait suffire, mais repérer les mots est un peu plus compliqué, cf. image : le G vertical 2 commence à la case G5 et sa 2è lettre est aussi la même que la 2è lettre du 6 horizontal 2. Il me faut stocker par exemple que le 5 horizontal 2 est composé des lettres D5, E5, F5, G5 et H5, que la case A6 n'appartient qu'à un mot, etc...

Un mot serait donc repéré par une QList de coordonnées, et sa valeur c'est la concaténation des QChar à ces coordonnées dans le tableau ?




png
png
Capture du 2017-02-18 16:12:31.png
9K

Réponses

  • Salut,

    Pour chaque mot dans la grille tu as besoin de connaitre le sens V ou H, la case de départ et la longueur du mot.
    Soit tu te fais une petite struct
    Soit tu utilises les premiers caractères d'un QString (ou QByteArray) pour stocker ces infos. (un peu inspiré du chaine en pascal ou l'info de la longueur est dans le premier octet), à voir si c'est pas trop le bazar à gérer.

    De toutes façons, une structure sera toujours plus propre.

Connectez-vous ou Inscrivez-vous pour répondre.