Je dois avouer que je suis très mauvais à ce jeu. Comme scharf va bientôt publier une version pour la Numworks ou une Ti actuelle, je me suis empressé de m'en faire une version d'entrainement sur mon SHARP PC-1360 afin de pouvoir facilement afficher la grille de jeu 4x4.
Code : Tout sélectionner
1:DATA 9, 9,13,14,10
2:DATA 10,10,14,15,11
3:DATA 11,11,15,16,12
4:DATA 5, 5, 9,10, 6
5:DATA 10,10,11, 7, 6
6:DATA 7, 7,12,12, 8
7:DATA 5, 5, 6, 2, 1
8:DATA 6, 6, 7, 3, 2
9:DATA 7, 7, 8, 4, 3
10:A0$="ABCDEFGHIJKLMNOP",A1$=A0$: R=200: CLS : CURSOR 24: PRINT "---=== RUBIKA ===---"
12:"S" C=1: CURSOR 78: INPUT "Hardness ";K: IF K<1 OR K>12 GOTO 12
14:WAIT 0: CURSOR 74: PRINT "...Shuffling...": FOR I=1 TO K: RESTORE RND 9: GOSUB 60: NEXT I:A2$=A1$
16:"A" A1$=A2$: BEEP 1
20:"=" WAIT 0: CLS : IF A1$<>A2$ GOTO 30
22:IF R>C CURSOR 6: BEEP 2:R=C: PRINT "New record !"
23:CURSOR 30: PRINT "Record:";R
24:GOSUB 52:KK$="": CURSOR 78: INPUT "(N)ew (S)ame ";KK$: IF LEFT$ (KK$,1)="S" GOTO 16
26:IF LEN KK$ GOTO 12
28:END
30:" " GOSUB 52: CURSOR 77: A3$=A1$: PRINT C;: CURSOR 81: INPUT "moves ";KK$: GOTO 32
31:CURSOR 72: KK$="C": INPUT "N)ew R)strt U)ndo C)nt ";KK$
32:IF LEFT$ (KK$,1)="N" GOTO 12
33:IF LEFT$ (KK$,1)="R" GOTO 16
34:IF LEFT$ (KK$,1)="U" LET A1$=A3$
35:IF VAL KK$<1 GOTO 30
36:FOR I=1 TO LEN KK$:M= VAL MID$ (KK$,I,1): IF M>0 IF M<10 GOSUB 40+M
38:NEXT I: GOTO 20
41:LINE ( 6,16)-(16,30),B: GOTO 50
42:LINE (12,16)-(22,30),B: GOTO 50
43:LINE (18,16)-(28,30),B: GOTO 50
44:LINE ( 6, 8)-(16,22),B: GOTO 50
45:LINE (12, 8)-(22,22),B: GOTO 50
46:LINE (18, 8)-(28,22),B: GOTO 50
47:LINE ( 6, 0)-(16,14),B: GOTO 50
48:LINE (12, 0)-(22,14),B: GOTO 50
49:LINE (18, 0)-(28,14),B
50:C=C+1: RESTORE M: GOSUB 60
52:WAIT 0: CURSOR 0: PRINT LEFT$(A1$,4): PRINT MID$(A1$,5,4): PRINT MID$ (A1$,9,4): PRINT RIGHT$ (A1$,4): RETURN
60:READ A:S$= MID$ (A1$,A,1)
62:FOR J=1 TO 4: READ B:A1$= LEFT$(A1$,A-1)+ MID$(A1$,B,1)+RIGHT$ (A1$,16-A):A=B: NEXT J
64:A1$= LEFT$ (A1$,A-1)+S$+ RIGHT$ (A1$,16-A): RETURN
Le jeu se joue sur une grille 4 x 4 remplie des 16 premières lettres de l'alphabet :
Le but du jeu est de remettre la grille dans l'ordre alphabétique à l'aide des 9 mouvements de rotation en sens horaire autour des neuf chiffres placés comme sur le pavé numérique de la calculette :
Code : Tout sélectionner
┌─────┬─────┬─────┬─────┐
│ A │ B │ C │ D │
├─────7─────8─────9─────┤
│ E │ F │ G │ H │
├─────4─────5─────6─────┤
│ I │ J │ K → L │
├─────1─────2──↑──3──↓──┤
│ M │ N │ O ← P │
└─────┴─────┴─────┴─────┘
Au début du jeu la grille est bien évidemment mélangée. Il faut la remettre dans l'ordre.
A chaque étape, on entre le ou les déplacements par le(s) chiffre(s) correspondant(s).
J'ai fait en sorte que l'on puisse entrer plusieurs chiffres ce qui fait gagner du temps, car je suis mauvais et souvant je fais beaucoup tourner en rond.
Les rotation sont animées à l'écran. Le compteur de coup compte chaque rotation.
Il y a aussi quelques menus de sélection pour recommencer une nouvelle partie (N ew), reprendre au début la partie en cours (R estart), annulé le dernier coup (U ndo), etc.
La machine enregistre le nombre de coups minimal. Avec l'option (R estart) cela permet à deux adversaires de s'affronter sur la même grille.
Je suis preneur de toutes idées qui permettraient de proposer un solveur à ce jeu. Ma version n'en possède pas et je suis trop mauvais; je serais reconnaissant envers toute personne qui saurait m'indiquer quel type d'algorithme utiliser pour résoudre ce type de puzzle ou au moins donner l'occasion d'avoir une option (H int).