Outils pour utilisateurs

Outils du site


nsi:tds:jeux:rubikcube

Solveur de Rubik Cube

Vous connaissez probablement le Rubik Cube et vous devez savoir qu'il existe des algorithmes – c'est à dire des méthodes – pour remettre un Rubik Cube dans l'ordre quelle que soit sa position de départ.

C'est ce que vous allez travailler.

Tout au long de cet exercice, quand je parle de Rubik Cube, il s'agit de l'ensemble. Quand je parle de cube, il s'agit d'un petit cube élémentaire.

Notations

Il est nécessaire de pouvoir noter de façon claire et univoque les positions et mouvements.

Les faces

Les faces visibles sont nommées

  • U (up) pour la face du dessus,
  • F (forward) pour la face de devant,
  • R (right) pour la face de droite

et les face cachées sont nommées

  • D (down) pour la face du dessous,
  • B (back) pour la face de derrière,
  • L (left) pour la face de gauche
  • U2 pour la tranche entre U et D
  • F2 pour la tranche entre F et D
  • L2 ou R2 pour la tranche entre L et R

Les mouvements

Les mouvement sont toujours donnés en regardant la face la face en question. Par exemple, on dira U+ pour une rotation de U dans le sens direct – trigonométrique – quand on regarde U.

On aura donc les mouvements U+, D+, F+, B+, L+, R+ et même chose dans l'autre sens : U-, D-, F-, B-, L-, R-.

Au besoin on pourra aussi tourner les tranches centrales. U2, F2, L2, R2 de la même façon.

Enfin, on pourra tourner l'ensemble du cube.

La bonne position

Sur l'illustration, F est orange. Cela ne veut pas dire que F doit être orange. On pourrait décider de prendre la face bleue comme référence et la placer devant.

Ce sont les facettes au centre des faces qui servent de référence. Si la facette au centre de F est orange, alors la bonne position pour toutes les facette orange sera F. Mais si on tourne le cube et que la facette centrale de F devient bleue, alors c'est la nouvelle référence.

Pensez-y : si un cube est résolu et qu'on le tourne en entier, changeant la couleur sur le devant, le cube est toujours résolu !

Les coordonnées et les faces

Sur l'illustration, le cube de coin orange, rouge et bleu est à la fois sur les faces U, R et F. On pourra le nommer “FRU” ou indifféremment “RUF” ou la même chose dans n'importe quel ordre. Ce même cube est le plus loin sur les trois axes x, y et z. Ces coordonnées sont (1,1,1).

D'autres exemples sur l'illustration.

L'algorithme de résolution

Vous trouverez toutes les explications nécessaires sur ce site.

Le module fourni

Le module fourni est constitué des fichiers :

  • tkrubik.py : définition du rubik cube et de l'interface graphique,
  • cube.py : définition du fonctionnement d'un cube,
  • facette.py : définition du fonctionnement d'une facette de cube
  • coords.py : module mathématique de calcul sur des vecteurs 3D

Ce qui vous intéressera se trouve dans les deux premiers et encore pas besoin de les ouvrir.

Le fichier main

Votre travail est de télécharger les modules précédents, de les placer dans un dossier et d'ajouter le fichier main.py ci-dessous :

from tkrubik import TkRubik

# mélange fixe
MELANGE = "FUFFBRUFDFBRDBDUUFLUULBRBFRRDFUUFFFFURRDUDFFRFBLBRRFLUBLBDRFB"

# création de l'objet graphique
rubik_cube = TkRubik()
rubik_cube.scramble(MELANGE)

# zone que vous devez compléter




# fin
rubik_cube.end()

Vous devez compléter la zone centrale.

fonctions utiles dans tkrubik

Le fichier main crée un objet rubik_cube dont les caractéristiques sont définies dans le fichier rkrubik.py. Ce cube est mélangé tout de suite, toujours de la même façon pour simplifier votre travail.

Listons maintenant les fonctions disponibles.

les mouvements

  • rubik_cube.U('+') déclenchera une rotation de U dans le sens direct (trigo).
  • rubik_cube.U('-') déclenchera une rotation de U dans le sens indirect (horaire).
  • et vous disposez encore de la même façon des mouvements D, F, B, L, R, L2, R2, F2, U2
  • rubik_cube.turn_left() fera tourner l'ensemble du cube vers la gauche
  • rubik_cube.turn_right() fera tourner l'ensemble du cube vers la droite
  • rubik_cube.turn_down() fera tourner l'ensemble du cube vers le bas (quand on regarde F)
  • rubik_cube.turn_up() fera tourner l'ensemble du cube vers la haut (quand on regarde F)

sélectionner un cube

  • rubik_cube.get_cube_wich_faces_should_be('FRU') permet de sélectionner le cube qui, s'il était bien placé, selon les facettes au centre des faces, devrait aller à la position FRU. Bien sûr, FRU n'est qu'un exemple.
  • rubik_cube.get_cube_wich_xyz_should_be(1,0,-1) permet de sélectionner le cube qui, s'il était bien placé, selon les facettes au centre des faces, devrait aller aux coordonnées (1,0,-1) – simple exemple là encore.
  • rubik_cube.get_cube_with_faces('FRU') permet de sélectionner le cube qui se trouve actuellement à la position FRU – exemple toujours.
  • rubik_cube.get_cube_by_coords(1,0,-1) permet de sélectionner le cube qui se trouve actuellement aux coordonnées (1,0,-1).

fonctions utiles dans cube

Une fois que vous avez sélectionner un certain cube, par exemple avec

cube = rubik_cube.get_cube_by_coords(1,0,-1)

cube est un objet défini dans cube.py et vous avez accès à différents attributs et méthodes.

attributs

  • cube.x, cube.y et cube.z permettent de lire les coordonnées actuelles du cube.
  • cube.faces permet de connaître les faces actuelles du cube.

méthodes

  • cube.position_ok() est vrai si le cube est à la bonne place mais pas forcément bien orienté.
  • cube.orientation_ok() est vrai si le cube a les faces bien positionnées. Donc il est aussi au bon endroit.
  • cube.should_be() renvoie les faces que devrait toucher ce cube pour être bien positionné,
  • cube.should_be_xyz() renvoie les coordonnées de la position que devrait occuper ce cube pour être bien positionné,
nsi/tds/jeux/rubikcube.txt · Dernière modification : de goupillwiki