VBA Excel - Récursivité - Jeu du Boggle

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - Modifié par pijaku le 6/02/2014 à 15:36
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 5 août 2014 à 11:52
Bonjour Mesdames, Messieurs,

Il y a deux ans, j'ai voulu créer une fiche pratique, sur CCM, intitulée "le jeu du boggle". visible ICI. Comme vous pourrez le voir en y jetant un oeil, c'est pas mal, mais pas top...

A l'époque, je ne connaissais pas la récursivité et j'avais toutefois réussi à "bricoler" un code qui à défaut d'être parfait, fonctionnait à peu près.

Fini l'à peu près pour moi, je souhaites refonder ce code afin de le rendre réellement opérationnel.

Pour cela, je vais avoir besoin de vous...

Il faut, pour cette "appli", plusieurs codes. Je vais créer, dans ce sujet, une réponse par code. Suffira de suivre en commentant ces réponses pour améliorer les codes VBA proposés.

Les différents codes nécessaires :
- récupérer un dictionnaire extrait d'un fichier .txt dans une variable sous VBA (soit une variable tableau, soit un objet dictionary)
- tirage aléatoire des lettres,
- comparaison des lettres du tirage avec l'alphabet afin de voir qu'elles lettres sont manquantes,
- grâce aux lettres manquantes, épurer la liste des mots du dico,
- trouver peut être une seconde méthode d'épuration de cette liste...
- créer un code qui va trouver les mots du dico pouvant être formés à partir de lettres adjacentes de la grille.

Voici déjà le classeur de base, avec :
- un range nommé grille '-----> Menu Insertion/Noms/Définir
- trois boutons de commande :
=>tirage (il fonctionne) -- Code : Sub Tirage()
=>solutions (ne fonctionne pas) -- code : Sub RetirerMotsLettresManquantes()
=>efface (il fonctionne) -- Code : Sub Efface()

Le classeur : http://cjoint.com/?DBgpyvwtxf3

Pour celles et ceux qui n'aiment pas trop télécharger via des sites de pièce jointe, envoyez moi votre mail perso via MP, je vous ferais un envoi particulier.

Merci d'avance.
Cordialement,
Franck

71 réponses

carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
6 mars 2014 à 11:53
Bon les amis,

Je pense qu'il est temps pour moi de m'éclipser progressivement du projet pour ne pas vous géner dans la suite. Je vous prie de m'excuser si j'ai été lourd par moment. J'ai été tellement obsédé par la recherche de la performance que j'ai oublié l'objectif principal du projet qui était avant tout pédagogique. J'ai également oublié que j'ai raccroché le train en marche et qu'il y avait déjà un historique avant.

Avant de clore, je mets à votre disposition le dernier fichier sur lequel j'ai travaillé, la v.05 disponible à l'adresse http://cjoint.com/?DCglW4vjpAF

J'ai exploré quelques pistes dans ce fichier que vous pourrez retenir ou non après les avoir analysées, dont entre autres :
- affichage de la solution dans la grille dans l'ordre
- suppression des points dans le dico compilé (qui n'est pas indigeste pour autant mais cela n'engage que moi).

Sur ce les amis,

Bonne continuation.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 mars 2014 à 12:59
Si le pouvoir m'en était donné, carlvb, je t'interdirais purement et simplement de te retirer de ce projet !
La raison en est évidente : la solution la plus performante qui "prend forme" est bel et bien bâtie autour de la splendide idée que tu as eue d'utiliser un arbre.
Tu es donc, à ce stade, un vrai "maître des lieux", au même titre que pijaku, qui a ouvert la présente discussion, en est le "chef d'orchestre". Tous les autres (dont moi) n'ont été, tout au long de cette discussion, que des "musiciens....
Reste avec nous, s'il te plait.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
6 mars 2014 à 13:00
Mais reste, voyons, tu ne gènes absolument pas. Au contraire.

Je viens de me rendre compte que l'utilisation de Select Case dans le chargement du dictionnaire pourrait poser problème par rapport aux tests If-End If.
En effet, on suppose, avec cette ligne :
Case 49 To 57 ' 1 à 9
que l'on ne remontera jamais plus de 9 fois. Or les mots utilisés possèdent 16 lettres max...
Or, je ne vois pas comment combiner Select Case et IsNumeric.
Par contre, If IsNumeric(Lettre) tient la route...
Qu'en pensez vous?
Je suggère un retour au système de tests If-End If...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 mars 2014 à 13:07
Je n'ai pas eu le temps de tout lire et de voir à qelle bout de code tu fais allusion. Je ne suis là quie pouyr le repas.
Cet exemple répondrait-il à ton souci ? (je n'en sais rien) :
toto = "2"
titi = IsNumeric(toto)
Select Case titi
Case True
MsgBox "c'est vrai"
Case Else
MsgBox "pas du tout !"
End Select
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
6 mars 2014 à 13:11
C'est à propos de ce bout de code :
    While Not EOF(FF)
        Line Input #1, Lettre
         
        'On construit l'arbre à partir des indications dans le dictionnaire compilé
        'Dans la notation retenue, une lettre (de A à Z) ou un point "." indique de descendre d'un niveau pour créer un noeud fils
        '"(" infique qu'il faut rajouter un noeud suivant au noeud actuel
        'Un chiffre indique qu'il faut remonter d'autant de niveaux vers le noeud parent
        Select Case Asc(Lettre)
        
            Case 46, 65 To 90 'Un point ou Une lettre A à Z
                Set Noeud_Actuel = Ajouter_Fils(Noeud_Actuel, Lettre)
            
            Case 40 'Une (
                Line Input #1, Lettre
                Set Noeud_Actuel = Ajouter_Suivant(Noeud_Actuel, Lettre)
            
            Case 49 To 57 'Un chiffre de 1 à 9
                For i = 1 To CInt(Lettre)
                    Set Noeud_Actuel = Noeud_Actuel.Parent
                Next i
            
            Case Else 'Pour un éventuel traitement d'erreur
                
        End Select
            
    Wend


En fait, il faudrait quelque chose comme :
Select Case Asc(Lettre)
Case 45, 65 To 90
Case 40
Case IsNumeric
Case Else
End Select
Je crois avoir néanmoins trouvé une petite parade. Je regarde, teste et reviens vous donner des nouvelles.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
Modifié par pijaku le 6/03/2014 à 13:33
Par moment, je me prends la tête pour pas grand chose...
Il suffit d'intégrer un test dans le Case Else :
    While Not EOF(FF)
        Line Input #1, Lettre
         
        'On construit l'arbre à partir des indications dans le dictionnaire compilé
        'Dans la notation retenue, une lettre (de A à Z) ou un point "." indique de descendre d'un niveau pour créer un noeud fils
        '"(" infique qu'il faut rajouter un noeud suivant au noeud actuel
        'Un chiffre indique qu'il faut remonter d'autant de niveaux vers le noeud parent
        Select Case Asc(Lettre)
            Case 46, 64 To 91 'Un point ou Une lettre A à Z
                Set Noeud_Actuel = Ajouter_Fils(Noeud_Actuel, Lettre)
            
            Case 40 'Une (
                Line Input #1, Lettre
                Set Noeud_Actuel = Ajouter_Suivant(Noeud_Actuel, Lettre)
            
            Case Else
                If IsNumeric(Lettre) Then 'Un chiffre ou un nombre
                    For i = 1 To CInt(Lettre)
                        Set Noeud_Actuel = Noeud_Actuel.Parent
                    Next i
                Else
                    'Eventuel traitement d'erreur
                End If
                
        End Select
            
    Wend
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
Modifié par Whismeril le 6/03/2014 à 18:37
Bonsoir, tout le monde.

Ces derniers jours je vous ai un peu (carrément) abandonné.
Je suis donc perdu avec vos compilations, chargements, déchargements.

Ce que je retiendrais de tous ce que j'ai lu (en diagonalde comme dirait mon fils!):

1 Il n'est pas possible que carl quitte ce fil, ha que néni!

2 La coloration des mots trouvés, j'avais implémenté cette option en sauvegardant les dés de chaque solution, ces dés connaissant eux mêmes leurs coordonnées.

3 Je n'ai pas prévu que l'utilisateur écrive un mot, car je restais du coté de la pédagogie sur les méthode récursive et que la jouabilité du produit final ne me semblait pas importante. Peut se faire dans une version 2. Par contre pour savoir s'il est conforme aux règles, j'entrevois deux cas:
-Il saisie son mot dans une zone de texte (cellule Excel, TextBox etc..), si le mot est dans les solutions que l'on trouve c'est bon.
-Il clique, ou sélectionne les lettres dans la grille, il faut vérifier en temps réel que chaque lettre est sélectionnable et à la fin que le mot soit dans les solutions.

4 Ajout d'un mot dans le dico, idem 3.

5 Uc as tu creusé la piste qui consiste à exclure les mots non compatibles avec le jeu (par exemple il n'y a qu'un seul W, donc un mot avec 2 serait exclu)?
Je peux m'occuper de traiter le dernier dico de carl et de l'expurger des mots de 2 lettres et des mots incompatibles si vous le souhaitez.

6 Pour la compilation, je m'y pencherai en détail plus tard, mais je vais tester un xml, pour voir.

Penser aux balises de coloration syntaxique: bouton <>, préciser le langage :<code csharp>.
Quand la solution est trouvée, mettre la discussion Résolue.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 mars 2014 à 18:40
Ha Carl, je ne sais pas ce que sont une CADDAG et sa copine, et le peu que j'en ai trouvé sur le net en bon français ne m'a pas beaucoup aider.
Puisqu'on est dans la pédagogie, un petit tuto?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
6 mars 2014 à 19:09
Salut Whismeril,
Donc...rebienvenue?

Pour te répondre succinctement (je ne fais que passer) :
1- En effet. D'ailleurs il a, me semble t'il, décidé de rester jusqu'au bout;
2- La colorisation, nous y sommes. Ne reste qu'à choisir la méthode. (cf ICI)
3- doit faire l'objet d'un approfondissement car étroitement lié au 4-. Imaginons la saisie dans un textbox, tu valides ton mot (par Entrée) et la "machine" te le refuse parce que non conforme avec son dictionnaire... Oui mais ce mot existe bien. Donc tu souhaites l'intégrer au dico. Mais dans ce jeu, tu es chronométré. Donc, nous verrons cela plus tard.
4- cf 3-
5- Il faut, en gardant le dernier dico transmis par carlvb, l'épurer. Un minimum dans un premier temps avec les règles simples. Si le mot comporte plus de 3 C, plus de 13 E etc... on le supprime.

Voilà.
A demain tertouss
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 mars 2014 à 19:27
2- La colorisation, nous y sommes. Ne reste qu'à choisir la méthode. (cf ICI)
vivi d'ou mon petit 2
5 Il faut, en gardant le dernier dico transmis par carlvb, l'épurer. Un minimum dans un premier temps avec les règles simples. Si le mot comporte plus de 3 C, plus de 13 E etc... on le supprime
, je m'y attelle alors?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 mars 2014 à 19:29
Je réponds au point 5 :
J'avais lancé plusieurs moulinettes successives, en modifiant chaque fois une ligne de mon code (je n'avais pas pris la précaution, pressé que j'étais de "voir" les mots superflus à chaque cas, de "garder" tout cela).
Mais bon ... rien ne devrait m'empêcher de faire ce soir-même, après diner, une moulinette d'ensemble, qui reprendrait tout simplement le même principe que celui que j'avais adopté pour chacune de mes moulinettes temporaires.
Trois précisions, toutefois ::
1) cette moulinette "globale" reprendra pour l'instant une dizaine environ de cas de figure justifiant l'élimination. Ce sont la dizaine de cas non trop complexes. Elle devra être ensuite complétée avec patience (patience n'ayant pas grand chose à voir avec le code mais avec la détermination des cas à traiter)
2) il est clair qu'une telle moulinette aura une durée d'exécution assez longue (il faut en effet examiner, mot par mot, que ce mot n'est pas incompatible)
3) elle aboutira dans un premier temps à dresser la liste des mots incompatibles, sans encore les éliminer. Il suffira d'en modifier une ou deux lignes de code lorsque l'on voudra plus tard les éliminer réellement du dico plat. Facile)
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 mars 2014 à 19:38
Ok, de la façon dont j'ai codé mon tirage avec 16 instances de la classe Dé, je dois pouvoir tout exclure (ou lister au choix) d'un coup.
Par contre le temps d'exécution peut être très long.
Comme vous voulez.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
8 mars 2014 à 08:42
Bonjour,

j'ai avancé de mon coté. J'ai une version avec les mêmes fonctionnalités que celle déjà en ligne.
A savoir:
-Chargement du dictionnaire de Pikaju sous forme d'arbre, 2s en moyenne, j'ai abandonné la notion de père dans les noeuds et ai gagné 1s de chargement.
-Chargement du dictionnaire de CarlVb en 2,8s en moyenne.
-Recherche des tous les mots possibles et suppression des doublons, 20 30 ms en moyenne dont près de la moitié pour le traitement des doublons, ceci est fait tout à la fin quand je trie par taille de mot et ordre alphabétique (10-15 ms contre 100- 150ms selon autre méthode)
-Saisie d'une grille manuellement
-Export d'un tirage en csv.

Je vais travailler sur le dico compilé en xml, et la suppression des mots impossibles

0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
8 mars 2014 à 08:43
Pas forcément ce week end ;-)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
8 mars 2014 à 08:54
Bonjour,

La structure en arbre t'a donc fait gagner en temps d'exécution.
C'est bien.
Je ne serais pas là, non plus ce week end.
Donc, amusez vous bien.
Bon week à tous.
0
carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
8 mars 2014 à 08:55
Bonjour Whismeril,

Je vois que tu avances à grand pas. Chargement du dictionnaire en 2s et recherche d'une solution en 20 ms => Waouh! C'est hyper-rapide, bravo.

Bonne journée et à plus tard.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
8 mars 2014 à 09:50
Carl, c'est grâce à toi et ta brillante idée de l'arbre!
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
8 mars 2014 à 15:52
Bon le xml, on oublie.
J'ai testé avec les mots de 3 à 7 lettres, 43 secondes et 205Mo!
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
10 mars 2014 à 07:09
Bonjour, j'ai écrit hier soir un code pour chercher de façons récursive en testant chaque combinaison de dés, si un mot est valide.
C'est extrêmement long, et gourmand en ressources.
Je l'ai lancé vers 19:30 et à l'heure actuelle un peu plus de 14000 mots ont été testés, et la machine est à 100% d'utilisation d'uc.

Comme je n'ai pas prévu d'écrire les fichiers "mots admis" et "mots rejetés" au fur et à mesure, j'attends.

Je vous tiendrait au courant et vous enverrai les fichiers une fois fini.

Bonne journée.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 10/03/2014 à 07:28
Bonjour, Whismeril,
chercher de façons récursive en testant chaque combinaison de dés, si un mot est valide
De quel système de réfrigération est doté ton processeur ? Et combien l'as-tu payé ?
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
10 mars 2014 à 07:43
C'est une virtual box, donc elle n'a accès qu'à un petit pourcentage de l'UC en vrai ;-)
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
10 mars 2014 à 18:04
A refaire....
En rentrant, ma virtual box avait planté.

Je vais écrire les deux fichiers au fur et à mesure et faire la recherche par paquet de 1000 mots.
0
carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
10 mars 2014 à 19:05
Quel a été ton approche pour cette vérification?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
10 mars 2014 à 19:24
Bonjour Whismeril,

Tu combat une montagne là?
14 000 mots testés sur plus de 400 000, en 12 heures...
Ce test devrait te prendre, tout au plus, 14 jours et quelques heures...
Es tu sur que la fin en vaut les moyens?

Je penses que l'approche d'ucfoutu complétée par carlvb et moi devrait suffire. Surtout si, au final, ta liste n'est réduite que de "miettes"...

A suivre tout de même.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
10 mars 2014 à 08:20
Bonjour,

Voyez vous d'autres choses à faire pour cette "application"?
0
carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
10 mars 2014 à 08:32
Bonjour à tous,

Il y a un sujet d'attention : le nom de l'application.
En relisant la charte de CommentcaMarche, rubrique "Le règlement de Codes-Sources", sous-rubrique "Règles pour poster une nouvelle source ou autre contribution". Il est dit

N'utilisez pas de noms copyrightés tels que "Scrabble", "Monopoly", etc.
Ces sources seront supprimées pour éviter des problèmes juridiques.


Est-ce que notre application ne risque pas de tomber dans ce cas de figure ?

A plus tard.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 mars 2014 à 08:32
Bonjour, pijaku,
As-tu lu mon message précédent (de hier ou avant-hier) relatif à l'utilisation d'un userform ?
Quel est ton choix/goût de couleur "dominante" ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
Modifié par pijaku le 10/03/2014 à 09:19
Bonjour,

@carlvb, cette question a été abordée sur le sujet du design ICI. Je vais, de ce pas, poser la question aux CM, en particulier à noctabule28.

@ucfoutu : j'ai effectivement loupé ton message... Désolé!
Pour l'userform, je souhaitais laisser les contributeurs graphistes de CCM se charger de l'image de fond.
Les couleurs dominantes choisies sont celles du jeu, bleu orange et rouge.

Se pose donc maintenant, plusieurs questions relatives au design et à la jouabilité.
Sur le design, il convient de trouver les contrôles permettant à la fois d'être jolis, pratiques et efficients. Voici ce à quoi j'ai pensé ce week end :
1- Un menu affiché en position centrale (les autres contrôles du jeu étant masqués).
Boutons :
Je pensais utiliser des contrôles images, qui peuvent changer au survol de la souris et lancer un code au clic.
Ces boutons permettraient d'accéder aux différentes possibilités de jeu :
> Mode solo : lance un tirage permettant de jouer seul en 3 minutes,
> Mode contre l'ordi : 3 niveaux de difficultés "facile", "intermédiaire", "expert". A établir : comment l'ordinateur peut-il perdre...
> Mode mot mystère : La partie comporte alors plusieurs tirages. Dans chacun de ces tirages est caché un mot mystère permettant de trouver une phrase prédéfinie.
exemple :
Quand la solution est trouvée, mettre la discussion Résolue
S'afficherai, en début de partie :
..... la ........ ... ......., ...... la .......... .......
les mots à trouver, dans cet ordre (par exemple) :
SOLUTION
DISCUSSION
QUAND
RESOLUE
EST
TROUVEE
METTRE
Si le joueur trouve un mot mystère, son score est augmenté de 5 points (par exemple), sinon le mot est affiché quand même et on passe au tirage suivant.
ce mode nécessite de stocker, au préalable, des tirages et des phrases dans une des feuilles du classeur. Pour les charger, merci à carlvb d'avoir pensé cette option!
> Meilleurs scores : nécessite de stocker les meilleurs scores dans les différents mode de jeu.
> Crédits : affichage des pseudos de chacun des participants à ce sujet.
> Paramètres avancés : permet aux "aguerris" de pouvoir charger un dictionnaire de leur cru
> Quitter le jeu : enregistre et ferme proprement le classeur

