Sudoku : aïe encore un !

Soyez le premier à donner votre avis sur cette source.

Vue 9 566 fois - Téléchargée 1 468 fois

Description

Bonjour,

Je poste ce programme pour tenter de trouver une explication à 2 petits problèmes. J'utilise Delphi 2005 sous Windows XP Professionnel Version 2002 service pack 2 et développé avec Delphi 2005. (Pas de composant à installer pour tester)

Problème 1 :
Pour se déplacer dans la grille de jeu, il est possible d'utiliser les touches de direction du clavier de l'ordinateur. Il est aussi possible d'utiliser les touches "Espace" et "0" pour effacer une valeur les touches "-" et "+" pour les fonctions "Undo" et "Redo" et les touches numériques pour entrer les chiffres. Tout se passe bien jusqu'au moment ou j'utilise un des boutons radio des options et seulement les boutons radio. A partir de ce moment là, et avant la pose du Trackbar, les touches de direction du clavier n'ont plus d'influence sur le positionnement de la case en sélection (déplacement du fond de la case verdâtre), mais les autres touches continuent à fonctionner correctement. Les touches de direction faisaient passer le focus d?un Checkbox à l?autre. Depuis la pause du Trackbar, l?utilisation des touches de direction font passer le focus d?un Checkbox à l?autre, puis sur le Trackbar., ensuite de quoi les touches de direction sont à nouveau disponibles pour choisir la case en sélection. J?ai joué avec la propriété TabStop sans succès.

Demande : Le problème vient-il du composant TCheckbox de Delphi ou du composant Windows? Le problème existe-t-il après compilation avec une autre version de Delphi? (ma version = Delphi 2005)

Problème 2 :
Pour le chronomètre, j'utilise la police de caractères "sub0lcd.ttf" (qui se trouve dans le répertoire..\Sudoku) pour simuler un affichage 7 segments. Cela se passe bien sur mon ordinateur sous Windows XP Professionnel Version 2002 Service Pack2 ou sur autre ordinateur avec Windows 2000 Service Pack 4 mais sur un autre ordinateur sous Windows XP Professionnel Version 2002 Service Pack2, l'affichage est animé car la largeur des séparateur ":" du temps n'est pas la même qu'à l'utilisation du séparateur " " dont l'alternance se fait chaque demi-seconde.

Demande : Quelqu'un connaît-il la cause de ce problème? Toutes les polices 7 segments (ou 14 ou 16) trouvées sur le Web ont des largeurs différentes pour les 2 caractères incriminés.

Merci d?avance à tous ceux qui se pencheront sur mes petits problèmes.

Conclusion :


Pour ceux qui veulent regarder de plus près le programme:

J'ai emprunté à JACE1975 le procédé de calcul du nombre de cases à cacher à l'aide d'un "Trackbar" et à MICHELROC l'idée d'utiliser 3 tableaux pour le contrôle du jeu (grille de départ, situation en cours de jeu et solution).

Pour ce qui est des routines de résolution et de génération des grilles, ce ne sont que l'adaptation d'algorithmes trouvés sur le Web. Peut-être une particularité, la résolution indique qu'une solution unique est trouvée, dans le cas contraire le programme demande s'il faut chercher une des solutions possibles. Les grilles générées par le programme ont une solution unique.

Une description, qu'il est conseillé de lire avant d'utiliser le programme, est disponible au format .pdf. Ce fichier est aussi accessible par le menu aide du programme. Les illustrations du fichier d'aide (.pdf) sont celle de l'application qui utilise le composant VclSkin. Le bouton pour choisir l'apparence en chargeant un fichier correspondant au choix de l'apparence est rendu inactif à cause du retrait du composant VCL Skin.

Tous les textes sont chargés depuis des fichiers avec l'extension .lng avec un format des fichiers .ini. Ceci provient du fait que certains de mes programmes sont multilingues et le fichier texte est plus facilement transmit à une personne tierce pour traduction. Il y a un fichier de textes pour les fichiers propre à l'application et un pour les librairies. Ce n'est pas la manière la plus concise pour gérer mais c'est celle que j'ai choisie.

Arborescence des répertoires et contenus :

..\Sudoku - Exécutable, fichier .ini, fichiers texte .lng, fichier d'aide .pdf et police de caractères
..\Sudoku\src - Fichiers source du programme
..\Sudoku\Lib - Unités utilisables sans modification dans d'autres applications

Création en fonction du besoin de répertoires pour la sauvegarde des grilles (voir fichier .pdf)

Pour tester, il est possible de copier tous les fichiers dans le même répertoire.

Cordialement

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
57
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
15 janvier 2009

Hello John Dogget,

J'ai rassemblé, pour le post, tous les fichiers dans le même répertoire, ce qui évite d'avoir à initialiser les répertoires dans les options du projet..

J'ai testé ta proposition pour la méthode SelectFirst mais cela ne fonctionne pas mieux chez moi (soit à la fin de la procédure CtrlUserActionClick ou de la procédure CtrlUserOptionsClick). La procédure qui n'est plus appelée après un clic sur une case à cocher est FormKeyDown (qui intercepte les touches du clavier). En remarquant que les touches du curseur sont à nouveau disponibles après avoir fait passer le focus sur le TrackbarDifficulty, j'ai ajouté, à la fin de la procédure CtrlUserOptionsClick, ceci :

if FrmMain.Visible then
TrackbarDifficulty.SetFocus;

Cela force le focus sur le TrackbarDifficulty qui libère ensuite le focus pour FrmMain. Le problème semble résider dans le TCheckBox. Je sais cela me semble un peu bricolage mais je me console avec cela avant de trouver mieux.
------
Désormais, lorsque la grille est résolue, j'affiche un message, clignotant au début, dans le panneau des messages. Je mets aussi le chronomètre en pause, ce qui permet de prendre en compte le temps qui peut ainsi aussi être sauvegardé avec la solution si l'on décide de garder la trace de la grille résolue.

Encore merci.
Messages postés
57
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
15 janvier 2009

Hello John Dogget,

D'abord un GRAND merci pour t'être penché et avoir résolu mes petits soucis. En postant après minuit je ne pensais pas avoir une réponse dans la nuit ;).

La correction se fera probablement faite demain, d'autres choses à faire avant, et je poste une mise à jour en ayant aussi ajouté l'indication de fin de partie.

Pour ce qui est de la répartition des fichiers dans les divers répertoires, je pensais que la description que j'ai faite sous EXPLICATION FINALE était explicite : "Arborescence des répertoires et contenus :". J'aime bien les choses bien rangées. Les fichiers qui peuvent être utilisés par n'importe quel programme sont regroupés dans un répertoire "lib", les composants dans un répertoire "Components" avec des sous-répertoires tel que "Visual", "Form" en fonction de leur type. Le répertoire d'une application reçoit l'exécutable, les fichiers *.ini, *.lng ou autres fichiers nécessaires à l'exécutable, un répertoire "Src" pour les sources, un répertoire "Database" si présence d'une base de données, d'un répertoire "Doc" si nécessaire, un répertoire "Img" pour stocker les images utilisés pour les boutons ou autres besoins, etc. Ces divers répertoires sont identifiés dans les options de chaque projet. J'avais aussi indiqué ceci : "Pour tester, il est possible de copier tous les fichiers dans le même répertoire.". Mais c'est qu'en pleine nuit ce n'est pas toujours évident ;)

Je vais faire plus simple pour les prochaines fois.

Encore merci pour ton aide et bon repos et bon réveil.
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

Re Tigris :-)

Alors ...

- J'ai trouvé d'ou venait mon problème d'affichage dans le jeu, en fait je me suis rendu compte que tous les items qui devaient être traduit ne l'etaient pas (il n'y avait rien d'afficher). J'ai cherché du coté de la traduction et de l'ouverture du fichier lng, tout allait bien. Par contre la traduction ne marche pas si l'executable et le fichier lng ne sont pas dans le même dossier. Lors de mes essais de compilation, l'executable etait placé par defaut dans le dossier des sources, d'où evidemment le fichier lng est absent ...
Après un petit reglage dans les options du projet, ça va beaucoup mieux, et la fenetre retrouve tout ce qui devait y être au depart :D
-> problème #0 résolu

- Pour le problème des touches de direction du clavier, j'ai cherché un poil dans l'aide de Delphi et j'ai fini par trouver. Comme tu l'as dit quand tu clic sur un élément des options, le focus va à cet élement. Pour une raison que j'ignore, Delphi semble avoir associé la procedure "CtrlUserOptionsClick" (ForMain, ligne 412) au premier contrôle selectionnable de la fenetre, et non à la fenetre complete. Si ce contrôle perd la selection, la procedure ne fonctionne plus. Pour résoudre ce problème, ajoutes simplement à la fin de cette même procedure l'instruction "SelectFirst;". L'effet obtenu est qu'à la fin de cette procedure, l'application va automatiquement selectionner le premier contrôle de la fenêtre, et donc te permettre de récuperer les touches de directions comme avant.
-> Problème #2 résolu

- Pour ton dernier problème avec la police de caractère, je pense que je ne peux malheureusement pas t'aider. J'ai bien compris ton soucis, mais finalement je trouve l'affichage "avec le bug" plus esthetique que sans. En plus ça ne gene absolument pas la stabilité et le fonctionnement du logiciel, moi je le laisserais tel quel.

Maintenant quelques remarques pour finir :
- l'unité "FilesUtils" n'est pas trouvé à la compilation parce qu'absente du dossier "src", donc il faut la copier dans ce dossier pour que ça marche. C'est pas gravissime mais ça evite de chercher longtemps ou est passé cette unité
- au niveau amelioration, je te propose d'ajouter un simple petit message pour dire au joueur qu'il a gagné la partie, j'ai pas regardé la source à ce niveau, je ne sais pas si c'est facilement faisable, mais je pense que c'est une bonne idée ;-)

Voila, en esperant t'avoir aidé :-)

PS: il est possible que ce soit blindé de fautes d'orthographe, il est 3h24, je suis un poil fatigué :-D
Messages postés
57
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
15 janvier 2009

Hello Jhon Dogget,

J'ai amélioré l'aspet du programme. Voir le commentaire de la mise à jour et la capture d'écran.

Cordialement
Messages postés
57
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
15 janvier 2009

Hello Jhon Dogget,

Merci beaucoup pour ta note et ton commentaire.

Désolé pour l'apparence. Je ne peux pas mettre le composant car il est payant (mais pas cher). Le lien pour les personnes intéressées : http://www.link-rank.com/
Il y a des centaines de skins disponibles, mais j'en ai concocté quelques uns.

Je cherche toujours une explication pour les 2 petits problèmes signalés au début de la description du post.

Cordiales salutations
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.