Rubix cube

Description

Ce programme peut être qualifié de simulateur de Rubik's Cube (3*3*3). Il permet de reproduire toutes les actions que l'on peut entreprendre avec cet objet. Il permet de recopier le Cube réel dans le programme, soit manuellement avec le clavier de l'ordinateur soit avec un scanneur à plat. Il prend en compte les déformations (mouvements de faces) du Cube réel et bien entendu il comporte plusieurs fonctions de résolutions, permettant en final de réordonner le Cube physique.

Cette nouvelle mise à jour a été réalisée avec l'atelier logiciel de Microsoft Visual cpp 2005 et MFC. Ceci permet de réaliser un exécutable compatible avec les versions les plus récentes de Windows. D'autre part il prend en compte les dernières améliorations décrites dans les articles récemment parus : l'interface avec le scanner avec VIA et la génération d'images animées GIF avec anti-aliasing.

L'une des originalités de ce programme est la représentation d'un Rubik's Cube en relief comme un assemblage de 27 petits cubes colorés évoluant dans l'espace. La génération de cette image n'utilise pas de bibliothèque graphique particulière mais seulement un algorithme simplifié de calcul de la perspective. La mise en oeuvre est décrite dans les fichiers : « Cubes, Sides, Matrix et CubeUtilities » (*.h et *.cpp). A noter que l'état de chacun des cubes élémentaires est défini dans un tableau de 27 WORDs de type t_Mask définissant à la fois l'orientation et la position relative. En effet l'octet bas, par une valeur de 1 à 24 de type t_Matrix définit l'orientation et la partie haute code par champs de 2 bits les 3 composantes réduites à -1, 0, +1 des x, y et z de la position relative. Les angles décrits par ce type de variables ont une résolution du quart de tours ce qui est suffisant pour décrire l'état du Cube. Pendant les mouvements les angles et les positions relatives sont décrites plus finement par des CMatrix comportant 3*3 float et des CVertex comportant 3 float. Lorsqu'une déformation est terminée ces valeurs détaillées sont à nouveau compactées en types réduits.

La présentation en déroulé à plat est assurée par la classe « CSidesDscr » fichiers « SidesDscr *.h et *.cpp ».

De nombreuses fonctions, tirées de versions libres du Web, assurent la résolution du Cube en fournissant la formule pour le remettre en ordre. Les programmes de résolutions utilisent les fichiers :

- Résolution par couche : « Cubex.* et CubexIO.* ».

- Résolution des centres : « Centers.* »

- Résolution rapide : « Kube.*, KFacelet.*, KPruningt.*, KSolver.*, KSolver.*, KTables.* »

- Recherche de ou des solutions les plus courtes : « KMCube.*, QSolverMp.*, QubeUtility* »


L'originalité des deux dernières fonctions est de travailler en multi-processeurs en mettant à contribution la configuration multi-processeurs du PC pour réduire les temps de résolution. A titre d'exemple, avec un PC équipé d'un AMD Phenon(tm) II XA p55, 4 processeurs 3.2Gz, la première solution du « Superflip », figure mythique des amateurs de Rubik's Cube, est obtenue en 11.30 minutes (24q). Sans le multitâche, sur le même PC, le temps serait 4 fois plus long.

Des fenêtres particulières assurent la présentation des différentes fonctions du programme. Elles sont programmées chacune dans des fichiers spécifiques Diag* h et *.cpp et dans la ressource par des « IDD_DIAG_* » :

- DiagAcq : Acquisition d'images de faces d'un Rubik's Cube à l'aide d'un scanner et de l'interface WIA.

- DiagCmd : Commandes de mouvement et lancement des différents programmes de résolution.

- DiagDisp : Fenêtre d'affichage des déroulés à plat et des tests.

- DiagHisto : Affichage de l'historique des différentes commandes de déformation du Cube.

- DiagInp : Définition de l'état d'un Rubik's Cube manuellement au clavier et à la souris.

- DiagMovie : Génération des images GIF animées.

- DiagOptions : Définition des options du programme.

- DiagOut : Fenêtre de présentation des commentaires.

- DiagStats : Pour le débug assure une mesure des performances des programmes de résolution.

- DiagView : Définition de certaines options de présentation du Rubik's Cube comme la distance, la face présentée, le standard de couleurs...

La classe CCompletion aide à l'élaboration d'une nouvelle configuration de Rubik's Cube à l'aide du clavier en complétant automatiquement l'état implicite de certaines faces (DiagInp).

La classe CExtract assure la conversion des images saisies avec le scanneur à plat avec l'aide des fichiers Extract.*,StaticEx.*, WiaWrap.* et BitmapUtil.* (DiagAcq).

La classe CGIF89a permet de créer (et de le visualiser) un fichier GIF animé présentant une séquence préférée de mouvements ! Un gadget qui permettra aux passionados de Rubik's Cube d'illustrer leurs textes sur le Web d'exemples animés (DiagMovie).

La classe CHistory mémorise tous les mouvements réalisés sur le simulateur ; elle permet de les rejouer ou de corriger un mouvement erroné (DiagHisto).

Les classes CEditEx, CEditFn et CFileDialogSa permettent l'interface des fenêtres de texte avec notamment la possibilité d'échanges avec le presse papier ou des Drag/Drop.

Enfin le programme est complété de nombreux moyens d'échange avec d'autres programmes ou le Web grâce au Presse Papier, au Drag Drop avec la souris ou l'échange de fichiers. Différents formats peuvent être utilisés :

- Format propriétaire (*.rbx) définissant l'orientation des 27 cubes élémentaires grâce une lettre ASCII.

- Format position (*.txt) définissant les couleurs des 54 facettes élémentaires (D:GYOGYRYYR U:OY...).

- Format Singmaster (*.sgm) standard des amateurs de Rubik's Cube.

- Format Manoeuvre (*.man) exprimant la formule inverse de résolution en une suite de mouvements de faces.

- Formats images (*.bmp, *.jpg, *.gif, *.png) utilisant l'image en couleur du déroulé à plat des faces du Rubik's Cube.

- Format TIFF (*.tif) contenant les six images des faces du Rubik's Cube.

- Format Couleur (*.col) sauvegardant les six couleurs utilisées pour peindre les facettes du Cube.

- Format Historique (*.his) sauvegarde l'historique des dernières commandes de mouvements exécutées.

Différents moyens de documentation expliquent l'usage de toutes ces fonctions, comme des Tooltips apparaissant lorsqu'on survole avec le curseur de la souris les commandes ou un mode d'emploi détaillé appelé par l'aide ou la touche F1. Cette documentation est réalisée avec la vielle méthode Microsoft plus implémentée sur les ateliers logiciels récents. Une note d'explication indique comment faire pour permettre à l'atelier actuel de les compiler tout de même ! Bien sûr, il est possible de convertir ces sources dans la nouvelle version mais bon courage !

Codes Sources

A voir également

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.