Commit 97ef8ea2 authored by Guillaume CLOCHARD's avatar Guillaume CLOCHARD
Browse files

Merge branch 'tuto' into 'master'

Ajout du tuto 

Ajout d'une option '--tuto' qui permet de voir la résolution coup par coup du rubik's cube (dans un terminal)
On peut aussi utiliser l'option '--speed' pour gérer la vitesse du tuto

See merge request !14
parents 9f8ea925 7205fed4
from utils import Array, codeToColor, codeToGroup, colorize
from numpy import copy as np_copy
from copy import deepcopy
PETITS_CUBES = ['FU','FRU','FR','FRD','FD','LFD','FL','LFU','LU','LD',
'BU','RBU','BR','RBD','BD','BLD','BL','BLU','RU','RD']
......@@ -885,7 +886,7 @@ class Cube():
#on exécute la méthode qui va bien
methodToCall = getattr(self, 'rot_' + c)
methodToCall()
else:
return None
......@@ -895,7 +896,7 @@ class Cube():
"""
face_resolu
Fonction qui dit si une face du cube (passé en paramètre) est résolu ou non
Fonction qui dit si une face du cube (passé en paramètre) est résolu ou non
:Args:
face {Sting} une face du cube
......@@ -920,7 +921,7 @@ class Cube():
self.get_facette('BLU',2),
)
return faceJaune == (5,5,5,5,5,5,5,5) # Test si toute les facettes sont jaune
return faceJaune == (5,5,5,5,5,5,5,5) # Test si toute les facettes sont jaune
elif face == 'D': # Si la face Down du cube
# On récupère toutes ma facettes de la face
faceBlanche = (
......@@ -987,9 +988,20 @@ class Cube():
)
return faceOrange == (4,4,4,4,4,4,4,4) # Test si toute les facettes sont orange
else:
return "Erreur dans les paramètres de la fonction"
return "Erreur dans les paramètres de la fonction"
def copy(self):
"""
copy
:Returns:
{Cube} Un nouveau cube avec le même état que self
(mais deepcopy sur self.cube pour ne pas répercuter les
changements de l'un sur l'autre)
"""
c = Cube()
c.cubes = deepcopy(self.cubes)
return c;
if __name__ == '__main__':
......
......@@ -2,6 +2,7 @@ from Cube import Cube
from utils import Array, colorize, translate_mvt, readArgs
from algo import algo_cfop
from lire_entree import lecture_cube
from tuto import tuto
DEFAULT_CUBE = 'OGRBWYBGBGYYOYOWOWGRYOOOBGBRRYRBWWWRBWYGROWGRYBRGYWBOG'
......@@ -26,11 +27,11 @@ def solve(cube_c54):
solve('OGRBWYBGBGYYOYOWOWGRYOOOBGBRRYRBWWWRBWYGROWGRYBRGYWBOG')
"""
err, c = lecture_cube(cube_c54)
err, cube_lu = lecture_cube(cube_c54)
if err:
return err, None
return err, None, None
else:
return None, algo_cfop(c)
return None, algo_cfop(cube_lu.copy()), cube_lu
if __name__=="__main__":
"""
......@@ -44,11 +45,17 @@ if __name__=="__main__":
params = readArgs()
cube = str(params['cube']) if 'cube' in params else DEFAULT_CUBE
err, resolution = solve(cube)
err, resolution, cube_lu = solve(cube)
if err:
print("Erreur dans la lecture du cube : " + err)
else:
#L'utilisateur a demandé la résolution pas à pas
if 'tuto' in params:
print('Résolution de :', "".join([colorize(x) for x in cube]))
tuto(cube_lu, resolution)
print('Résolution de :', "".join([colorize(x) for x in cube]))
resolution = solve(cube)[1]
resolution = " ".join([translate_mvt(x) for x in resolution])
print("Exécuter la manoeuvre {}".format(resolution))
from time import sleep
from utils import clear, readArgs
from algo import algo_cfop
SPEED = 2 #écrans / sec
def tuto(cube, mouvements):
"""
tuto
:Args:
cube {Cube} Un cube à la sortie de lecture_cube
mouvements {List} Suite de mouvements à appliquer sur le cube
pour le résoudre, calculée par algo_cfop()
"""
params = readArgs()
speed = float(params['speed']) if 'speed' in params else SPEED
clear()
print(cube)
for m in mouvements:
clear()
method = getattr(cube, 'rot_' + m)
method()
print(cube)
print(m)
sleep(1 / speed)
if __name__ == '__main__':
from lire_entree import lecture_cube
cube = 'OGRBWYBGBGYYOYOWOWGRYOOOBGBRRYRBWWWRBWYGROWGRYBRGYWBOG'
error, c = lecture_cube(cube)
if error:
raise Error(error)
c0 = c.copy()
mouvements = algo_cfop(c)
tuto(c0, mouvements)
import numpy as np
import sys
from os import name as os_name
import subprocess
import getopt
COULEURS = ['W', 'B', 'R', 'G', 'O', 'Y']
......@@ -318,8 +319,10 @@ def readArgs():
optlist, args = getopt.getopt(
sys.argv[1:],
'c:',
['cube=']
'c:s:t',
['cube=',
'speed=',
'tuto']
)
arguments = {k: v for k, v in optlist} #on tranforme la list en dict
......@@ -330,8 +333,34 @@ def readArgs():
if '--cube' in arguments:
result['cube'] = arguments['--cube'] #--cube override -c
if '-s' in arguments:
result['speed'] = arguments['-s']
if '--speed' in arguments:
result['speed'] = arguments['--speed'] #--speed override -s
if '-t' in arguments:
result['tuto'] = arguments['-t']
if '--tuto' in arguments:
result['tuto'] = arguments['--tuto'] #--tuto override -t
return result
def clear():
"""
clear
Clear terminal screen
Voir : http://stackoverflow.com/a/1433135/2058840
"""
if os_name == 'nt':
subprocess.call("cls", shell=True) # windows, attention ne marche pas sur gitbash
else:
subprocess.call("clear") # linux/mac
if __name__ == '__main__':
print("Test unixTermColors")
c = unixTermColors()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment