from kandinsky import * from math import * from random import * from ion import * from time import sleep DIV = 0.314 R = tuple(range(20)) L = (20,21,7,)+ tuple(range(22,36)) + (12,36,37) I = list(range(29,36))+[12,36,37,20,21,7]+list(range(22,29)) COUL = {"J":(250,230,20),"N":(0,0,0),"R":(255,50,50),"B":(40,135,250),"F":(250,250,240)} depart = "JJ" + "N"*10 + "R" + "J"*7 + "RR" + "B"*9 + "R"*7 def permu(c, pos, aff = True): suiv = list(pos) mvt = tuple(reversed(eval(c.upper()))) if c == c.lower() else eval(c) u = (mvt[-1],) + mvt for i,v in enumerate(mvt): suiv[v] = pos[u[i]] suiv = "".join(suiv) if aff: anneaux(suiv) sleep(0.2) return suiv def carre(x,y,c,t): fill_rect(int(x - t),int(y - t),2 * t,2 * t,c) def anneaux(jeu,x0 = 210,y0 = 130,r = 70,t = 7): for i in range(20): x = x0 + r * cos(DIV/2 + DIV * i) y = y0 - r * sin(DIV/2 + DIV * i) carre(x,y,COUL[jeu[R[i]]],t) x = x0 - 1.414 * r + r * cos(DIV/2 + DIV * i) carre(x,y,COUL[jeu[L[i]]],t) def melange(pos, n): for i in range(n): pos = permu(choice("LlRr"),pos,False) return pos def inverser(pos): suiv = list(pos) for k,v in enumerate(I): suiv[k] = pos[v] suiv[v] = pos[k] suiv = "".join(suiv) anneaux(suiv) sleep(0.2) return suiv def fond(): f = COUL["F"] n = COUL["N"] fill_rect(0,0,320,222,f) draw_string("1 >",20,40,n,f) draw_string("0 >",20,200,n,f) draw_string("> -",260,40,n,f) draw_string("> EXE",260,200,n,f) def go(n = 200): fond() pos = melange(list(depart), n) anneaux(pos) anneaux(depart,171,25,15,3) while True: if keydown(KEY_ZERO): pos = permu("L",pos) if keydown(KEY_ONE): pos = permu("l",pos) if keydown(KEY_EXE): pos = permu("R",pos) if keydown(KEY_MINUS): pos = permu("r",pos) if keydown(KEY_DIVISION): pos = inverser(pos) if keydown(KEY_BACK): break go()