2- Le jeu en lui-même :
> Un textbox pour la saisie des mots trouvés par le joueur.
> Une "zone" d'affichage des mots trouvés par le joueur. Initialement, je souhaitais trouver un contrôle qui à la fois pourrait afficher une image + les mots saisis. Je n'ai pas encore trouvé. La solution la plus simple étant la Listbox, mais celle-ci n'est pas paramétrable ni, par défaut, très "jolie"... Peut être la superposition de deux contrôles... Je ne sais pas.
> un bouton : "menu" réalisé avec un contrôle image (partie découpée dans l'image de fond)
> les 16 emplacements des dés. Là, franchement, aucune idée!... La seule que j'ai "rêvée" consiste à stocker quelque part dans le fichier des images de dés des 26 lettres de l'alphabet...
> 1 sablier : peut être un gif animé?
> 1 chronomètre ... éventuellement.
> l'affichage des solutions : aucune idée également. Devant mon manque évident d'inspiration, j'ai imaginé l'utilisation un second Userform.

Bien sur, tout ceci combiné sur un UserForm sans barre de fenêtre et application Excel masquée...

EDIT : dans le menu ajouter un bouton "règles du jeu" listant les règles principales et les règles des 3 modes de jeu

EDIT2 : le fait de laisser, à des graphistes, la main pour l'image de fond, nous ajoute des contraintes techniques. J'en suis bien conscient, mais je voulais avant tout un travail collaboratif... A suivre néanmoins.
0
carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
Modifié par carlvb le 10/03/2014 à 10:29
En faisant un tour sur un site qui permet de jouer massivement en ligne à notre jeu, il y a une fonctionnalité qui pourrait être intéressante : l'application affiche en temps réel le mot entré par le joueur sur la grille, ça peut l'aider pour chercher les mots à rallonge. Quand le mot entré ne peut pas être formé sur la grille (le joueur commet une erreur) la couleur du textbox vire au rouge. A ce stade il n'y aurait pas encore une vérification de la validité du mot mais uniquement de sa jouabilité par rapport à la grille.

EDIT : A la fin également, on pourrait marquer (colorer?) les mots trouvés par le joueur parmi les solutions.

A plus tard.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 10/03/2014 à 17:44
J'ai de vraies difficultés à "voir" comment faire jouer plusieurs joueurs en ligne avec une appli Excel...
Comment en "voyez-vous" le fonctionnement, exactement ?

A pijaku :
"les 16 emplacements des dés. Là, franchement, aucune idée!... La seule que j'ai "rêvée" consiste à stocker quelque part dans le fichier des images de dés des 26 lettres de l'alphabe"
Je ne comprends pas. Si on voir la face supérieure d'un dé, on nne voit qu'un carré. Si on voit le dé en perspective, la "lisibilité" va être plutôt "féroce" ...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 11/03/2014 à 08:23
A pijakui :
Aujourd'hui : pêche ===>>> pas vraiment disponible, donc....
Mais j'ai pris de bon matin le temps de te concocter une petite démo qui devrait te mettre en joie.
Elle résout (avec de vraies textboxes) tes problèmes de placement...
Tu verras ...
Je te fais parvenir par mail cette demo.

Fait à l'instant. Amuse-toi à modifier l'emplacement et/ou la taille du Frame === relance ===>>> pas belle, la vie ?
J'espère que le poisson sera également de bonne humeur aujourd'hui.

EDIT : et cela va dans la foulée te permettre de comprendre ce que je voulais dire plus haut quant à la préservation du travail déjà accompli à partir de la feuille de calcul. Tu vas vite deviner qu'il suffit d'appeler les procédures du module de traitement ===>> elles vont modifier la feuille ===>> et donc modifier l'userform, etc ... Il suffira d'ajouter à l'userform des boutons pour ce faire... (mais je te laisse deviner).

EDIT 2 : Ah oui ... le petit trait qui apparaît à droite des cases n'est pas une faute de conception, mais simplement que j'ai bâclé l'image elle-même (que j'avais copiée et traitée, en oubliant d'enlever ce trait). Il n'apparaîtra plus avec une imager "propre".


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
11 mars 2014 à 08:25
Bonjour ucfoutu,

Aujourd'hui pêche donc ==> Bonne pêche à toi!
Bon moment de détente surtout.

Je vais de ce pas voir ta démo.

A plus tard
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
11 mars 2014 à 09:52
Alors effectivement, plein de choses...
L'interaction entre la feuille et l'Userform est impeccable pour le projet en cours. Il est vrai que je n'utilise jamais le .ControlSource d'un textbox...

J'ai du néanmoins modifier certaines choses.
Déclarer ces variables en plus :
Private Sub UserForm_Activate()
  Dim larg As String, X As Byte, Y As Byte, qi As Object

Dans les références :
Manquante : Microsoft Windows Common Controls 5.0
j'ai du décocher cette référence manquante car il débuguait le :
Private Sub TextBoxEvents_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  KeyAscii = Asc(UCase(Chr(KeyAscii)))

Chr dans Asc(UCase(Chr(KeyAscii))) étant surligné...

Mis à part ces tout petits inconvénients, cela fonctionne très bien et il y a de bonnes astuces dans ce code...
Par contre, tu parlais d'un peu d'arithmétique... Ce calcul n'est pas si évident que cela :
2 + (Y - 1) * (mg + ((Frame1.Width - 4 - (3 * mg))) / 4)

Mes questions du jour :
- A quoi correspond le 1.332 dans : Me.Width = GetSystemMetrics(0) / 1.332
- Pourquoi ce choix de TextBox? Un Label n'aurait il pas été satisfaisant? Y a t'il une importance à cela?
- Move sert à positionner ET afficher les contrôles?
- Pourquoi des DoEvents dans le UserForm_Activate()?
- Et enfin : Pourquoi utiliser l'événement Activate() plutôt qu'Initialise()?

Une petite amélioration (mais celle-ci tu l'aurais trouvé seul...) :
With q
       .MaxLength = 1

Pour empêcher de saisir plus d'un caractère dans les textbox.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 11/03/2014 à 13:12
Oui ...
De bon matin:l
- je n'ai pas mis option explicit et ai donc oublié de typer tout (lol)
- j'ai "rédigé" sur un classeur qui avait une référence inutile cochée et qui correspondait, chez moi (où elle étaot présente et "cochable", à d'autres besoins.

- je ne comrends par contre pas pourquoi, chez toi, était surlignée la ligne disant :
Chr dans Asc(UCase(Chr(KeyAscii))) étant surligné.
===>>as normal (sauf si tu as donné le nom chr à une variable et que VBA y perd donc son latin!)
Cette ligne a pour vocation de passer en majuscule se que l'utilisateur aurait pu frapper en minuscule.

- tu as raison de parler de la valeur 1332 ===>> Pressé que j'étais d'aller à la pêche, je me suis contenté de partir du principe selon lequel toutes les machines d'aujourd'hui étaient en 15 twips par pixel, tant horizontalement de verticalement. Je vais (après "siestita" nécessaire ) faire en sorte de remplacer 1.332 par du précis adapté à la machine d'utilisation (facile)
- pourquoi des textboxes plutôt que des labels ? ===>> pour répondre plus facilement au besoin qui va surgir lorsque l'utilisateur décidera d'une grille non aléatoire (et donc de la modifier). A moins, bien sûr, que cette idée (qui remonte à plusieurs discussions) ne soit finalement abandonnée.....
- le "doevents" était pour mes essais et a échappé au_ nettoyage (il n'est pas utile)
- Oui : Move sert à positionner (et donc à afficher également)
- Activate et/ou initialize : sans importance puisque l'un comme l'autre se déclenchent, dès lors que l'on décharge puis recharge et que l'on ne se contente pas de la méthode Hide).
Voilà ...Voilà ...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
11 mars 2014 à 13:16
Merci pour les explications.
(sauf si tu as donné le nom chr à une variable
Non ce n'est pas le cas...
Pas grave puisque ça fonctionne une fois la référence manquante décochée...

A moins, bien sûr, que cette idée (qui remonte à plusieurs discussions) ne soit finalement abandonnée
C'est ce que j'ai cru comprendre lorsque l'on a définitivement acté de réduire le dictionnaire aux seuls mots possibles avec les dés.......

Sinon impecc...
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
11 mars 2014 à 17:25
A moins, bien sûr, que cette idée (qui remonte à plusieurs discussions) ne soit finalement abandonnée
C'est ce que j'ai cru comprendre lorsque l'on a définitivement acté de réduire le dictionnaire aux seuls mots possibles avec les dés.......

On peut toujours laisser saisir une grille possible avec les dés il suffit de la tester comme un mot, en mettant toutes les lettres à la suite.
0
carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
11 mars 2014 à 20:40
En attendant de pouvoir tester la prochaine mouture de Boogle, j'ai fini par télécharger VS Express 2013 ce week-end.
Après quelques hello world et didacticiels et également des conseils de Whismeril, j'ai commencé mon parcours .net par le jeu "le mot le plus long" qui est une simplification du boggle, disponible ici http://codes-sources.commentcamarche.net/source/100448-le-mot-le-plus-long. C'est plus un portage de code vba qu'une vrai application .net mais bon le chemin est long pour moi qui ai complètement raté le virage .net

Bonne soirée à tous,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
Modifié par pijaku le 13/03/2014 à 14:18
Salut carlvb,

Pour te répondre sur le copyright, voici la réponse de noctambule :
Oui, c'est copyrighté donc tu n'as pas le droit de t'en servir "comme ça": l'option Boogle, est excellente : d'une part tu restes dans les sonorités et il y a petit jeu de mots sur google et la version numérique du boggle.
l'option boogle a été proposée ICI, mais rien n'est figé pour l'instant.
0
carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
13 mars 2014 à 19:54
salut pijaku,

Effectivement le nom Boogle sonne bien. Et la dernière proposition de Nehel en terme de graphisme est trop super!

A plus
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 mars 2014 à 20:43
Il n'est pas impossible, mais presque surhumain d'utiliser VBA/Excel pour arriver à une telle représentation graphique des dés.
Si vous y tenez tant, je vais mouiller ma chemise, mais je me demande si l'on n'est pas en train de privilégier l'aspect en oubliant l'essentiel.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
16 mars 2014 à 14:39
Bonjour,

un petit point de mon coté, mais d'abord le détail de ma config (ça a forcément un impact sur les perds)
Mac (mi-2010) OS 10.9
Core i3 3,06 Mhz
4 Go de Ram

Virtual Box accédant à un processeur sur les 4 et 512 Mo de RAM

XP SP3, Visual Studio Express 2010

Ma version maintenant:

Chargement du dictionnaire de 408 000 mots (en clair, un mot par ligne) non épuré en moins de 3s

Tirage, recherche des toutes les solutions possibles et suppression des doublons, 20 à 30 ms en moyenne dont près de la moitié pour le traitement des doublons , ceci est fait tout à la fin quand je trie par taille de mot et ordre alphabétique (j'ai une piste d'amélioration à tester)

Saisie d'une grille manuellement

Export d'un tirage en csv

Pas encore jouable

Epuration de quelques 3600 mots en 21 à 22 minutes.

Je vais garder le dictionnaire en clair, 3 secondes d'initialisation ne me paraissent pas rédhibitoire pour le joueur.
Je vais aussi garder le dictionnaire non épuré (3600 mots en moins gain de quelques dizaines de ms de chargement, pour 22 minutes de traitement).
Je vais garder la fonction d'épuration, quand le joueur saisira une grille personnelle ou un mot absent du dictionnaire, un message l'informera si la combinaison de lettres n'est pas compatible avec les dés officiels.
L'import d'un nouveau dictionnaire ajoutera les mots inconnus au fichier déjà constitué (compatibles ou non).

Le design fera l'objet d'une V3 avec mon initiation à WPF.
0
carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
16 mars 2014 à 15:24
Salut Whismeril,

Excellentes performances, surtout que tu n'utilises donc qu'un quart de la puissance de ta machine. J'imagine ce que ça ferait sur les quatre coeurs!!!

En ce qui concerne la vérification d'un tirage manuel ou la compatibilité d'un mot avec les dés. Il y a un point d'attention : La vérification est en général très très rapide sauf si on tombe sur les cas défavorables.

Ci-après le résultats des tests que j'ai effectués à l'époque :
408 328 mots => 940 s (16 mn) soit 0,0023 s par mot en moyenne ce qui est très rapide.

L'analyse des 3637 mots impossibles (0,9% du dico) prend 884 s (15 mn) soit 94% du temps total d'analyse!!! Là encore avec 0,24 s en moyenne par mot, on peut dire que c'est acceptable.

Le reste, les 404691 mots possibles ne nécessitent que 56 s soit 0,0001 s en moyenne par seconde.

Mais en poussant l'analyse, sur les 884 s, 882 s sont consacrés à l'analyse des 20 mots impossibles les plus défavorables!!!
Le podium revient à INTERPENETRERENT (111 s ), REINTERPRETERENT (130 s) et DESINTERESSERENT (152 s).

Conclusion : dans le cas général, le test peut se faire rapidement mais il pourrait bloquer ton appli plus de 2 mn dans les cas les plus défavorables.

-------
Pour ma part, j'ai avancé dans mes recherches sur le dawg.
Je vous rassure tout de suite, je n'ai pas l'intention de changer notre base dont les performances sont déjà très bonnes. Disons que c'est juste pour le fun et pour les projets futurs.

J'ai donc bricolé notre fichier de base pour qu'il tourne avec un dawg au lieu d'un arbre et voici les résultats (sur les 408 000 mots dont le fichier txt fait 4829 Ko en clair).

Compilation du dico
- arbre : 13 s
- dawg : 274 s

Taille du fichier dico compilé
- arbre : 4285 Ko
- dawg : 833 Ko

Temps de chargement du dico compilé
- dico compilé : 5,1 s
- dawg : 0,3 s

Occupation mémoire par Excel après chargement du dico
- arbre : environ 230 Mo
- dawg : environ 25 Mo

Temps nécessaire à la vérification de 65 000 mots pour voir s'ils sont dans le dico
- arbre : 21s
- dawg : 20s

Temps moyen pour la recherche de solution
- arbre : 0,037 s
- dawg : 0,057 s
Il convient là de noter que l'algorithme de recherche de solution a été optimisé pour l'arbre avec l'utilisation du propriété parent. J'ai dû le bricole pour l'adapter au dawg et gérer une pile de parent à chaque appel récursif.

Conclusion : c'est pour le stockage et le chargement du dico que le dawg présente un réel avantage. A l'utilisation, les deux solutions sont équivalentes.

A plus tard.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
Modifié par Whismeril le 16/03/2014 à 16:13
En parallèle Carl m'a envoyé une version VB6 dans VB.Net de son projet d'épuration.
J'ai installé VB Express 2010 sur une deuxième virtualbox (je ne sais pas pourquoi mais VB et C# cohabitent mal, peut être parce que j'ai une version française et une anglaise?).
J'ai commencé à ".Netiser" une méthode, je m'attaquerai dés que j'ai un peu de temps à la suite.

C'est plutôt sympa je redécouvre VB et Carl .Net!
0
carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
Modifié par carlvb le 17/03/2014 à 04:46
Bonjour à tous,

@ Whismeril,

Toujours à propos de la vérification des mots ou des tirages impossibles.

Au vu des résultats présentés dans mon précédent message (les mots possibles ne nécessitent que 0,0001 s et un mot du dico en moyenne 0,0023s. On peut peut-être conjecturer que dès que la recherche dépasse un certain temps (1 seconde par exemple), on est dans le domaine de l'impossible.
Cette conjecture pourrait tenir jusqu'à ce qu'on découvre un éventuel contre-exemple.

Qu'en penses-tu?

Bonne journée.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
17 mars 2014 à 07:20
Bonjour, ça se tient peut être.

Mais on exclu seulement 3600 mots, ça ne change rien au moment du chargement.
De plus si le joueur saisie une grille incompatible (j'ai choisi d'alerter sans interdire) ces mots seraient exclus des résultats.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
28 mars 2014 à 16:03
Bonjour,

Cela fait maintenant trop longtemps que je vous ai laissé sans nouvelles... Pardon.
Voici ou nous en sommes.
Avec UcFoutu, nous échangeons pour que le design de ce jeu ne ressemble pas à un simple formulaire Excel/VBA
Pour cela, nous tentons le mieux possible de tenir compte des différentes résolutions d'écran, afin que le résultat ne soit pas trop "dégueu" chez les uns et les autres utilisateurs et, essayons de s'approcher d'un résultat proche d'une image réalisée sous Gimp ou Photoshop.
Ceci est, je pense, quasi-résolu grâce à un code qu'UcFoutu m'a transmis la semaine dernière. Il reste à passer le stade de la validation par ucfoutu.
Puisqu'il est parti en vacances, j'en ai profité pour avancer dans son dos... Je dispose donc maintenant d'une version presque jouable. Me manque encore pas mal de petites choses, les détails sont à régler. Il faudra encore du temps avant de pouvoir vous présenter la "chose" pour des tests poussés.
Je vais m'y atteler dès le début de semaine prochaine, avec le (grand) secours l'ami ucfoutu.
Sur ce, je vous souhaite un bon week end les amis.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
28 mars 2014 à 17:17
Salut, moi aussi ma version "arbre" est quasi jouable.
Pour le design, je repasserai quand je me lancerai en WPF (c'est fait pour...).
Du coté de VB.Net, pas trop avancé, ni tout seul, ni avec Carl
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
29 mars 2014 à 07:54
Salut,

La version VB.Net était terminée non?
Après si ce n'est que de la jouabilité, ce n'est pas si important... Enfin, il me semble.
Bon week end.
0
carlvb Messages postés 199 Date d'inscription mercredi 23 avril 2003 Statut Contributeur Dernière intervention 25 mai 2017 11
29 mars 2014 à 10:21
Salut à tous,

Non, on n'a pas encore commencé la version VB.Net. C'était uniquement la recherche du mot le plus long à partir d'un tirage donné qu'on a fait. Je pense qu'il faut attendre d'avoir la version finale VBA pour faire le portage sur VB.net.

Bon week-end à tous.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
31 mars 2014 à 22:42
Ça y est ma version Arbre est en ligne.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
1 avril 2014 à 07:59
Bonjour,

Félicitations Whismeril. Chapeau bas!
<apparté>
Ah ce que j'aimerais programmer comme vous... Je suis hyper lent... Il faut que systématiquement je teste, quasiment à chaque ligne de code... Pfff! Boarf ça viendra.
</apparté>
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
10 juin 2014 à 11:31
Bonjour,

Je reviens dans la course après une interruption volontaire de quelques semaines.

Je vous ai donc transmis quelques fichiers pour des tests, qu'en pensez vous?
Merci de me dire ce qu'il convient de faire à ce stade, on relance cette discussion, on en ouvre une autre pour des tests, etc...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
5 août 2014 à 11:52
Bonjour,

Les tutoriels sont en ligne.
Vous en trouverez sur CS.
Le "main" est ICI sur CCM.
0
Rejoignez-nous