,0,0,0,0,31,231,248,63,223~/ 252,63,199,252,63,219,252,63,231,252~0 31,255,248~40~R0 0,0,0,0,0,0,0,0,0,0p0 0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0F0 0,0,0,0,0,0,0,0,0,0i0 0,0,0,0,0,63,195,252,127,2510 254,127,247,254, ,0,0,0,0,0,0,0,0|- 0,0,0,0,0,0,0,0,0,0|- 0,0,0,0,0,0,0,0,0,0|- 0,0,0,0,0,0,0,0,0,0}- 0,0,0,0,0,7,247,224,15,2390}. 240,15,215,240,15,195,240,15,247,240@}6. 7,255,224F}T.`}r. 0,0,0,0,0,0,0,0,0,0z}. 0,0,0,0,0,0,0,0,0,0}. 0,0,0,0,0,0,0,0z*+ 0,0,0,0,0,0,247,0,1,231zH+ 128,1,247,128,1,247,128,1,247,128zf+ 0,255,0z+ {+ 0,0,0,0,0,0,0,0,0,0${+ 0,0,0,0,0,0,0,0,0,0>{+ 0,0,0,0,0,0,0,0,0,0X{+ 0,0,0,0,0,0,0,0,0,0x{, 0,0,0,0,0,1,231,128,3,219{8, 192,3,2472540,0,0,0,0,31,231,248,63,223~/ 252,63,199,252,63,219,252,63,231,252~0 31,255,248~40~R0 0,0,0,0,0,0,0,0,0,0p0 0,0,0,0,0,0,0,0,0,030 0,0,0,0,0,0,0,0,0,0M0 0,0,0,0,0,0,0,0,0,0p0 0,0,0,0,0,63,195,252,127,2510 254,127,2),2,1)x) "MOSSA "(M)": #"A$" -> #"B$: 4120x) SALVO LE VARIABILI NELLO STACK:'y)SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,Cay)XA:AB:BX: SCAMBIO A CON B HANOI($N, $B, $A ,$C);my) 10210y* RITORNO DALLA RICORSIONE~/ 0,0,0,0,0,31,231,248,63,223~/ 252,63,199,252,63,219,252,63,231,252~0 31,255,248~40~R0 0,0,0,0,0,0,0,0,0,0p0 0,0,0,0,0,0,0,0,0,030 0,0,0,0,0,0,0,0,0,0M0 0,0,0,0,0,0,0,0,0,0p0 0,0,0,0,0,63,195,252,127,2510 254,127,2MM1:A$((A),2,1):B$((C),2,1)v( "MOSSA "(M)": #"A$" -> #"B$: 4120%w<( RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKiwZ(C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1wx( PRINT "RITORNO DALLA RICORSIONE  "t& "  1  2  3  "u& "  "u&&u& ***********************Du' * SOLUZIONE RICORSIVA:*bu.' ***********************uL'ND:SP49151:A1:B2:C3:M0uj' SALVO LE V127,239,254,127,239,2541 63,255,252$1B1 0,0,0,0,0,0,0,0,0,0`1 0,0,0,0,0,0,0,0,0,0~1 0,0,0,0,0,0,0,0,0,01 0,0,0,0,0,0,0,0,0,0:1 0,0,0,0,0,127,231,254,255,219h1 255,255,231,255,255,219,255,255,231,255z1 127,255,2540,0,0,0,0,0,0,0,0}. 0,0,0,0,0,0,0,0,0,0}. 0,0,0,0,0,15,199,240,31,223}/ 248,31,199,248,31,251,248,31,199,248 ~&/ 15,255,240~D/,~b/ 0,0,0,0,0,0,0,0,0,0F~/ 0,0,0,0,0,0,0,0,0,0`~/ 0,0,0,0,0,0,0,0,0,0z~/ 0,0,0,0,0,0,0,0,0,0~/ 0,192,3,239,192,3,195,192{V, 1,255,128{t,{, 0,0,0,0,0,0,0,0,0,0{, 0,0,0,0,0,0,0,0,0,0|, 0,0,0,0,0,0,0,0,0,0|, 0,0,0,0,0,0,0,0,0,0>| - 0,0,0,0,0,3,231,192,7,219f|(- 224,7,247,224,7,219,224,7,231,224v|F- 3,255,192||d-|- 0,0,RIPRISTINO LE VARIABILI DALLO STACKy:*C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1"zX* PRINT "RITORNO DALLA RICORSIONE RAMO 2"(zv*.z*Hz* 0,0,0,0,0,0,0,0,0,0bz* 0,0,0,0,0,0,0,0,0,0|z* 0,0,0,0,0,0,0,0,0,0z + 0,0,0,047,254,127,239,254,127,239,2541 63,255,252$1B1 0,0,0,0,0,0,0,0,0,0`1 0,0,0,0,0,0,0,0,0,0~1 0,0,0,0,0,0,0,0,0,01 0,0,0,0,0,0,0,0,0,0A1 0,0,0,0,0,127,231,254,255,219o1 255,255,231,255,255,219,255,255,231,2551 127,255,RAMO 1"w(w( ELSE (N>1): RAMO 2w(NN1w( SALVO LE VARIABILI NELLO STACK:&x)SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C`x,)XB:BC:CX: SCAMBIO B CON C HANOI($N, $A, $C ,$B);lxJ) 10210xh)MM1:A$((A),2,1):B$((CARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152: v'SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C;v' 10210: 1A CHIAMATA HANOI($N, $A, $B ,$C);Fv' 9370v' N1 10450: RAMO1:E' COME DIRE IF N=1 ESEGUI LE RIGHE SEGUENTIv( 3q# Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIq$P3(Q3)0:Q3Q31 r"$ Q31 P3P3(1)&r@$ Q30 P3(1)0:P308r^$ GM$"S" Dr|$ DEBUGur$ Q3D 9640: HO FINITO IL GIOCO (Q3=D ?)r$"": 9730: 646,5: 53280,5r o" Yo$" X(V(2(P31))) X2 2oB" (V(2(P31))),X: SPOSTO DISCO A SXo`" Xp~" APPOGGIO DISCO: #"B$: 4120x) SALVO LE VARIABILI NELLO STACK:.y)SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,Chy)XA:AB:BX: SCAMBIO A CON B HANOI($N, $B, $A ,$C);ty) 10210y* RITORNO DALLA RIC**********************k Y(V1(2(P31))) Y0 2 l (V1(2(P31))),Y: SOLLEVO DISCOl Y5l X(V(2(P31))) X1 2`l (V(2(P31))),X: SPOSTO DISCO A DXhl6 X~lT APPOGGIO DISCO:lr Y1= Y DI PARTENZA Y2 = Y DI ARRITIv(MM1:A$((A),2,1):B$((C),2,1)v( "MOSSA "(M)": #"A$" -> #"B$: 4120,w<( RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKpwZ(C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1wx( PRINT "RITORNO DALLA RICOP21))),Yi Yi AGGIORNO PESO PILA DI DESTINAZIONE 3(j8 IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESICjVP3(1)P2:P3P2:Q3Q31ujt AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2j Q21 : I1 Q21:P2(I)P2(I1): I: SCALO  "t& "  1  2  3  " u& "  "u&-u& ***********************Ku' * SOLUZIONE RICORSIVA:*iu.' ***********************uL'ND:SP49151:A1:B2:C3:M0uj' SAL- 0,0,0,0,0,0,0,0,0,0|- 0,0,0,0,0,0,0,0,0,0|- 0,0,0,0,0,0,0,0,0,0|- 0,0,0,0,0,0,0,0,0,0 }- 0,0,0,0,0,7,247,224,15,2397}. 240,15,215,240,15,195,240,15,247,240G}6. 7,255,224M}T.g}r. 0,0,0,0,0,0,0,0,0,0}. 0,0,0,0,0,0,0,0,0,0}$" COMPLIMENTI,HAI RISOLTO IL GIOCO!"s$(MMM) " NEL NUMERO MINIMO DI MOSSE ("(MM)")"]s% 646,1:(MMM) " HAI FATTO"(M)" MOSSE SU"(MM)" PREVISTE"is0% ""sN% " VUOI GIOCARE ANCORA (S/N)";A$: A$APPENA SOPRA DISCOp# YY1 Y2 2p2# (V1(2(P31))),YpP# Yqn# AGGIORNO PESO PILA DI DESTINAZIONE 2Pq# IQ21 1 1:P2(I)P2(I1): I: SCALO IN BASSO I PESIkq#P2(1)P3:P2P3:Q2Q21q# AGGIORNO PRESENZA DISCHI PILA DI PARTENZA  2,3,247,192,3,239,192,3,195,192{V, 1,255,128{t,{, 0,0,0,0,0,0,0,0,0,0{, 0,0,0,0,0,0,0,0,0,0 |, 0,0,0,0,0,0,0,0,0,0%|, 0,0,0,0,0,0,0,0,0,0E| - 0,0,0,0,0,3,231,192,7,219m|(- 224,7,247,224,7,219,224,7,231,224}|F- 3,255,192|d-| 9310nR!: ELSE IF GM$="S"np! ******************************************!o! * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 2 *Ro! ******************************************vo! Y(V1(2(P31))) Y0 2o! (V1(2(P31))),Y: SOLLEVO DISCOORSIONE,RIPRISTINO LE VARIABILI DALLO STACKy:*C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1)zX* PRINT "RITORNO DALLA RICORSIONE RAMO 2"/zv*5z*Oz* 0,0,0,0,0,0,0,0,0,0iz* 0,0,0,0,0,0,0,0,0,0z* 0,0,0,0,0,0,0,0,0,0z + VOlY1(V1(2(P31)))l P10 Y2Y9: 8170mY2Y9(ADQ1): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO0m YY1 Y2 2Im (V1(2(P31))),YQm& Y|mD AGGIORNO PESO PILA DI DESTINAZIONE 1mb IQ11 1 1:P1(I)P1(I1): IRSIONE RAMO 1"w(w( ELSE (N>1): RAMO 2w(NN1w( SALVO LE VARIABILI NELLO STACK:-x)SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,Cgx,)XB:BC:CX: SCAMBIO B CON C HANOI($N, $A, $C ,$B);sxJ) 10210xh)MM1:A$((A),2,1):BIN ALTO I PESIjP2(Q2)0:Q2Q21j Q21 P2P2(1)j Q20 P2(1)0:P20k  GM$"G" 9310+k(: ELSE IF GM$="S"\kF ******************************************kd * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 1 *k ********************VO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152:v'SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,CBv' 10210: 1A CHIAMATA HANOI($N, $A, $B ,$C);Mv' 9370v' N1 10450: RAMO1:E' COME DIRE IF N=1 ESEGUI LE RIGHE SEGUEN. 0,0,0,0,0,0,0,0,0,0}. 0,0,0,0,0,0,0,0,0,0}. 0,0,0,0,0,15,199,240,31,223~/ 248,31,199,248,31,251,248,31,199,248~&/ 15,255,240~D/3~b/ 0,0,0,0,0,0,0,0,0,0M~/ 0,0,0,0,0,0,0,0,0,0g~/ 0,0,0,0,0,0,0,0,0,0~/ 0,0,0,0,0,0,0,0,0,0"" 9550sl% A$"S" 2110s% "": 53269,0:s%MM1: INCREMENTO MOSSE FATTEs% 3550t% DISEGNO I PIOLI E LA BASE0t& "": 646,1?t & I1 13kt>& "    "st\& Itz& "   **************** ] P1 = VALORE DEL DISCO PIU IN ALTO,CHE CORRISPONDE ALLO SPRITES P1-1D] Y(V1(2(P11))) Y0 2m] (V1(2(P11))),Y: SOLLEVO DISCOu]4 Y]R X(V(2(P11))) X2 2]p (V(2(P11))),X: SPOSTO DISCO A DX] P3P2) 6940[ PI3 PF1 Q30 (P10 P1P3) 77509[ PI3 PF2 Q30 (P20 P2P3) 8560t[ 53280,2: "***********************""[ "* *"[ "* MOSSA NON POSSIBILE *" P10 Y2Y9: 6550exY2Y9(ADQ1)e YY1 Y2 2f (V1(2(P21))),Yf Y9f AGGIORNO PESO PILA DI DESTINAZIONE 1yf IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESIf,P1(1)P2:P1P2:Q1Q11fJ AGGIORNO PRESENZA DISCH 16)0 PI0 PCPI PFPC: 4120YP(PI0) 56145,1:56155,1:56165,15YQ(PI1) 56145,4LYR(PI2) 56155,4cYS(PI3) 56165,4nYd 3610Y A$"F" 9520Y (A$)49 (A$)55 4300Y 214,4: 58732: "MUOVI DISCO A PI: ELSE IF GM$="S"c *******************************************0d * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1 *bd. *******************************************dL Y(V1(2(P21))) Y0 2dj (V1(2(P21))),Y: SOLLEVO DISCOd 32:1884,32V (PC3) 1892,62:1894,60:W(J(56320):(J 4)0 PC1 PCPC1: JOY A SINISTRAiWF(J 8)0 PC3 PCPC1: JOY A DESTRAWG(J 16)0 PC1 PI0 PI1:3920: SELEZIONO P1WH(J 16)0 PC1 PI1 PI0: DESEL(V1(2(P11)))a0 P30 Y2Y9: 5740)bNY2Y9(ADQ3): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO=bl YY1 Y2 2Vb (V1(2(P11))),Y^b Yb AGGIORNO PESO PILA DI DESTINAZIONE 3b IQ31 1 1:P3(I)P3(I1): I: SCALO ELEZIONATOUf 646,1: 53280,15: "SI RISOLVE IN "(MM)" MOSSE."DU 9730: DISEGNA I PIOLI E LA BASEZU GM$"S" 10000pU GM$="G" GIOCAREU 646,1: 214,2: 58732: "FAI LA MOSSA N."(M)U PI0:PF0:PC1: PIOLO INIZIO,FINE,CORRENTI PESI_2P1(Q1)0:Q1Q11_P Q11 P1P1(1) `n Q10 P1(1)0:P10!` GM$"G" 93109`: ELSE IF GM$="S"j` ******************************************` * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 3 *` ****************************g: * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 3 *hX *******************************************6hv Y(V1(2(P21))) Y0 2_h (V1(2(P21))),Y: SOLLEVO DISCOgh Yh X(V(2(P21))) X3 2h (V(2(P21))),X: SPOSTO DISCO X] APPOGGIO DISCO:"^ Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEj^Y1(V1(2(P11))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO^ P20 Y2Y9: 4930^$Y2Y9(ADQ2)^B YY1 Y2 2^` (V1(2(P11))),[& "* *"\D "***********************"C\b I1 255: I: I1 255: I: 3430t\ ******************************************\ * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 2 *\ ************************** I PILA DI PARTENZA 2 gh Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESIgP2(Q2)0:Q2Q215g Q21 P2P2(1)Og Q20 P2(1)0:P20dg GM$"G" 9310|g: ELSE IF GM$="S"g *******************************************OLO # (F=FINE)";B$Y B$"F" 9550Z (B$)49 (B$)55 4300DZ PI1 PF2 Q10 (P20 P2P1) 4480uZ6 PI1 PF3 Q10 (P30 P3P1) 5320ZT PI2 PF1 Q20 (P10 P1P2) 6130Zr PI2 PF3 Q20 (P30 Yd X(V(2(P21))) X1 2e (V(2(P21))),X: SPOSTO DISCO A SX e X"e APPOGGIO DISCO:ee Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEe<Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOeZ EZIONO P1XI(J 16)0 PC2 PI0 PI2:3920: SELEZIONO P2OXJ(J 16)0 PC2 PI2 PI0:3920: DESELEZIONO P2XK(J 16)0 PC3 PI0 PI3:3920: SELEZIONO P3XL(J 16)0 PC3 PI3 PI0:3920: DESELEZIONO P3XM(J IN BASSO I PESIbP3(1)P1:P3P1:Q3Q31c  AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1Yc> Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN ALTO I PESInc\P1(Q1)0:Q1Q11cz Q11 P1P1(1)c Q10 P1(1)0:P10c GM$"G" 9310cEU(PC1) 1872,62:1874,60V8(PC1) 1882,32:1884,328VV(PC1) 1892,32:1894,32YVt(PC2) 1872,32:1874,32zV(PC2) 1882,62:1884,60V(PC2) 1892,32:1894,32V(PC3) 1872,32:1874,32V(PC3) 1882,**************`" Y(V1(2(P11))) Y0 2a@ (V1(2(P11))),Y: SOLLEVO DISCO!a^ YBa| X(V(2(P11))) X3 2ma (V(2(P11))),X: SPOSTO DISCO A DXua Xa APPOGGIO DISCO:a Y1= Y DI PARTENZA Y2 = Y DI ARRIVOaY1 A SXh  Xh* APPOGGIO DISCO:iH Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITE\ifY1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOvi P30 Y2Y9: 7360iY2Y9(ADQ3)i YY1 Y2 2i (V1(2(Y^~ Y^ AGGIORNO PESO PILA DI DESTINAZIONE 25_ IQ21 1 1:P2(I)P2(I1): I: SCALO IN ALTO I PESIP_P2(1)P1:P2P1:Q2Q21_ AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1_ Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN BASSO  ,219~, 192,3,247,192,3,239,192,3,195,192~6 1,255,128~@~J 0,0,0,0,0,0,0,0,0,0~T 0,0,0,0,0,0,0,0,0,0^ 0,0,0,0,0,0,0,0,0,0,h 0,0,0,0,0,0,0,0,0,0Lr 0,0,0,0,0,3,231,192,7,219t| 224,7,247,224,7,219,224,7,231,224 3,255 (|2 ** SUONO PIATTI ***|<54296,15|F54277,0|P54278,240|Z54272,100|d54273,20|n54276,129}xT120:}54276,128}6} *******************<}V} 0,0,0,0,0,0,0,0,0,0p} 0,0,0,0,0,0,0,0,0,0} 0,0,0,0,0,0,0 I+IY060: Y MIMINA (PUNTO PIU IN ALTO QUANDO MUOVO DISCO)sIY9168: Y MASSIMA (COORD Y PPUTNO DI APPOGGIO DEI DISCHI AL PIANO)IAD12: ALTEZZA DISCO IN PIXELS(SPRITE ESPANSO =6 X 2 = 12)I2V53248: REGISTRO DEL VIC DI PARTENZA PER GESTION S C:CX: SCAMBIO B CON C HANOI($N, $A, $C ,$B);z 3660zMM1:A$((A),2,1):B$((C),2,1):PIA:PFC#{ "MOSSA "(M)": #"A$" -> #"B$: 1600I{ SALVO LE VARIABILI NELLO STACK:{SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,"$G "DEVI PRIMA ESEGUIRE IL SEGUENTE COMANDO:"RG "POKE 43,1:POKE 44,64:POKE 16384,0"~G "POI RICARICA IL PROGRAMMA DA DISCO"G "CON ,8 E NON CON ,8,1 !! "G "ALLA FINE ESEGUILO CON IL COMANDO RUN"G$GBDM8: FINO A 8 DISCB 3380xL N1 3740: RAMO1:E' COME DIRE IF N=1 ESEGUI LE RIGHE SEGUENTIyVMM1:A$((A),2,1):B$((C),2,1):PIA:PFC;y` "MOSSA "(M)": #"A$" -> #"B$: 1600~yj RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKytC(SP):S 127,255,2540,0,0,0,0,31,231,248,63,223Ձl 252,63,199,252,63,219,252,63,231,252v 31,255,248쁀 0,0,0,0,0,0,0,0,0,0  0,0,0,0,0,0,0,0,0,0: 0,0,0,0,0,0,0,0,0,0T 0,0,0,0,0,0,0,0,0,0w 0,0,0,0,0,63,195,252,127,251"  "v "  1  2  3  "#w "  TERMINA  "Sw "  SPOSTA TUTTI I DISCHI SUL PIOLO #3 "Yw ww ***********************w * SOLUZIONE RICORS,0,0,0,0,0,0b 0,0,0,0,0,31,231,248,63,223Ձl 252,63,199,252,63,219,252,63,231,252v 31,255,248쁀 0,0,0,0,0,0,0,0,0,0  0,0,0,0,0,0,0,0,0,0: 0,0,0,0,0,0,0,0,0,0T 0,0,0,0,0,0,0,0,0,0w 0,0,0,0,0,63,195,252,127,251L COLORE GIALLOS 53287SN,SN4OC: SETTA I COLORI DEI DISCHI%S: SN^SX ABILITA SPRITES E ESPANDILI IN LARGHEZZA E ALTEZZASv VA0: N0 D1:VAVA(2N):S 53269,VA: ABILITA SPRITESS 53277,VA: ESPANSIONE IN LARGHEZZAS 53271,,192 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,7,247,224,15,239> 240,15,215,240,15,195,240,15,247,240N 7,255,224Tn 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0} 0,0,0,0,0,0,0,0,0,0} 0,0,0,0,0,0,247,0,1,231} 128,1,247,128,1,247,128,1,247,128} 0,255,0}~ 0,0,0,0,0,0,0,0,0,02~ 0,0,0,0,0,0,0,0,0,0L~ 0,0,0,0,0,0,0,0,0,0f~ 0,0,0,0,0,0,0,0,0,0~" 0,0,0,0,0,1,231,128,3PRITESJP ""9)"LA TORRE DI HANOI"EJn 6)"BY ALESSANDRO SCOLA (C)2024"iJ 8)"WWW.ALESSANDROSCOLA.COM"J 6)"GIOCA ALLA TORRE DI HANOI"J 6)"O FALLA RISOLVERE AL TUO"J 6)"COMMODORE 64 CON IL METODO"J 6)"RICC{XA:AB:BX: SCAMBIO A CON B HANOI($N, $B, $A ,$C);{ 3660|  RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKU|C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1| PRINT "RITORNO DALLA RICORSIONE RAMO 2"|HI MASSIMO7H` P1(DM): STATO PRESENZA DEI PIOLI SU PIOLO 1, DA 1 A 7tH~ P2(DM): STATO PRESENZA DEI PIOLI SU PIOLO 2, DA 1 A 7H P3(DM): STATO PRESENZA DEI PIOLI SU PIOLO 3, DA 1 A 7HX176:X2156:X3236: COORDINATE X DEGLI SPRITES SU PIOLPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1y~ PRINT "RITORNO DALLA RICORSIONE RAMO 1"yz ELSE (N>1): RAMO 2zNN1?z SALVO LE VARIABILI NELLO STACK:zSPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,CzXB:BPER GLI SPRITEQF ************************************************************************F ************************************************************************F4 (44)64 1090FR "ATTENZIONE!!"Fp "PER ESEGUIRE QUESTO PROGRAMMAIVA:*w ***********************wND:SP49151:A1:B2:C3:M0x$ SALVO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152:Zx.SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,Cx8 3660: 1A CHIAMATA HANOI($N, $A, $B ,$C);x 254,127,247,254,127,239,254,127,239,254 63,255,252ւ 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0  0,0,0,0,0,0,0,0,0,0$ 0,0,0,0,0,0,0,0,0,0H 0,0,0,0,0,127,231,254,255,219v  255,255,231,255,255,219,255,255,231,255VA: ESPANSIONE IN ALTEZZA*T *************************************************bT *************************************************T* MM2D1:M1: MM=NUMERO MOSSE MINIME X RISOLVERE, M=NUMERO MOSSATH SPOSTA IL DISCO PIU IN ALTO DAL PIOLO S,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0ހ 0,0,0,0,0,15,199,240,31,223  248,31,199,248,31,251,248,31,199,248& 15,255,240 0:: 0,0,0,0,0,0,0,0,0,0TD 0,0,0,0,0,0,0,0,0,0nN 0,0,0,0,0,0,0,0,0,0X 0,0,0,0 2i (V1(2(P21))),Y: SOLLEVO DISCOi Yj( X(V(2(P21))) X3 2+j2 (V(2(P21))),X: SPOSTO DISCO A SX3j< XIjF APPOGGIO DISCO:jP Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEjZ Y1(V1(2(P21))): AL 1g IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESI h P1(1)P2:P1P2:Q1Q11>h AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2h Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESIh P2(Q2)0:Q2Q21h Q21 P2P2(1) 3890: RIPRODUCI SUONOr AGGIORNO PESO PILA DI DESTINAZIONE 2s IQ21 1 1:P2(I)P2(I1): I: SCALO IN BASSO I PESI:s P2(1)P3:P2P3:Q2Q21ls AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3s Q31 : I1 Q31:P3(I)P3(I1): I *********e Y(V1(2(P21))) Y0 2 f (V1(2(P21))),Y: SOLLEVO DISCOf Y4f X(V(2(P21))) X1 2_f (V(2(P21))),X: SPOSTO DISCO A SXgf$ X}f. APPOGGIO DISCO:f8 Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIV****p& * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 2 *q0 ******************************************(q: Y(V1(2(P31))) Y0 2QqD (V1(2(P31))),Y: SOLLEVO DISCOYqN Y{qX X(V(2(P31))) X2 2qb (V(2(P31))),X: SPOSTO Ocp AGGIORNO PESO PILA DI DESTINAZIONE 3$dz IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESI?dP3(1)P1:P3P1:Q3Q31qd AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1d Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN ALTO I PESIENA SOPRA DISCOn YY1 Y2 2n (V1(2(P31))),Yn Yo 3890: RIPRODUCI SUONO.o AGGIORNO PESO PILA DI DESTINAZIONE 1no IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESIo P1(1)P3:P1P3:Q1Q11o AGGIORNO PRESENZ DISCO DA PIOLO 1 A PIOLO 3 * b ******************************************.b Y(V1(2(P11))) Y0 2Wb (V1(2(P11))),Y: SOLLEVO DISCO_b Yb X(V(2(P11))) X3 2b (V(2(P11))),X: SPOSTO DISCO A DXb  Xb 60l : ELSE IF GM$="S"l ******************************************"m * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 1 *Sm ******************************************wm" Y(V1(2(P31))) Y0 2m, (V1(2(P31))),Y: SOLLEVO DISCOm6 " ": 646,5: 53280,5uH " COMPLIMENTI,HAI RISOLTO IL GIOCO!"LuR (MMM) " NEL NUMERO MINIMO DI MOSSE ("(MM)")"u\ 646,1:(MMM) " HAI FATTO"(M)" MOSSE SU"(MM)" PREVISTE"TRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOjd P30 Y2Y9: 2680kn Y2Y9(ADQ3)kx YY1 Y2 2-k (V1(2(P21))),Y5k YRk 3890: RIPRODUCI SUONO}k AGGIORNO PESO PILA DI DESTINAZIONE 3k IQ31 1 1:P3(I)P3(I1): I: h Q20 P2(1)0:P20h GM$"G" 3360h : ELSE IF GM$="S"&i *******************************************Xi * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 3 *i *******************************************i Y(V1(2(P21))) Y0  : SCALO IN ALTO I PESIs P3(Q3)0:Q3Q31s Q31 P3P3(1)s Q30 P3(1)0:P30"t 56145,1:56155,1:56165,1: GM$"S" .t* DEBUG_t4 Q3D 3470: HO FINITO IL GIOCO (Q3=D ?)t> PRINT"":GOSUB 3500:POKE 646,5:POKE 53280,5tC O DELLO SPRITEgB Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO"gL P10 Y2Y9: 24004gV Y2Y9(ADQ1)Hg` YY1 Y2 2agj (V1(2(P21))),Yigt Yg~ 3890: RIPRODUCI SUONOg AGGIORNO PESO PILA DI DESTINAZIONE DISCO A SXql Xqv APPOGGIO DISCO:q Y1= Y DI PARTENZA Y2 = Y DI ARRIVOr Y1(V1(2(P31)))!r P20 Y2Y9: 3240br Y2Y9(ADQ2): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOvr YY1 Y2 2r (V1(2(P31))),Yr YrdP1(Q1)0:Q1Q11d Q11 P1P1(1)d Q10 P1(1)0:P10e GM$"G" 3360'e: ELSE IF GM$="S"Ye *******************************************e * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1 *e **********************************A DISCHI PILA DI PARTENZA 3o Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIp P3(Q3)0:Q3Q31*p Q31 P3P3(1)Dp Q30 P3(1)0:P30Yp GM$"G" 3360qp : ELSE IF GM$="S"p **************************************APPOGGIO DISCO:b  Y1= Y DI PARTENZA Y2 = Y DI ARRIVO c*Y1(V1(2(P11)))&c4 P30 Y2Y9: 2120gc>Y2Y9(ADQ3): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO{cH YY1 Y2 2cR (V1(2(P11))),Yc\ Ycf 3890: RIPRODUCI SUON Ym@ X(V(2(P31))) X1 2mJ (V(2(P31))),X: SPOSTO DISCO A DXmT Xn^ APPOGGIO DISCO:=nh Y1= Y DI PARTENZA Y2 = Y DI ARRIVOVnr Y1(V1(2(P31)))pn| P10 Y2Y9: 2960n Y2Y9(ADQ1): ALTRIMENTI Y DI ARRIVO E' APPuf ((56320) 16)0 380up 3430uz A$"S" 780u "": 53269,0:v MM1: INCREMENTO MOSSE FATTEv 13102v DISEGNO I PIOLI E LA BASEHv "": 646,1Wv I1 13v "    "v Iv SCALO IN BASSO I PESIk P3(1)P2:P3P2:Q3Q31 l AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2Ml Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESIbl P2(Q2)0:Q2Q21yl Q21 P2P2(1)l Q20 P2(1)0:P20l GM$"G" 33 N):T 53269,VA: ABILITA SPRITES%U 53277,VA: ESPANSIONE IN LARGHEZZALU 53271,VA: ESPANSIONE IN ALTEZZAU *************************************************U *************************************************VMM2D1:M1: MM=N $ POSIZIONA GLI SPRITES DEI DISCHI UNO SULL'ALTRO SU PIOLO 18S. DISEGNA LA BASE DEL GIOCOeS8I0: VARIABILE OFFSET RESGISTRI SPRITESSBOC0: OFFFSET COLORE PER SALTARE IL NUMERO 8SL SND1 0 1: SETTA POSIZIONE X E Y DISCHITV V(S *] ******************************************A^ P1 = VALORE DEL DISCO PIU IN ALTO,CHE CORRISPONDE ALLO SPRITES P1-1e^ Y(V1(2(P11))) Y0 2^ (V1(2(P11))),Y: SOLLEVO DISCO^ Y^ X(V(2(P11))) X2 2^ (V( <"#Q(GM$"S") " >VEDERE SOLUZIONE<"MQ "(JOYSTICK UP/DOWN)"hQ 56320,255:J(56320)Q(GM$"S" (J 1)0) GM$"G": 890Q(GM$"G" (J 2)0) GM$"S": 890Q(J 16)0 1010Q  1690\J PI1 PF3 Q10 (P30 P3P1) 19801\T PI2 PF1 Q20 (P10 P1P2) 2260b\^ PI2 PF3 Q20 (P30 P3P2) 2540\h PI3 PF1 Q30 (P10 P1P3) 2820\r PI3 PF2 Q30 (P20 P2P3) 3100 <"#O"": 31);D:J(56320)2O J(56320)fO*((J 1)0 (J 2)0 (J 16)0) 800O4(D7 (J 1)0) DD1O>(D2 (J 2)0) DD1OH(J 16)0 880OR I1 50:I: 790O\ FOR IEZIONO P1Z(J 16)0 PC2 PI0 PI2:1530: SELEZIONO P2KZ(J 16)0 PC2 PI2 PI0:1530: DESELEZIONO P2Z(J 16)0 PC3 PI0 PI3:1530: SELEZIONO P3Z(J 16)0 PC3 PI3 PI0:1530: DESELEZIONO P3Z(J ONTO ALLA ROVESCIA4M 2040SN,BSN: SETTA BANCO DI MEMORIA PER OGNI SPRITECM I0 62bM A: 64B(SN64)I,A: IkM SNMSD1: SPRITES DEFINITIM """M " PREMI FIRE IN PORTA 2 PER GIOCARE "N((32:1884,32WF(PC1) 1892,32:1894,32XP(PC2) 1872,32:1874,32>XZ(PC2) 1882,62:1884,60_Xd(PC2) 1892,32:1894,32Xn(PC3) 1872,32:1874,32Xx(PC3) 1882,32:1884,32X(PC3) 1892,62:1894,60XJ(563Y1 Y2 2_: (V1(2(P11))),Y_D Y `N 3890: RIPRODUCI SUONO4`X AGGIORNO PESO PILA DI DESTINAZIONE 2s`b IQ21 1 1:P2(I)P2(I1): I: SCALO IN ALTO I PESI`lP2(1)P1:P2P1:Q2Q21`v AGGIORNO PRESENZA DISCHI PILA DI PARTENZAUMERO MOSSE MINIME X RISOLVERE, M=NUMERO MOSSA:V SPOSTA IL DISCO PIU IN ALTO DAL PIOLO SELEZIONATOdV "SI RISOLVE IN "(MM)" MOSSE."V 646,1: 53280,15: "SI RISOLVE IN "(MM)" MOSSE."V 3500: DISEGNA I PIOLI E LA BASEV GM$N2),X1:II1: V((SN2)1),Y9((I1)AD2)T`II1CTj (SN4)7 OC1: PER SALTARE IL COLORE GIALLOvTt 53287SN,SN4OC: SETTA I COLORI DEI DISCHIT~ SNT ABILITA SPRITES E ESPANDILI IN LARGHEZZA E ALTEZZATVA0: N0 D1:VAVA(2 2(P11))),X: SPOSTO DISCO A DX^ X_ APPOGGIO DISCO:C_ Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITE_Y1(V1(2(P11))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO_ P20 Y2Y9: 1840_&Y2Y9(ADQ2)_0 YI1 50: IQ 950Q?R MEMORIZZA IN UN ARRAY LO STATO PRESENZA DISCHI PESATI SU PIOLO 1YR I1 D:P1(I)I: IRP11:P20:P30: PESO DEL DISCO IN ALTO SU UN DATO PIOLORQ1D:Q20:Q30: Q1, Q2, Q3 = QUANTI DISCHI HA CIASCUN PIOLOS\| 53280,2: "* MOSSA NON POSSIBILE *"""] I1 255: I: I1 255: Id] " ": 53280,15: 1310] ******************************************] * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 2=1 TO 25:NEXT IPf 56320,255: 790PpGM$"G": ""'Pz 56320,255fP(GM$"G") " > GIOCARE <"P(GM$"G") " >VEDERE SOLUZIONE<"P(GM$"S") " > GIOCARE  16)0 PI0 PCPI PFPC: 1600[(PI0) 56145,1:56155,1:56165,11[(PI1) 56145,4H[(PI2) 56155,4_[(PI3) 56165,4j[" 1330[, IF A$="F" THEN 9910[6 IF B$="F" THEN 9940[@ PI1 PF2 Q10 (P20 P2P1)56320) 16)0 750: ATTENTE PRESSIONE FIREN 730dN 53269,0: 53280,15: 53281,0: 646,1: COLORE SFONDO,BORDO SCRITTEND2:"QUANTI DISCHI ? (1-8)"N "(JOYSTICK UP/DOWN)"N "20)Y((J 4)0 (J 8)0 (J 16)0) 14206Y(J 4)0 PC1 PCPC1: JOY A SINISTRAeY(J 8)0 PC3 PCPC1: JOY A DESTRAY(J 16)0 PC1 PI0 PI1:1530: SELEZIONO P1Y(J 16)0 PC1 PI1 PI0: DESEL 1a Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN BASSO I PESIaP1(Q1)0:Q1Q110a Q11 P1P1(1)Ja Q10 P1(1)0:P10_a GM$"G" 3360wa: ELSE IF GM$="S"a ******************************************a * SPOSTAMENTO"S" 3590V  GM$="G" GIOCARE#WPI0:PF0:PC1: PIOLO INIZIO,FINE,CORRENTEXW 646,1: 214,2: 58732: "FAI LA MOSSA N."(M)wW#56145,1:56155,1:56165,1W(PI0:PF0: PIOLO INIZIO,FINEW2(PC1) 1872,62:1874,60W<(PC1) 1882, @D@ *************** LA TORRE DI HANOY ***************@ *************** BY ALESSANDRO SCOLA 2024 ***************@ *************** WWW.ALESSANDROSCOLA.COM ***************A( ********************************************* 022 0,0,0,0,0,0,0,0,0,0P2 0,0,0,0,0,0,0,0,0,0n2 0,0,0,0,0,63,195,252,127,2512 254,127,247,254,127,239,254,127,239,2542 63,255,252272 0,0,0,0,0,0,0,0,0,0Q3 0,0,0,0,0,0,0,0,0,0k"3 0,0,0,0,0,0,0,0,0,0@3 0,0,0,0,0,0, SPEGNE TUTTI GLI SPRITES EVENTUALMENTE VISIBILI2I (44)64 490HI "ATTENZIONE!!"oI "PER ESEGUIRE QUESTO PROGRAMMA"I "DEVI PRIMA ESEGUIRE IL SEGUENTE COMANDO:"I "POKE 43,1:POKE 44,64:POKE 16384,0"I "POI RICARICA IL PROGR 5,240,15,195,240,15,247,240}/ 7,255,224}/}0 0,0,0,0,0,0,0,0,0,0}40 0,0,0,0,0,0,0,0,0,0~R0 0,0,0,0,0,0,0,0,0,0~p0 0,0,0,0,0,0,0,0,0,0?~0 0,0,0,0,0,15,199,240,31,223j~0 248,31,199,248,31,251,248,31,199,248{~0 15,255,240~0I PIOLI SU PIOLO 3, DA 1 A 7LG@X176:X2156:X3236: COORDINATE X DEGLI SPRITES SU PIOLIGJY060: Y MIMINA (PUNTO PIU IN ALTO QUANDO MUOVO DISCO)GTY9168: Y MASSIMA (COORD Y PPUTNO DI APPOGGIO DEI DISCHI AL PIANO)H^AD12: ALTEZZA DISCO IN PI0,0,0,0,0,0{- 0,0,0,0,0,0,0,0,0,0{- 0,0,0,0,0,0,0,0,0,0{- 0,0,0,0,0,1,231,128,3,219|- 192,3,247,192,3,239,192,3,195,192|- 1,255,128%|.?|6. 0,0,0,0,0,0,0,0,0,0Y|T. 0,0,0,0,0,0,0,0,0,0s|r. 0,0,0,0,0,0,0,0,0,0|. 0,0,0,0,0,0,6E V :REGISTRO DEL VIC DI PARTENZA PER GESTION SPRITESoE B :BANCO MEMORIA DI PARTENZA PER GLI SPRITEE ************************************************************************ F ***********************************************P1: SP,Cy+XA:AB:BX: SCAMBIO A CON B HANOI($N, $B, $A ,$C);y+ 10630z+ RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKcz+C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1z+ PRINT "RITORNO DALLA RICORSIONE  SU PIOLO 17C P2(DM) :SITUAZIONE PESI DISCHI SU PIOLO 2iC P3(DM) :SITUAZIONE PESI DISCHI SU PIOLO 3C Q1,Q2,Q3 :NUMERO DISCHI PRESENTI SU OGNI PIOLOC X1,X2,X3 :COORDINATE X DEGLI SPRITES SU OGNI PIOLOD Y0 :COORDINATA Y MINA (C)2024"K 8)"WWW.ALESSANDROSCOLA.COM"@K 6)"GIOCA ALLA TORRE DI HANOI"eK 6)"O FALLA RISOLVERE AL TUO"K& 6)"COMMODORE 64 CON IL METODO"K0 6)"RICORSIVO."K: SD1 700KD ***************************KN * RIDEFINISCE***************************hA2 ******************** VARIABILI PRINCIPALI *************************A< SD :SPRITE DEFINITI (SI/NO)AF DM :NUMERO DICHI MASSIMI CHE IL PROGRAMMA GESTISCEBP D :NUMERO DISCHI SCELTI DAL GIOo0,0,0,0^3 0,0,0,0,0,127,231,254,255,219׀|3 255,255,231,255,255,219,255,255,231,255通3 127,255,2540,0,0,0,0,31,231,248,63,22361 252,63,199,252,63,219,252,63,231,252G1 31,255,248M1g1 0,0,0,0,0,0,0,0,0,02 0,0,0,0,0,0,0,0,0, AMMA DA DISCO"J "CON ,8 E NON CON ,8,1 !! "MJ "ALLA FINE ESEGUILO CON IL COMANDO RUN"SJJ ***********************************************************************J ""9)"LA TORRE DI HANOI"J 6)"BY ALESSANDRO SCOL~1 0,0,0,0,0,0,0,0,0,0~$1 0,0,0,0,0,0,0,0,0,0~B1 0,0,0,0,0,0,0,0,0,0~`1 0,0,0,0,0,0,0,0,0,0 ~1 0,0,0,0,0,31,231,248,63,22361 252,63,199,252,63,219,252,63,231,252G1 31,255,248M1g1 0,0,0,0,0,0,0,0,0,02 0,0,0,0,0,0,0,0,0,XELS(SPRITE ESPANSO =6 X 2 = 12)OHhV53248: REGISTRO DEL VIC DI PARTENZA PER GESTION SPRITESHr ************************************************************************H| 53280,15: 53281,0: 646,1: COLORE SFONDO,BORDO SCRITTEI 53269,0: 0,0,0,0|. 0,0,0,0,0,3,231,192,7,219|. 224,7,247,224,7,219,224,7,231,224|. 3,255,192|/}&/ 0,0,0,0,0,0,0,0,0,0}D/ 0,0,0,0,0,0,0,0,0,09}b/ 0,0,0,0,0,0,0,0,0,0S}/ 0,0,0,0,0,0,0,0,0,0t}/ 0,0,0,0,0,7,247,224,15,239}/ 240,15,21*************************4FSD0: SPRITES NON ANCORA DEFINITIWFDM8: FINO A 8 DISCHI MASSIMOF" P1(DM): STATO PRESENZA DEI PIOLI SU PIOLO 1, DA 1 A 7F, P2(DM): STATO PRESENZA DEI PIOLI SU PIOLO 2, DA 1 A 7G6 P3(DM): STATO PRESENZA DERAMO 2"z,z8,zV, 0,0,0,0,0,0,0,0,0,0zt, 0,0,0,0,0,0,0,0,0,0z, 0,0,0,0,0,0,0,0,0,0{, 0,0,0,0,0,0,0,0,0,0#{, 0,0,0,0,0,0,247,0,1,231K{, 128,1,247,128,1,247,128,1,247,128Y{ - 0,255,0_{(-y{F- 0,0,0,0,0,0,0,0,0,0{d- 0,0,0,0,IMA SPRITES (IL PUNTO PIU IN ALTO)_D Y9 :COORDINATA Y MASSIMA SPRITES (IL PUNTO PIU IN BASSO)D AD :ALTEZZA SPRITE DI UN SINGOLO DISCO IN PIXELSD SN :SPRITE NUMBERD SP :STACK POINTER (PER LA SOLUZIONE RICORSIVA) GLI SPRITES *LX ***************************LLb " INIZIALIZZAZIONE SPRITES, ATTENDI..."LlB245: BANCO MEMORIA DI PARTENZA PER GLI SPRITE 245Lv LEGGE I DATA PER I DISCHI CHE UTILIZZEROL SN0 DM1L 1862,56SN: VISUALIZZA CCATORE PER LA PARTITAIBZ MM :NUMERO MOSSE MINIME PER VINCERE = 2^D-1wBd P1 :PESO DISCO IN ALTO SU PIOLO 1Bn P2 :PESO DISCO IN ALTO SU PIOLO 2Bx P3 :PESO DISCO IN ALTO SU PIOLO 3C P1(DM) :SITUAZIONE PESI DISCHI (2(P31))),X: SPOSTO DISCO A DXl Xl APPOGGIO DISCO:m! Y1= Y DI PARTENZA Y2 = Y DI ARRIVO(m4!Y1(V1(2(P31)))BmR! P10 Y2Y9: 8590mp!Y2Y9(ADQ1): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOm! YY1 Y2 2m! (V1( j AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2k6 Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESI4kTP2(Q2)0:Q2Q21Kkr Q21 P2P2(1)ek Q20 P2(1)0:P20zk GM$"G" 9730k: ELSE IF GM$="S"k *************** VA:*u( ***********************u(ND:SP49151:A1:B2:C3:M0v) SALVO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152:]v,)SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,CvJ) 10630: 1A CHIAMATA HANOI($N, $A, $B ,$C);v 21))),Y: SOLLEVO DISCOhV Yht X(V(2(P21))) X3 2i (V(2(P21))),X: SPOSTO DISCO A SX"i X8i APPOGGIO DISCO:{i Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEi Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIV  " HAI FATTO"(M)" MOSSE SU"(MM)" PREVISTE"s&((56320) 16)0 1120s& 9940t' A$"S" 2290t.' "": 53269,0:1): RAMO 2%xv*NN1Kx* SALVO LE VARIABILI NELLO STACK:x*SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,Cx 2(P31))),Ym! Ym! AGGIORNO PESO PILA DI DESTINAZIONE 1#n" IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESI>n$"P1(1)P3:P1P3:Q1Q11pnB" AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3n`" Q31 : I1 Q31:P3(I)P3(I1): I: SCA ***************************k * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 1 *%l& ******************************************IlD Y(V1(2(P31))) Y0 2rlb (V1(2(P31))),Y: SOLLEVO DISCOzl Yl X(V(2(P31))) X1 2l (V h) 9790v) N1 10870: RAMO1:E' COME DIRE IF N=1 ESEGUI LE RIGHE SEGUENTIw)MM1:A$((A),2,1):B$((C),2,1):PIA:PFC Gw) "MOSSA "(M)": #"A$" -> #"B$: 4630w) RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKw)C O E' APPENA SOPRA DISCOi( P30 Y2Y9: 7780iFY2Y9(ADQ3)jd YY1 Y2 2j (V1(2(P21))),Y$j YOj AGGIORNO PESO PILA DI DESTINAZIONE 3j IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESIjP3(1)P2:P3P2:Q3Q31     "t( It( "  "&u<( "  1  2  3  "VuZ( "  "\ux(zu( ***********************u( * SOLUZIONE RICORSI 0:P20g GM$"G" 9730g: ELSE IF GM$="S"h *******************************************Gh * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 3 *yh *******************************************h Y(V1(2(P21))) Y0 2h8 (V1(2(P " r & DEBUGr>& Q3D 10060: HO FINITO IL GIOCO (Q3=D ?)s\&"": 10150: 646,5: 53280,5Esz&" COMPLIMENTI,HAI RISOLTO IL GIOCO!"s&(MMM) " NEL NUMERO MINIMO DI MOSSE ("(MM)")"s& 646,1:(MMM) Y DI ARRIVO DELLO SPRITEfY1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO.f P10 Y2Y9: 6970@fY2Y9(ADQ1)Tf: YY1 Y2 2mfX (V1(2(P21))),Yufv Yf AGGIORNO PESO PILA DI DESTINAZIONE 1f IQ11 1 RRIVOp^$Y1(V1(2(P31)))p|$ P20 Y2Y9: 9400q$Y2Y9(ADQ2): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO+q$ YY1 Y2 2Dq$ (V1(2(P31))),YLq$ Ywq% AGGIORNO PESO PILA DI DESTINAZIONE 2q0% IQ21 1 1:P2(I)P2(I1):*XB:BC:CX: SCAMBIO B CON C HANOI($N, $A, $C ,$B);x* 10630y +MM1:A$((A),2,1):B$((C),2,1):PIA:PFC0y*+ "MOSSA "(M)": #"A$" -> #"B$: 4630VyH+ SALVO LE VARIABILI NELLO STACK:yf+SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPS LO IN ALTO I PESIn~"P3(Q3)0:Q3Q31n" Q31 P3P3(1)n" Q30 P3(1)0:P30o" GM$"G" 9730&o": ELSE IF GM$="S"Wo# ******************************************o2# * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 2 *oP# ***************** U PIOLO 1Q I1 D:P1(I)I: I GIOCARE <"HP (GM$"G") " >VEDERE SOLUZIONE<"P< (GM$"S") " > GIOCARE <"PZ (GM$"S") " >VEDERE SOLUZIONE<"Px "( " THEN 9910Z IF B$="F" THEN 9940 [ PI1 PF2 Q10 (P20 P2P1) 4900Q[4 PI1 PF3 Q10 (P30 P3P1) 5740[R PI2 PF1 Q20 (P10 P1P2) 6550[p PI2 PF3 Q20 (P30 P3P2) 7360[ PI3 PF1 Q4,16x( ************ SUONO BLEEP **************2 54296,15Ċ< 54277,17ԊF 54278,150P 54273,100Z 54272,100d 54276,17n T1 12: T%x 54273,705 54272,100H T1 12: TW 54273,40g 54272,100  PI0 PI1:4390: SELEZIONO P1&Yr(J 16)0 PC1 PI1 PI0: DESELEZIONO P1`Y(J 16)0 PC2 PI0 PI2:4390: SELEZIONO P2Y(J 16)0 PC2 PI2 PI0:4390: DESELEZIONO P2Y(J 16)0 PC3 PI0 PI3:4390: SE 5,231,255` 127,255,254j ********* VICTORY SOUND ********݈tQ54272: I0 24: QI,0: I: Q24,15~ Q5,15: Q6,240 Q1,25: Q0,243: Q4,17' T1 50: TC Q4,16: T1 15: Tc Q1,25: Q0,243: Q4,17v T 646,1: 214,2: 58732: "FAI LA MOSSA N."(M)"WPI0:PF0: PIOLO INIZIO,FINECW (PC1) 1872,62:1874,60dW((PC1) 1882,32:1884,32WF(PC1) 1892,32:1894,32Wd(PC2) 1872,32:1874,32W(PC2) 1882,62:1884,60W(PC  0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,31,231,248,63,223ֆ 252,63,199,252,63,219,252,63,231,252 31,255,248 0,0,0,0,0,0,0,0,0,0! 0,0,0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0,0,0U 0,0,0,0,0,0,0,0,0,0x 0,0,0,0,0,63,195,252 1,VA: ESPANSIONE IN ALTEZZA*U *************************************************bU *************************************************U MM2D1:M1: MM=NUMERO MOSSE MINIME X RISOLVERE, M=NUMERO MOSSAU SPOSTA IL DISCO PIU IN ALTO DAL PIOLO ),YbL Ybj AGGIORNO PESO PILA DI DESTINAZIONE 30c IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESIKcP3(1)P1:P3P1:Q3Q31}c AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1c Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN ALT IOCO S I0: VARIABILE OFFSET RESGISTRI SPRITES>S: OC0: OFFFSET COLORE PER SALTARE IL NUMERO 8sSX SND1 0 1: SETTA POSIZIONE X E Y DISCHISv V(SN2),X1:II1: V((SN2)1),Y9((I1)AD2)S II1S (SN4)7 OC1: PER SALTARE JOYSTICK UP/DOWN)" Q 56320,255:J(56320)7Q (GM$"S" (J 1)0) GM$"G": 2530cQ (GM$"G" (J 2)0) GM$"S": 2530zQ (J 16)0 2890Q I1 50: IQ, 2710QJ Qh MEMORIZZA IN UN ARRAY LO STATO PRESENZA DISCHI PESATI S Q30 (P10 P1P3) 8170\ PI3 PF2 Q30 (P20 P2P3) 8980O\ 53280,2: "* MOSSA NON POSSIBILE *""s\ I1 255: I: I1 255: I\ " ": 3550\$ *********************9z T1 18: T 54276,16 54276,00,243: Q4,17ʼn T1 50: T Q4,16: T1 15: T Q1,34: Q0,164: Q4,17 T1 180: T1 Q4,16: T1 15: TQ Q1,51: Q0,230: Q4,17e  T1 350: Tr LEZIONO P3Z(J 16)0 PC3 PI3 PI0:4390: DESELEZIONO P3BZ(J 16)0 PI0 PCPI PFPC: 4630kZ&(PI0) 56145,1:56155,1:56165,1ZD(PI1) 56145,4Zb(PI2) 56155,4Z(PI3) 56165,4Z 3850Z IF A$="F 1 50: T Q4,16: T1 15: T Q1,25: Q0,243: Q4,17ʼn T1 50: T Q4,16: T1 15: T Q1,34: Q0,164: Q4,17 T1 180: T1 Q4,16: T1 15: TQ Q1,51: Q0,230: Q4,17e  T1 350: Tr 2) 1892,32:1894,32 X(PC3) 1872,32:1874,32*X(PC3) 1882,32:1884,32KX(PC3) 1892,62:1894,60XJ(56320):(J 4)0 PC1 PCPC1: JOY A SINISTRAX6(J 8)0 PC3 PCPC1: JOY A DESTRAXT(J 16)0 PC1 ,127,251 254,127,247,254,127,239,254,127,239,254 63,255,252ׇ$ 0,0,0,0,0,0,0,0,0,0. 0,0,0,0,0,0,0,0,0,0 8 0,0,0,0,0,0,0,0,0,0%B 0,0,0,0,0,0,0,0,0,0IL 0,0,0,0,0,127,231,254,255,219wV 255,255,231,255,255,219,255,25  SELEZIONATO V "SI RISOLVE IN "(MM)" MOSSE."GV8 646,1: 53280,15: "SI RISOLVE IN "(MM)" MOSSE."oVV 10150: DISEGNA I PIOLI E LA BASEVt GM$"S" 10420V GM$="G" GIOCAREVPI0:PF0:PC1: PIOLO INIZIO,FINE,CORRENTEW O I PESIcP1(Q1)0:Q1Q11c Q11 P1P1(1)d< Q10 P1(1)0:P10dZ GM$"G" 97303dx: ELSE IF GM$="S"ed *******************************************d * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1 *d ************************  IL COLORE GIALLOT 53287SN,SN4OC: SETTA I COLORI DEI DISCHI%T SN^T ABILITA SPRITES E ESPANDILI IN LARGHEZZA E ALTEZZAT* VA0: N0 D1:VAVA(2N):TH 53269,VA: ABILITA SPRITESTf 53277,VA: ESPANSIONE IN LARGHEZZAT 5327 y` 1872,32: 1874,32yj 1882,32: 1884,32yt 1892,32: 1894,32y~ 1919,62: 1927,60z 4970: VICTORY SOUND$z((56320) 16)0 410/z 3730Ez "": 53269,0:hzMM1: INCREMENTO MOSSE FATTEsz 1340z DISEGNO I PIOLI Q31w Q31 P3P3(1)w Q30 P3(1)0:P30w56145,1:56155,1:56165,1: GM$"S" w DEBUG0x$ Q3D 3760: HO FINITO IL GIOCO (Q3=D ?)bx. PRINT"":GOSUB 3500:POKE 646,5:POKE 53280,5x8 " ": 0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0Â 0,0,0,0,0,0,247,0,1,231& 128,1,247,128,1,247,128,1,247,1280 0,255,0:D 0,0,0,0,0,0,0,0,0,03N 0,0,0,0,0,0,0,0,0,0MX 0,0,0,0,0,0,0,0,0,0gb 0,0,0,0,0,0,0,0,0,0l 0,0,0,0,0, :up Y1= Y DI PARTENZA Y2 = Y DI ARRIVOuz Y1(V1(2(P31)))u P20 Y2Y9: 34803v Y2Y9(ADQ2): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOGv YY1 Y2 2`v (V1(2(P31))),Yhv Yv 4210: RIPRODUCI SUONOv AGGIOR CON B HANOI($N, $B, $A ,$C);@ 3980J RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK-TC(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1[^ PRINT "RITORNO DALLA RICORSIONE RAMO 2"ah|r *** SUONO DISCHI *** ENZA 3s Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIs P3(Q3)0:Q3Q31 t Q31 P3P3(1)'t Q30 P3(1)0:P301): RAMO 2~NN1 SALVO LE VARIABILI NELLO STACK:WSPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,CXB:BC:CX: SCAMBIO B CON C HANOI P31))) X1 2q: (V(2(P31))),X: SPOSTO DISCO A DXqD XqN APPOGGIO DISCO: rX Y1= Y DI PARTENZA Y2 = Y DI ARRIVO9rb Y1(V1(2(P31)))Srl P10 Y2Y9: 3200rv Y2Y9(ADQ1): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOr MINA<|ZND:SP49151:A1:B2:C3:M0|d SALVO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152:2}nSPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,Cc}x 3980: 1A CHIAMATA HANOI($N, $A, $B ,$C);n} 3620} N1 4060: RA  3,255,192 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0ل 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0  0,0,0,0,0,7,247,224,15,239? 240,15,215,240,15,195,240,15,247,240O  7,255,224U*o4 0,0,0,0,0,0,0,0,0,0> E LA BASEz "": 646,1z I1 13z "    "z I"{ PRINT "  "R{ "  "{  "  1  2  3  " 646,5: 53280,5xB" COMPLIMENTI,HAI RISOLTO IL GIOCO!"yL(MMM) " NEL NUMERO MINIMO DI MOSSE ("(MM)")"dyV 646,1:(MMM) " HAI FATTO"(M)" MOSSE SU"(MM)" PREVISTE"y[ ""9)" " 1,231,128,3,219v 192,3,247,192,3,239,192,3,195,192 1,255,128Ń߃ 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0- 0,0,0,0,0,0,0,0,0,0M 0,0,0,0,0,3,231,192,7,219u 224,7,247,224,7,219,224,7,231,224 NO PESO PILA DI DESTINAZIONE 2v IQ21 1 1:P2(I)P2(I1): I: SCALO IN BASSO I PESI w P2(1)P3:P2P3:Q2Q21=w AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3w Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIw P3(Q3)0:Q3 |54296,1554277,054278,24054272,100Á54273,20ҁ54276,129T120:54276,128 GM$"S" ((56320) 16)0 4107 *******************=W 0,0,0,0,0,0,0,0,0,0q 0,0,0,0,0,0,0,0,0,0 0,  3 A PIOLO 2 *t ******************************************t* Y(V1(2(P31))) Y0 2"u4 (V1(2(P31))),Y: SOLLEVO DISCO*u> YLuH X(V(2(P31))) X2 2wuR (V(2(P31))),X: SPOSTO DISCO A SXu\ Xuf APPOGGIO DISCO ($N, $A, $C ,$B); 3980MM1:A$((A),2,1):B$((C),2,1):PIA:PFC "MOSSA "(M)": #"A$" -> #"B$: 1730!" SALVO LE VARIABILI NELLO STACK:a,SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C6XA:AB:BX: SCAMBIO A  YY1 Y2 2r (V1(2(P31))),Yr Yr 4210: RIPRODUCI SUONOs AGGIORNO PESO PILA DI DESTINAZIONE 1Qs IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESIls P1(1)P3:P1P3:Q1Q11s AGGIORNO PRESENZA DISCHI PILA DI PART MO1:E' COME DIRE IF N=1 ESEGUI LE RIGHE SEGUENTI}MM1:A$((A),2,1):B$((C),2,1):PIA:PFC~ "MOSSA "(M)": #"A$" -> #"B$: 1730V~ RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK~C(SP):SPSP1:B(SP):SPSP1:A(SP)  0,0,0,0,0,0,0,0,0,0H 0,0,0,0,0,0,0,0,0,0R 0,0,0,0,0,0,0,0,0,0߅\ 0,0,0,0,0,15,199,240,31,223 f 248,31,199,248,31,251,248,31,199,248p 15,255,240!z; 0,0,0,0,0,0,0,0,0,0U 0,0,0,0,0,0,0,0,0,0o 0,0,0,0,0,0,0,0,0,0 { "  TERMINA  "{ "  SPOSTA TUTTI I DISCHI SUL PIOLO #3 "{(|2 ***********************,|< * SOLUZIONE RICORSIVA:*J|F ***********************|P 1919,62: 1927,60: PER TERMINARE PREMI FUOCO SU >TER 21df AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1/ep Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN BASSO I PESIDezP1(Q1)0:Q1Q11[e Q11 P1P1(1)ue Q10 P1(1)0:P10e GM$"G" 3600ee ***************************** b Yb X(V(2(P11))) X2 2 c (V(2(P11))),X: SPOSTO DISCO A DXc X+c APPOGGIO DISCO:nc Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEcY1(V1(2(P11))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO m (V1(2(P21))),Y: SOLLEVO DISCOm Ym X(V(2(P21))) X3 2 n" (V(2(P21))),X: SPOSTO DISCO A SX(n, X>n6 APPOGGIO DISCO:n@ Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEnJ Y1(V1(2(P21))): ALTRI VE ON`D PW1 15`N 53280,PWaX S3,PW: S2,0: SWEEP HIGH BYTE OF PULSE WIDTH+ab T1 40: T4al PWMav S4,64: PULSE OFFa " ": 53280,15: 1340a ************************************** I DESTINAZIONE 1k IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESIl P1(1)P2:P1P2:Q1Q11El AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2l Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESIl P2(Q2)0:Q2Q21l Q2  1930^ PI1 PF3 Q10 (P30 P3P1) 2220)_ PI2 PF1 Q20 (P10 P1P2) 2500Z_ PI2 PF3 Q20 (P30 P3P2) 2780_ PI3 PF1 Q30 (P10 P1P3) 3060_ PI3 PF2 Q30 (P20 P2P3) 3340_ ************************i Y(V1(2(P21))) Y0 2j (V1(2(P21))),Y: SOLLEVO DISCOj Y;j X(V(2(P21))) X1 2fj (V(2(P21))),X: SPOSTO DISCO A SXnj Xj APPOGGIO DISCO:j( Y1= COORD Y DI PARTENZA Y2 = C  PC4 410]|(J 16)0 PI0 PCPI PFPC: 1730*](PI0) 56145,1:56155,1:56165,1\](PI0) ""9)" "](PI1) 56145,3: ""9)"DA PIOLO 1" ](PI2) 56155,3: ""9)"DA PIOLO 2 L YgV 4210: RIPRODUCI SUONOg` AGGIORNO PESO PILA DI DESTINAZIONE 3=hj IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESIXht P3(1)P1:P3P1:Q3Q31h~ AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1h Q11 : I1 Q11:P1(I)P1( LO IN BASSO I PESIo P3(1)P2:P3P2:Q3Q31o AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2Bp Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESIWp P2(Q2)0:Q2Q21np Q21 P2P2(1)p Q20 P2(1)0:P20p GM$"G" 3600 *************e * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 3 *#f ******************************************Gf Y(V1(2(P11))) Y0 2pf (V1(2(P11))),Y: SOLLEVO DISCOxf Yf X(V(2(P11))) X3 2f (V(2(P11))),X: c  P20 Y2Y9: 2080cY2Y9(ADQ2)c  YY1 Y2 2d* (V1(2(P11))),Yd4 Y4d> 4210: RIPRODUCI SUONO_dH AGGIORNO PESO PILA DI DESTINAZIONE 2dR IQ21 1 1:P2(I)P2(I1): I: SCALO IN ALTO I PESId\P2(1)P1:P2P1:Q2Q MENTI Y DI ARRIVO E' APPENA SOPRA DISCOnT P30 Y2Y9: 2920n^ Y2Y9(ADQ3) oh YY1 Y2 2"or (V1(2(P21))),Y*o| YGo 4210: RIPRODUCI SUONOro AGGIORNO PESO PILA DI DESTINAZIONE 3o IQ31 1 1:P3(I)P3(I1): I: SCA ****a * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 2 *"b ******************************************lb P1 = VALORE DEL DISCO PIU IN ALTO,CHE CORRISPONDE ALLO SPRITES P1-1b Y(V1(2(P11))) Y0 2b (V1(2(P11))),Y: SOLLEVO DISCO 1 P2P2(1)l Q20 P2(1)0:P20l GM$"G" 3600l m *******************************************Mm * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 3 *m *******************************************m Y(V1(2(P21))) Y0 2  53280,2: "* MOSSA NON POSSIBILE *""(` FOR I=1 TO 255:NEXT I:FOR I=1 TO 255:NEXT I:` ERROR SOUNDg`S54272: I0 24: SI,0: I: S24,15`& S1,8: S0,0: LOW FREQUENCY NOTE`0 S5,0: S6,240`: S4,65: PULSE WA OORD Y DI ARRIVO DELLO SPRITEk2 Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO)k< P10 Y2Y9: 2640;kF Y2Y9(ADQ1)OkP YY1 Y2 2hkZ (V1(2(P21))),Ypkd Ykn 4210: RIPRODUCI SUONOkx AGGIORNO PESO PILA D "](PI3) 56165,3: ""9)"DA PIOLO 3"^ 13702^ PF1 GM$"G" ""20)" A PIOLO 1"d^ PF2 GM$"G" ""20)" A PIOLO 2"^ PF3 GM$"G" ""20)" A PIOLO 3"^ PI1 PF2 Q10 (P20 P2P1) I1): I: SCALO IN ALTO I PESIh P1(Q1)0:Q1Q11h Q11 P1P1(1)i Q10 P1(1)0:P10(i GM$"G" 3600.i `i *******************************************i * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1 *i ******************* p p ******************************************q * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 1 *6q ******************************************Zq Y(V1(2(P31))) Y0 2q (V1(2(P31))),Y: SOLLEVO DISCOq& Yq0 X(V(2(  SPOSTO DISCO A DXf Xf APPOGGIO DISCO: g Y1= Y DI PARTENZA Y2 = Y DI ARRIVO%g Y1(V1(2(P11)))?g$ P30 Y2Y9: 2360g. Y2Y9(ADQ3): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOg8 YY1 Y2 2gB (V1(2(P11))),Yg 0 (J 16)0) 830PR(D7 (J 1)0) DD17P\(D2 (J 2)0) DD1MPf(J 16)0 910ePp I1 50:I: 820Pz FOR I=1 TO 25:NEXT IP 56320,255: 820PGM$"G": ""P 56320,255P(GM$"G") " (SN64)I,A: IM SNNSD1: SPRITES DEFINITI&N """lN " PREMI FIRE IN PORTA 2 PER GIOCARE "N((56320) 16)0 780: ATTENTE PRESSIONE FIREN 760N  53269,0: 53280,15: 53281,0: 646,1: COLORE S 2X(PC2) 1882,62:1884,60Y(PC2) 1892,32:1894,322Y(PC2) 1919,32:1927,32SY(PC3) 1872,32:1874,32tY(PC3) 1882,32:1884,32Y(PC3) 1892,62:1894,60Y(PC3) 1919,32:1927,32Y(PC4) 1872, OLVERE AL TUO"LD 6)"COMMODORE 64 CON IL METODO"2LN 6)"RICORSIVO."CLX SD1 730eLb ***************************Ll * RIDEFINISCE GLI SPRITES *Lv ***************************L " INIZIALIZZAZIONE SPRITES, ATTENDI..."MB24 "SI RISOLVE IN "(MM)" MOSSE."2W  646,1: 53280,15: "SI RISOLVE IN "(MM)" MOSSE."YW 3790: DISEGNA I PIOLI E LA BASEnW GM$"S" 3900W( GM$="G" GIOCAREW2PI0:PF0:PC1: PIOLO INIZIO,FINE,CORRENTEW< 646,1: 214,2: 58732 RE QUESTO PROGRAMMA"1J "DEVI PRIMA ESEGUIRE IL SEGUENTE COMANDO:"_J "POKE 43,1:POKE 44,64:POKE 16384,0"J "POI RICARICA IL PROGRAMMA DA DISCO"J "CON ,8 E NON CON ,8,1 !! "J "ALLA FINE ESEGUILO CON IL COMANDO RUN"J2K U 53287SN,SN4OC: SETTA I COLORI DEI DISCHIU SNIU ABILITA SPRITES E ESPANDILI IN LARGHEZZA E ALTEZZAlUVA0: N0 D1:VAVA(2N):U 53269,VA: ABILITA SPRITESU 53277,VA: ESPANSIONE IN LARGHEZZAU 53271,VA: ESPANSIONE I NA (PUNTO PIU IN ALTO QUANDO MUOVO DISCO)aHrY9168: Y MASSIMA (COORD Y PPUTNO DI APPOGGIO DEI DISCHI AL PIANO)H|AD12: ALTEZZA DISCO IN PIXELS(SPRITE ESPANSO =6 X 2 = 12)HV53248: REGISTRO DEL VIC DI PARTENZA PER GESTION SPRITES/I *******  D:P1(I)I: I'S.P11:P20:P30: PESO DEL DISCO IN ALTO SU UN DATO PIOLOhS8Q1D:Q20:Q30: Q1, Q2, Q3 = QUANTI DISCHI HA CIASCUN PIOLOSB POSIZIONA GLI SPRITES DEI DISCHI UNO SULL'ALTRO SU PIOLO 1SL DISEGNA LA BASE DEL GIOCOSVI0: VARI Z(J 8)0 PC3 PCPC1: JOY A DESTRA["(J 2)0 PC4: GIU.[,(J 1)0 PC2: SUo[6(J 16)0 PC1 PI0 PI1: 5160:1670: SELEZIONO P1[@(J 16)0 PC1 PI1 PI0: 5160: DESELEZIONO P1[J(J 16)0 PC2 PI  > GIOCARE <"6Q(GM$"G") " >VEDERE SOLUZIONE<"sQ(GM$"S") " > GIOCARE <"Q(GM$"S") " >VEDERE SOLUZIONE<"Q "(JOYSTICK UP/DOWN FONDO,BORDO SCRITTE,OD3:"QUANTI DISCHI ? (1-8)"VO  "(JOYSTICK UP/DOWN)"O*" <"O4"": 31);D:J(56320)O>J(56320)OH((J 1)0 (J 2) 32:1874,32Y(PC4) 1882,32:1884,32Z(PC4) 1892,32:1894,32:Z(PC4) 1919,62:1927,60IZJ(56320)Z((J 4)0 (J 8)0 (J 16)0) (J 2)0 (J 1)0 1530Z(J 4)0 PC1 PCPC1: JOY A SINISTRA 5: BANCO MEMORIA DI PARTENZA PER GLI SPRITE 245EM LEGGE I DATA PER I DISCHI CHE UTILIZZEROWM SN0 DM1M 1862,56SN: VISUALIZZA CONTO ALLA ROVESCIAM 2040SN,BSN: SETTA BANCO DI MEMORIA PER OGNI SPRITEM I0 62M A: 64B : "FAI LA MOSSA N."(M)XF56145,1:56155,1:56165,1*XPPI0:PF0: PIOLO INIZIO,FINEKXZ(PC1) 1872,62:1874,60lXd(PC1) 1882,32:1884,32Xn(PC1) 1892,32:1894,32Xx(PC1) 1919,32:1927,32X(PC2) 1872,32:1874,3  ***********************************************************************YK ""9)"LA TORRE DI HANOI"K 6)"BY ALESSANDRO SCOLA (C)2024"K& 8)"WWW.ALESSANDROSCOLA.COM"K0 6)"GIOCA ALLA TORRE DI HANOI"K: 6)"O FALLA RIS N ALTEZZAV *************************************************MV *************************************************VMM2D1:M1: MM=NUMERO MOSSE MINIME X RISOLVERE, M=NUMERO MOSSAV SPOSTA IL DISCO PIU IN ALTO DAL PIOLO SELEZIONATOV *****************************************************************nI 53280,15: 53281,0: 646,1: COLORE SFONDO,BORDO SCRITTEI 53269,0: SPEGNE TUTTI GLI SPRITES EVENTUALMENTE VISIBILII (44)64 520I "ATTENZIONE!!"J "PER ESEGUI ABILE OFFSET RESGISTRI SPRITES)T`OC0: OFFFSET COLORE PER SALTARE IL NUMERO 8^Tj SND1 0 1: SETTA POSIZIONE X E Y DISCHITt V(SN2),X1:II1: V((SN2)1),Y9((I1)AD2)T~II1T (SN4)7 OC1: PER SALTARE IL COLORE GIALLO 0 PI2: 5160:1670: SELEZIONO P20\T(J 16)0 PC2 PI2 PI0: 5160:1670: DESELEZIONO P2q\^(J 16)0 PC3 PI0 PI3: 5160:1670: SELEZIONO P3\h(J 16)0 PC3 PI3 PI0: 5160:1670: DESELEZIONO P3\r(J 16)0 )"Q 56320,255:J(56320)$R(GM$"S" (J 1)0) GM$"G": 920OR(GM$"G" (J 2)0) GM$"S": 920fR(J 16)0 1040yR I1 50: IR 980RR MEMORIZZA IN UN ARRAY LO STATO PRESENZA DISCHI PESATI SU PIOLO 1R$ I1 ,0,0,0,0,0,0,0,0,0N 0,0,0,0,0,0,0,0,0,0N 0,0,0,0,0,15,199,240,31,223N 248,31,199,248,31,251,248,31,199,248N 15,255,240OO 0,0,0,0,0,0,0,0,0,06O 0,0,0,0,0,0,0,0,0,0PO 0,0,0,0,0,0,0,0,0,0jO 0,0,0,0,0,0,0,0,0,0O 47,192,3,239,192,3,195,192L 1,255,128LL 0,0,0,0,0,0,0,0,0,0L 0,0,0,0,0,0,0,0,0,0L 0,0,0,0,0,0,0,0,0,0M  0,0,0,0,0,0,0,0,0,0.M 0,0,0,0,0,3,231,192,7,219VM  224,7,247,224,7,219,224,7,231,224fM* 3,255,192lM4M> 0 @D@ *************** LA TORRE DI HANOY ***************@ *************** BY ALESSANDRO SCOLA 2024 ***************@ *************** WWW.ALESSANDROSCOLA.COM ***************A( ********************************************* J54278,240J54272,100J54273,20J54276,129JT120:J54276,128J& GM$"S" ((56320) 16)0 410J0K: *******************KD8KN 0,0,0,0,0,0,0,0,0,0RKX 0,0,0,0,0,0,0,0,0,0lKb 0,0,0,0,0,0,0,0,0,0Kl 0,0,0CATORE PER LA PARTITAIBZ MM :NUMERO MOSSE MINIME PER VINCERE = 2^D-1tBd PI :PIOLO INIZIALE SELEZIONATOBn PF :PIOLO FINALE SELEZIONATOBx PC :PIOLO CORRENTE (SELETTORE PIOLO DA JOYSTICK)C P1 :PESO DISCO IN AHhMM1:A$((A),2,1):B$((C),2,1):PIA:PFCHr "MOSSA "(M)": #"A$" -> #"B$: 1730I| SALVO LE VARIABILI NELLO STACK:BISPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C|IXA:AB:BX: SCAMBIO A CON B HANOI($N, $B, $A ,$C);**** SUONO BLEEP **************S 54296,15S 54277,17S 54278,150S 54273,100S 54272,100S 54276,17S T1 12: TT 54273,70T 54272,100)T T1 12: T8T 54273,40HT 54272,100[T T1 18: TjT 5427I LE RIGHE SEGUENTIFMM1:A$((A),2,1):B$((C),2,1):PIA:PFCF "MOSSA "(M)": #"A$" -> #"B$: 17307G RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK{GC(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1GQ ********* VICTORY SOUND ********QQ54272: I0 24: QI,0: I: Q24,15Q Q5,15: Q6,240Q Q1,25: Q0,243: Q4,17R T1 50: T$R Q4,16: T1 15: TDR Q1,25: Q0,243: Q4,17WR  T1 50: TsR Q4,16: T1R GLI SPRITEOF ************************************************************************F" ************************************************************************F,SD0: SPRITES NON ANCORA DEFINITIF6DM8: FINO A 8 DISCHI MASSIMO%G@ P1( 0,0,0,0,0,31,231,248,63,223O 252,63,199,252,63,219,252,63,231,252O 31,255,248O$O. 0,0,0,0,0,0,0,0,0,0P8 0,0,0,0,0,0,0,0,0,0PB 0,0,0,0,0,0,0,0,0,06PL 0,0,0,0,0,0,0,0,0,0YPV 0,0,0,0,0,63,195,252,127,251P` 254,127,247,25,0,0,0,0,0,0,0,0,0MH 0,0,0,0,0,0,0,0,0,0MR 0,0,0,0,0,0,0,0,0,0M\ 0,0,0,0,0,0,0,0,0,0Mf 0,0,0,0,0,7,247,224,15,239 Np 240,15,215,240,15,195,240,15,247,2400Nz 7,255,2246NPN 0,0,0,0,0,0,0,0,0,0jN 0,0,0,0,0,0,0,0,0,0N 0***************************hA2 ******************** VARIABILI PRINCIPALI *************************A< SD :SPRITE DEFINITI (SI/NO)AF DM :NUMERO DICHI MASSIMI CHE IL PROGRAMMA GESTISCEBP D :NUMERO DISCHI SCELTI DAL GIO,0,0,0,0,0,0,0Kv 0,0,0,0,0,0,247,0,1,231K 128,1,247,128,1,247,128,1,247,128K 0,255,0KK 0,0,0,0,0,0,0,0,0,0L 0,0,0,0,0,0,0,0,0,0.L 0,0,0,0,0,0,0,0,0,0HL 0,0,0,0,0,0,0,0,0,0hL 0,0,0,0,0,1,231,128,3,219L 192,3,2LTO SU PIOLO 16C P2 :PESO DISCO IN ALTO SU PIOLO 2dC P3 :PESO DISCO IN ALTO SU PIOLO 3C P1(DM) :SITUAZIONE PESI DISCHI SU PIOLO 1C P2(DM) :SITUAZIONE PESI DISCHI SU PIOLO 2C P3(DM) :SITUAZIONE PESI DISCHI SU PIOLOI 4070I RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKJC(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP11): RAMO 2G6NN1G@ SALVO LE VARIABILI NELLO STACK:8HJSPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,CrHTXB:BC:CX: SCAMBIO B CON C HANOI($N, $A, $C ,$B);}H^ 4070 15: TR Q1,25: Q0,243: Q4,17R( T1 50: TR2 Q4,16: T1 15: TR< Q1,34: Q0,164: Q4,17RF T1 180: TSP Q4,16: T1 15: T2SZ Q1,51: Q0,230: Q4,17FSd T1 350: TSSn Q4,16YSxS ******** DM): STATO PRESENZA DEI PIOLI SU PIOLO 1, DA 1 A 7bGJ P2(DM): STATO PRESENZA DEI PIOLI SU PIOLO 2, DA 1 A 7GT P3(DM): STATO PRESENZA DEI PIOLI SU PIOLO 3, DA 1 A 7G^X176:X2156:X3236: COORDINATE X DEGLI SPRITES SU PIOLIHhY060: Y MIMI4,127,239,254,127,239,254Pj 63,255,252PtP~ 0,0,0,0,0,0,0,0,0,0P 0,0,0,0,0,0,0,0,0,0P 0,0,0,0,0,0,0,0,0,0Q 0,0,0,0,0,0,0,0,0,0*Q 0,0,0,0,0,127,231,254,255,219XQ 255,255,231,255,255,219,255,255,231,255jQ 127,255,254 LO 1 *9N ******************************************9X Y(V1(2(P31))) Y0 2 :b (V1(2(P31))),Y: SOLLEVO DISCO(:l YJ:v X(V(2(P31))) X1 2u: (V(2(P31))),X: SPOSTO DISCO A DX}: X: APPOGGIO DISCO::  7 4300: RIPRODUCI SUONO7 AGGIORNO PESO PILA DI DESTINAZIONE 3'8 IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESIB8 P3(1)P2:P3P2:Q3Q31t8 AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 28 Q21 : I1 Q21:P2(I)P2(I1): 1882,32: 1884,32B 1892,32: 1894,32B 1919,62: 1927,60B 5060: VICTORY SOUNDC((56320) 16)0 410C 3820&C "": 53269,0:IC MM1: INCREMENTO MOSSE FATTETC 1340tC DISEGNO I PIOLI E LA BASEC( "": 646 DISCO DA PIOLO 2 A PIOLO 3 *5, *******************************************66 Y(V1(2(P21))) Y0 2A6@ (V1(2(P21))),Y: SOLLEVO DISCOI6J Yj6T X(V(2(P21))) X3 26^ (V(2(P21))),X: SPOSTO DISCO A SX6h X6r `56145,1:56155,1:56165,1: GM$"S" @j ""9)" "At Q3D 3850: HO FINITO IL GIOCO (Q3=D ?)CA~ PRINT"":GOSUB 3500:POKE 646,5:POKE 53280,5A " ": 646,5: 53280,5A"(2(P21))),Y3 Y3 4300: RIPRODUCI SUONO4 AGGIORNO PESO PILA DI DESTINAZIONE 1E4 IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESI`4 P1(1)P2:P1P2:Q1Q114 AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 24 Q21 : I1 (2(P31)))> P20 Y2Y9: 3560> Y2Y9(ADQ2): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO ? YY1 Y2 2%? (V1(2(P31))),Y-? YJ? 4300: RIPRODUCI SUONOu? AGGIORNO PESO PILA DI DESTINAZIONE 2? IQ21 1 1:P2(I*1 * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1 *2 *******************************************52 Y(V1(2(P21))) Y0 2^2 (V1(2(P21))),Y: SOLLEVO DISCOf2( Y22 X(V(2(P21))) X1 22< (V(2(P21))),X: SPOSTO D* Q31 P3P3(1)<4 Q30 P3(1)0:P30<> GM$"G" 3680=H ""9)" "=R 8=\ ******************************************i=f * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 2 *=p ************************************MINA  "Dx "  SPOSTA TUTTI I DISCHI SUL PIOLO #3 "DD *********************** E * SOLUZIONE RICORSIVA:*+E ***********************lE 1919,62: 1927,60: PER TERMINARE PREMI FUOCO SU >TERMINA<END:SP49151:A1:BY1= Y DI PARTENZA Y2 = Y DI ARRIVO: Y1(V1(2(P31))): P10 Y2Y9: 32701; Y2Y9(ADQ1): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOE; YY1 Y2 2^; (V1(2(P31))),Yf; Y; 4300: RIPRODUCI SUONO; AGGIORNO PESO  I: SCALO IN ALTO I PESI8 P2(Q2)0:Q2Q218 Q21 P2P2(1)8 Q20 P2(1)0:P209 GM$"G" 3680:9& ""9)" "@90 q9: ******************************************9D * SPOSTAMENTO DISCO DA PIOLO 3 A PIO ,1C2 I1 13C< "    "CF IDP PRINT "  "3DZ "  "iDd "  1  2  3  "Dn "  TER APPOGGIO DISCO:6| Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITE>7 Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOX7 P30 Y2Y9: 2980j7 Y2Y9(ADQ3)~7 YY1 Y2 27 (V1(2(P21))),Y7 Y COMPLIMENTI,HAI RISOLTO IL GIOCO!"A(MMM) " NEL NUMERO MINIMO DI MOSSE ("(MM)")"EB 646,1:(MMM) " HAI FATTO"(M)" MOSSE SU"(MM)" PREVISTE"mB ""9)" "B 1872,32: 1874,32B Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESI4 P2(Q2)0:Q2Q215 Q21 P2P2(1)5 Q20 P2(1)0:P2005 GM$"G" 3680X5 ""9)" "^5 5 *******************************************5" * SPOSTAMENTO)P2(I1): I: SCALO IN BASSO I PESI?$P2(1)P3:P2P3:Q2Q21@. AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3E@8 Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIZ@BP3(Q3)0:Q3Q31q@L Q31 P3P3(1)@V Q30 P3(1)0:P30@ISCO A SX2F X2P APPOGGIO DISCO:3Z Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITE\3d Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOv3n P10 Y2Y9: 26903x Y2Y9(ADQ1)3 YY1 Y2 23 (V1******=z Y(V1(2(P31))) Y0 2= (V1(2(P31))),Y: SOLLEVO DISCO= Y> X(V(2(P31))) X2 2<> (V(2(P31))),X: SPOSTO DISCO A SXD> XZ> APPOGGIO DISCO:> Y1= Y DI PARTENZA Y2 = Y DI ARRIVO> Y1(V12:C3:M0E SALVO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152:FSPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,CDF 4070: 1A CHIAMATA HANOI($N, $A, $B ,$C);OF 3700F N1 4150: RAMO1:E' COME DIRE IF N=1 ESEGUPILA DI DESTINAZIONE 1; IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESI < P1(1)P3:P1P3:Q1Q11;< AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3~< Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESI< P3(Q3)0:Q3Q31< PC4 410%|(J 16)0 PI0 PCPI PFPC: 1730*%(PI0) 56145,1:56155,1:56165,1\%(PI0) ""9)" "%(PI1) 56145,10: ""9)"DA PIOLO 1"%(PI2) 56155,10: ""9)"DA PIOLO 2"% "(J 8)0 PC3 PCPC1: JOY A DESTRA#"(J 2)0 PC4: GIU.#,(J 1)0 PC2: SUo#6(J 16)0 PC1 PI0 PI1: 5250:1670: SELEZIONO P1#@(J 16)0 PC1 PI1 PI0: 5250: DESELEZIONO P1#J(J 16)0 PC2 PI - ******************************************. * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 3 *H. ******************************************l. Y(V1(2(P11))) Y0 2. (V1(2(P11))),Y: SOLLEVO DISCO. Y. X(V(2(P11 2 (PC2) 1882,62:1884,60!(PC2) 1892,32:1894,322!(PC2) 1919,32:1927,32S!(PC3) 1872,32:1874,32t!(PC3) 1882,32:1884,32!(PC3) 1892,62:1894,60!(PC3) 1919,32:1927,32!(PC4) 1872, P20 Y2Y9: 2110+4Y2Y9(ADQ2)+> YY1 Y2 2 ,H (V1(2(P11))),Y,R Y1,\ 4300: RIPRODUCI SUONO\,f AGGIORNO PESO PILA DI DESTINAZIONE 2,p IQ21 1 1:P2(I)P2(I1): I: SCALO IN ALTO I PESI,zP2(1)P1:P2P1:Q2Q21"SI RISOLVE IN "(MM)" MOSSE."2  646,1: 53280,15: "SI RISOLVE IN "(MM)" MOSSE."Y 3880: DISEGNA I PIOLI E LA BASEn GM$"S" 3990( GM$="G" GIOCARE2PI0:PF0:PC1: PIOLO INIZIO,FINE,CORRENTE< 646,1: 214,2: 58732*) * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 2 ** ******************************************i* P1 = VALORE DEL DISCO PIU IN ALTO,CHE CORRISPONDE ALLO SPRITES P1-1* Y(V1(2(P11))) Y0 2* (V1(2(P11))),Y: SOLLEVO DISCO* 53287SN,SN4OC: SETTA I COLORI DEI DISCHI SNI ABILITA SPRITES E ESPANDILI IN LARGHEZZA E ALTEZZAlVA0: N0 D1:VAVA(2N): 53269,VA: ABILITA SPRITES 53277,VA: ESPANSIONE IN LARGHEZZA 53271,VA: ESPANSIONE I53280,2: "* MOSSA NON POSSIBILE *""%(& FOR I=1 TO 255:NEXT I:FOR I=1 TO 255:NEXT I7(0 ERROR SOUNDd(:S54272: I0 24: SI,0: I: S24,15(D S1,8: S0,0: LOW FREQUENCY NOTE(N S5,0: S6,240(X S4,65: PULSE WAVE  Y2 2/j (V1(2(P11))),Y/t Y/~ 4300: RIPRODUCI SUONO"0 AGGIORNO PESO PILA DI DESTINAZIONE 3b0 IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESI}0 P3(1)P1:P3P1:Q3Q310 AGGIORNO PRESENZA DISCHI PILA DI PARTENZA (PI3) 56165,10: ""9)"DA PIOLO 3"% 1370/& PF1 GM$"G" ""20)" A PIOLO 1"a& PF2 GM$"G" ""20)" A PIOLO 2"& PF3 GM$"G" ""20)" A PIOLO 3"& PI1 PF2 Q10 (P20 P2P1) 190 PI2: 5250:1670: SELEZIONO P20$T(J 16)0 PC2 PI2 PI0: 5250:1670: DESELEZIONO P2q$^(J 16)0 PC3 PI0 PI3: 5250:1670: SELEZIONO P3$h(J 16)0 PC3 PI3 PI0: 5250:1670: DESELEZIONO P3$r(J 16)0  ))) X3 2. (V(2(P11))),X: SPOSTO DISCO A DX.$ X/. APPOGGIO DISCO:1/8 Y1= Y DI PARTENZA Y2 = Y DI ARRIVOJ/B Y1(V1(2(P11)))d/L P30 Y2Y9: 2400/V Y2Y9(ADQ3): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO/` YY132:1874,32!(PC4) 1882,32:1884,32"(PC4) 1892,32:1894,32:"(PC4) 1919,62:1927,60I"J(56320)"((J 4)0 (J 8)0 (J 16)0) (J 2)0 (J 1)0 1530"(J 4)0 PC1 PCPC1: JOY A SINISTRA, AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1,- Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN BASSO I PESIA-P1(Q1)0:Q1Q11X- Q11 P1P1(1)r- Q10 P1(1)0:P10- GM$"G" 3680- ""9)" "-: "FAI LA MOSSA N."(M) F56145,1:56155,1:56165,1* PPI0:PF0: PIOLO INIZIO,FINEK Z(PC1) 1872,62:1874,60l d(PC1) 1882,32:1884,32 n(PC1) 1892,32:1894,32 x(PC1) 1919,32:1927,32 (PC2) 1872,32:1874,3 Y* X(V(2(P11))) X2 2 + (V(2(P11))),X: SPOSTO DISCO A DX+ X(+  APPOGGIO DISCO:k+ Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITE+ Y1(V1(2(P11))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO+*N ALTEZZA *************************************************M *************************************************MM2D1:M1: MM=NUMERO MOSSE MINIME X RISOLVERE, M=NUMERO MOSSA SPOSTA IL DISCO PIU IN ALTO DAL PIOLO SELEZIONATO ON(b PW1 15(l 53280,PW)v S3,PW: S2,0: SWEEP HIGH BYTE OF PULSE WIDTH() T1 40: T1) PWJ) S4,64: PULSE OFF) " ": 53280,15: 1340) *****************************************10 Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN ALTO I PESI1 P1(Q1)0:Q1Q111 Q11 P1P1(1)81 Q10 P1(1)0:P10M1 GM$"G" 3680u1 ""9)" "{1 1 ******************************************60& PI1 PF3 Q10 (P30 P3P1) 2260&' PI2 PF1 Q20 (P10 P1P2) 2550W' PI2 PF3 Q20 (P30 P3P2) 2840' PI3 PF1 Q30 (P10 P1P3) 3130' PI3 PF2 Q30 (P20 P2P3) 3420'  D *************** LA TORRE DI HANOY *************** *************** BY ALESSANDRO SCOLA 2024 *************** *************** WWW.ALESSANDROSCOLA.COM *************** ( ********************************************* ***********************************************************************Y ""9)"LA TORRE DI HANOI" 6)"BY ALESSANDRO SCOLA (C)2024"& 8)"WWW.ALESSANDROSCOLA.COM"0 6)"GIOCA ALLA TORRE DI HANOI": 6)"O FALLA RIS *****************************************************************n 53280,15: 53281,0: 646,1: COLORE SFONDO,BORDO SCRITTE 53269,0: SPEGNE TUTTI GLI SPRITES EVENTUALMENTE VISIBILI (44)64 520 "ATTENZIONE!!" "PER ESEGUI 5: BANCO MEMORIA DI PARTENZA PER GLI SPRITE 245E LEGGE I DATA PER I DISCHI CHE UTILIZZEROW SN0 DM1 1862,56SN: VISUALIZZA CONTO ALLA ROVESCIA 2040SN,BSN: SETTA BANCO DI MEMORIA PER OGNI SPRITE I0 62 A: 64BDM): STATO PRESENZA DEI PIOLI SU PIOLO 1, DA 1 A 7bJ P2(DM): STATO PRESENZA DEI PIOLI SU PIOLO 2, DA 1 A 7T P3(DM): STATO PRESENZA DEI PIOLI SU PIOLO 3, DA 1 A 7^X176:X2156:X3236: COORDINATE X DEGLI SPRITES SU PIOLIhY060: Y MIMIFONDO,BORDO SCRITTE,D3:"QUANTI DISCHI ? (1-8)"V  "(JOYSTICK UP/DOWN)"*" <"4"": 31);D:J(56320)>J(56320)H((J 1)0 (J 2) AD :ALTEZZA SPRITE DI UN SINGOLO DISCO IN PIXELSK SN :SPRITE NUMBER SP :STACK POINTER (PER LA SOLUZIONE RICORSIVA)  V :REGISTRO DEL VIC DI PARTENZA PER GESTION SPRITES B :BANCO MEMORIA DI PARTENZA PE > GIOCARE <"6(GM$"G") " >VEDERE SOLUZIONE<"s(GM$"S") " > GIOCARE <"(GM$"S") " >VEDERE SOLUZIONE<" "(JOYSTICK UP/DOWNLTO SU PIOLO 16 P2 :PESO DISCO IN ALTO SU PIOLO 2d P3 :PESO DISCO IN ALTO SU PIOLO 3 P1(DM) :SITUAZIONE PESI DISCHI SU PIOLO 1 P2(DM) :SITUAZIONE PESI DISCHI SU PIOLO 2 P3(DM) :SITUAZIONE PESI DISCHI SU PIOLO D:P1(I)I: I'.P11:P20:P30: PESO DEL DISCO IN ALTO SU UN DATO PIOLOh8Q1D:Q20:Q30: Q1, Q2, Q3 = QUANTI DISCHI HA CIASCUN PIOLOB POSIZIONA GLI SPRITES DEI DISCHI UNO SULL'ALTRO SU PIOLO 1L DISEGNA LA BASE DEL GIOCOVI0: VARI***************************h 2 ******************** VARIABILI PRINCIPALI ************************* < SD :SPRITE DEFINITI (SI/NO) F DM :NUMERO DICHI MASSIMI CHE IL PROGRAMMA GESTISCE P D :NUMERO DISCHI SCELTI DAL GIOOLVERE AL TUO"D 6)"COMMODORE 64 CON IL METODO"2N 6)"RICORSIVO."CX SD1 730eb ***************************l * RIDEFINISCE GLI SPRITES *v *************************** " INIZIALIZZAZIONE SPRITES, ATTENDI..."B24RE QUESTO PROGRAMMA"1 "DEVI PRIMA ESEGUIRE IL SEGUENTE COMANDO:"_ "POKE 43,1:POKE 44,64:POKE 16384,0" "POI RICARICA IL PROGRAMMA DA DISCO" "CON ,8 E NON CON ,8,1 !! " "ALLA FINE ESEGUILO CON IL COMANDO RUN"2(SN64)I,A: I SNSD1: SPRITES DEFINITI& """l " PREMI FIRE IN PORTA 2 PER GIOCARE "((56320) 16)0 780: ATTENTE PRESSIONE FIRE 760  53269,0: 53280,15: 53281,0: 646,1: COLORE SNA (PUNTO PIU IN ALTO QUANDO MUOVO DISCO)arY9168: Y MASSIMA (COORD Y PPUTNO DI APPOGGIO DEI DISCHI AL PIANO)|AD12: ALTEZZA DISCO IN PIXELS(SPRITE ESPANSO =6 X 2 = 12)V53248: REGISTRO DEL VIC DI PARTENZA PER GESTION SPRITES/ *******0 (J 16)0) 830R(D7 (J 1)0) DD17\(D2 (J 2)0) DD1Mf(J 16)0 910ep I1 50:I: 820z FOR I=1 TO 25:NEXT I 56320,255: 820GM$"G": "" 56320,255(GM$"G") " R GLI SPRITEO ************************************************************************" ************************************************************************,SD0: SPRITES NON ANCORA DEFINITI6DM8: FINO A 8 DISCHI MASSIMO%@ P1( )" 56320,255:J(56320)$(GM$"S" (J 1)0) GM$"G": 920O(GM$"G" (J 2)0) GM$"S": 920f(J 16)0 1040y I1 50: I 980 MEMORIZZA IN UN ARRAY LO STATO PRESENZA DISCHI PESATI SU PIOLO 1$ I1 3/ Q1,Q2,Q3 :NUMERO DISCHI PRESENTI SU OGNI PIOLOh X1,X2,X3 :COORDINATE X DEGLI SPRITES SU OGNI PIOLO Y0 :COORDINATA Y MINIMA SPRITES (IL PUNTO PIU IN ALTO) Y9 :COORDINATA Y MASSIMA SPRITES (IL PUNTO PIU IN BASSO)- ABILE OFFSET RESGISTRI SPRITES)`OC0: OFFFSET COLORE PER SALTARE IL NUMERO 8^j SND1 0 1: SETTA POSIZIONE X E Y DISCHIt V(SN2),X1:II1: V((SN2)1),Y9((I1)AD2)~II1 (SN4)7 OC1: PER SALTARE IL COLORE GIALLOCATORE PER LA PARTITAI Z MM :NUMERO MOSSE MINIME PER VINCERE = 2^D-1t d PI :PIOLO INIZIALE SELEZIONATO n PF :PIOLO FINALE SELEZIONATO x PC :PIOLO CORRENTE (SELETTORE PIOLO DA JOYSTICK) P1 :PESO DISCO IN AAR HANOI01 2ALOADERHANOINHANOI RECURSIONHANOI-4MHANOI-13B HANOI-14BHANOI-15CHANOI-16EHANOI-8B HANOI-9A1 43,1: 44,64: 16384,0-"HANOI",8  A1:B2:C3: (147)T "QUANTI DISCHI";D: "SI RISOLVE CON "2D1" MOSSE"zND:SP49151: "INIZIO SP="SP:M0( SALVO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152: 2SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP ALLO STACKJ nC(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1x x PRINT "RITORNO DALLA RICORSIONE RAMO 1"~ ELSE (N>1): RAMO 2 NN1 SALVO LE VARIABILI NELLO STACK: SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SAMBIO A CON B HANOI($N, $B, $A ,$C);& 80i RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1  PRINT "RITORNO DALLA RICORSIONE RAMO 2" A:SPSP1: SP,B:SR GLI SPRITEOF ************************************************************************F" ************************************************************************F,SD0: SPRITES NON ANCORA DEFINITIF6DM8: FINO A 8 DISCHI MASSIMO%G@ P1(NA (PUNTO PIU IN ALTO QUANDO MUOVO DISCO)aHrY9168: Y MASSIMA (COORD Y PPUTNO DI APPOGGIO DEI DISCHI AL PIANO)H|AD12: ALTEZZA DISCO IN PIXELS(SPRITE ESPANSO =6 X 2 = 12)HV53248: REGISTRO DEL VIC DI PARTENZA PER GESTION SPRITES/I *******RE QUESTO PROGRAMMA"1J "DEVI PRIMA ESEGUIRE IL SEGUENTE COMANDO:"_J "POKE 43,1:POKE 44,64:POKE 16384,0"J "POI RICARICA IL PROGRAMMA DA DISCO"J "CON ,8 E NON CON ,8,1 !! "J "ALLA FINE ESEGUILO CON IL COMANDO RUN"J2KOLVERE AL TUO"LD 6)"COMMODORE 64 CON IL METODO"2LN 6)"RICORSIVO."CLX SD1 730eLb ***************************Ll * RIDEFINISCE GLI SPRITES *Lv ***************************L " INIZIALIZZAZIONE SPRITES, ATTENDI..."MB24(SN64)I,A: IM SNNSD1: SPRITES DEFINITI&N """lN " PREMI FIRE IN PORTA 2 PER GIOCARE "N((56320) 16)0 780: ATTENTE PRESSIONE FIREN 760N  53269,0: 53280,15: 53281,0: 646,1: COLORE S 0 (J 16)0) 830PR(D7 (J 1)0) DD17P\(D2 (J 2)0) DD1MPf(J 16)0 910ePp I1 50:I: 820Pz FOR I=1 TO 25:NEXT IP 56320,255: 820PGM$"G": ""P 56320,255P(GM$"G") "  > GIOCARE <"6Q(GM$"G") " >VEDERE SOLUZIONE<"sQ(GM$"S") " > GIOCARE <"Q(GM$"S") " >VEDERE SOLUZIONE<"Q "(JOYSTICK UP/DOWN,C/ < 80: 1A CHIAMATA HANOI($N, $A, $B ,$C);D F "FINE SP="SP: P N1 150: RAMO1:E' COME DIRE IF N=1 ALLORA EESGUI LE RIGHE SEGUENTI ZMM1: "RAMO 1 MOSSA"M": MUOVI #" A " -> #" C d RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DPSP1: SP,CA XB:BC:CX: SCAMBIO B CON C HANOI($N, $A, $C ,$B);J 80} MM1: "RAMO 2 MOSSA"M": MUOVI #" A " -> #" C SALVO LE VARIABILI NELLO STACK: SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C XA:AB:BX: SC AD :ALTEZZA SPRITE DI UN SINGOLO DISCO IN PIXELSKE SN :SPRITE NUMBERE SP :STACK POINTER (PER LA SOLUZIONE RICORSIVA)E V :REGISTRO DEL VIC DI PARTENZA PER GESTION SPRITESF B :BANCO MEMORIA DI PARTENZA PEDM): STATO PRESENZA DEI PIOLI SU PIOLO 1, DA 1 A 7bGJ P2(DM): STATO PRESENZA DEI PIOLI SU PIOLO 2, DA 1 A 7GT P3(DM): STATO PRESENZA DEI PIOLI SU PIOLO 3, DA 1 A 7G^X176:X2156:X3236: COORDINATE X DEGLI SPRITES SU PIOLIHhY060: Y MIMI*****************************************************************nI 53280,15: 53281,0: 646,1: COLORE SFONDO,BORDO SCRITTEI 53269,0: SPEGNE TUTTI GLI SPRITES EVENTUALMENTE VISIBILII (44)64 520I "ATTENZIONE!!"J "PER ESEGUI ***********************************************************************YK ""9)"LA TORRE DI HANOI"K 6)"BY ALESSANDRO SCOLA (C)2024"K& 8)"WWW.ALESSANDROSCOLA.COM"K0 6)"GIOCA ALLA TORRE DI HANOI"K: 6)"O FALLA RIS5: BANCO MEMORIA DI PARTENZA PER GLI SPRITE 245EM LEGGE I DATA PER I DISCHI CHE UTILIZZEROWM SN0 DM1M 1862,56SN: VISUALIZZA CONTO ALLA ROVESCIAM 2040SN,BSN: SETTA BANCO DI MEMORIA PER OGNI SPRITEM I0 62M A: 64B FONDO,BORDO SCRITTE,OD3:"QUANTI DISCHI ? (1-8)"VO  "(JOYSTICK UP/DOWN)"O*" <"O4"": 31);D:J(56320)O>J(56320)OH((J 1)0 (J 2) )"Q 56320,255:J(56320)$R(GM$"S" (J 1)0) GM$"G": 920OR(GM$"G" (J 2)0) GM$"S": 920fR(J 16)0 1040yR I1 50: IR 980RR MEMORIZZA IN UN ARRAY LO STATO PRESENZA DISCHI PESATI SU PIOLO 1R$ I1 ABILE OFFSET RESGISTRI SPRITES)T`OC0: OFFFSET COLORE PER SALTARE IL NUMERO 8^Tj SND1 0 1: SETTA POSIZIONE X E Y DISCHITt V(SN2),X1:II1: V((SN2)1),Y9((I1)AD2)T~II1T (SN4)7 OC1: PER SALTARE IL COLORE GIALLO N ALTEZZAV *************************************************MV *************************************************VMM2D1:M1: MM=NUMERO MOSSE MINIME X RISOLVERE, M=NUMERO MOSSAV SPOSTA IL DISCO PIU IN ALTO DAL PIOLO SELEZIONATOV  : "FAI LA MOSSA N."(M)XF56145,1:56155,1:56165,1*XPPI0:PF0: PIOLO INIZIO,FINEKXZ(PC1) 1872,62:1874,60lXd(PC1) 1882,32:1884,32Xn(PC1) 1892,32:1894,32Xx(PC1) 1919,32:1927,32X(PC2) 1872,32:1874,332:1874,32Y(PC4) 1882,32:1884,32Z(PC4) 1892,32:1894,32:Z(PC4) 1919,62:1927,60IZJ(56320)Z((J 4)0 (J 8)0 (J 16)0) (J 2)0 (J 1)0 1530Z(J 4)0 PC1 PCPC1: JOY A SINISTRA0 PI2: 5150:1670: SELEZIONO P20\T(J 16)0 PC2 PI2 PI0: 5150:1670: DESELEZIONO P2q\^(J 16)0 PC3 PI0 PI3: 5150:1670: SELEZIONO P3\h(J 16)0 PC3 PI3 PI0: 5150:1670: DESELEZIONO P3\r(J 16)0 3) 56165,5: ""15)"DA PIOLO 3"] 1370(^ PI1 PF2 Q10 (P20 P2P1) 1920Y^ PI1 PF3 Q10 (P30 P3P1) 2210^ PI2 PF1 Q20 (P10 P1P2) 2490^ PI2 PF3 Q20 (P30 P3P2) 2770^  S24,15_ S1,8: S0,0: LOW FREQUENCY NOTE`& S5,0: S6,240$`0 S4,65: PULSE WAVE ON4`: PW1 15C`D 53280,PWy`N S3,PW: S2,0: SWEEP HIGH BYTE OF PULSE WIDTH`X T1 40: T`b PW`l S4,64: PULSE OFF`v "ALLO SPRITES P1-1a Y(V1(2(P11))) Y0 2b (V1(2(P11))),Y: SOLLEVO DISCO"b YCb X(V(2(P11))) X2 2nb (V(2(P11))),X: SPOSTO DISCO A DXvb Xb APPOGGIO DISCO:b Y1= COORD Y DI PARTENZA Y2 = COORD Y DAZIONE 2cH IQ21 1 1:P2(I)P2(I1): I: SCALO IN ALTO I PESIdRP2(1)P1:P2P1:Q2Q21Ld\ AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1df Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN BASSO I PESIdpP1(Q1)0:Q1Q11dz Q11 P1 D:P1(I)I: I'S.P11:P20:P30: PESO DEL DISCO IN ALTO SU UN DATO PIOLOhS8Q1D:Q20:Q30: Q1, Q2, Q3 = QUANTI DISCHI HA CIASCUN PIOLOSB POSIZIONA GLI SPRITES DEI DISCHI UNO SULL'ALTRO SU PIOLO 1SL DISEGNA LA BASE DEL GIOCOSVI0: VARIU 53287SN,SN4OC: SETTA I COLORI DEI DISCHIU SNIU ABILITA SPRITES E ESPANDILI IN LARGHEZZA E ALTEZZAlUVA0: N0 D1:VAVA(2N):U 53269,VA: ABILITA SPRITESU 53277,VA: ESPANSIONE IN LARGHEZZAU 53271,VA: ESPANSIONE I"SI RISOLVE IN "(MM)" MOSSE."2W  646,1: 53280,15: "SI RISOLVE IN "(MM)" MOSSE."YW 3780: DISEGNA I PIOLI E LA BASEnW GM$"S" 3890W( GM$="G" GIOCAREW2PI0:PF0:PC1: PIOLO INIZIO,FINE,CORRENTEW< 646,1: 214,2: 587322X(PC2) 1882,62:1884,60Y(PC2) 1892,32:1894,322Y(PC2) 1919,32:1927,32SY(PC3) 1872,32:1874,32tY(PC3) 1882,32:1884,32Y(PC3) 1892,62:1894,60Y(PC3) 1919,32:1927,32Y(PC4) 1872,Z(J 8)0 PC3 PCPC1: JOY A DESTRA["(J 2)0 PC4: GIU.[,(J 1)0 PC2: SUo[6(J 16)0 PC1 PI0 PI1: 5150:1670: SELEZIONO P1[@(J 16)0 PC1 PI1 PI0: 5150: DESELEZIONO P1[J(J 16)0 PC2 PI PC4 410]|(J 16)0 PI0 PCPI PFPC: 1720*](PI0) 56145,1:56155,1:56165,1T](PI0) ""15)" "](PI1) 56145,5: ""15)"DA PIOLO 1"](PI2) 56155,5: ""15)"DA PIOLO 2"](PIPI3 PF1 Q30 (P10 P1P3) 3050_ PI3 PF2 Q30 (P20 P2P3) 3330W_ 53280,2: "* MOSSA NON POSSIBILE *""_ FOR I=1 TO 255:NEXT I:FOR I=1 TO 255:NEXT I_ ERROR SOUND_S54272: I0 24: SI,0: I: ": 53280,15: 1340!a ******************************************Ra * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 2 *a ******************************************a P1 = VALORE DEL DISCO PIU IN ALTO,CHE CORRISPONDE  I ARRIVO DELLO SPRITEcY1(V1(2(P11))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO1c P20 Y2Y9: 2070Cc Y2Y9(ADQ2)Wc YY1 Y2 2pc  (V1(2(P11))),Yxc* Yc4 4200: RIPRODUCI SUONOc> AGGIORNO PESO PILA DI DESTIN P1(1)d Q10 P1(1)0:P10d GM$"G" 3590e: ELSE IF GM$="S"4e ******************************************ee * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 3 *e ******************************************e Y(V1(2(P11))) Y f$ Y2Y9(ADQ3): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOg. YY1 Y2 2 g8 (V1(2(P11))),Y(gB YEgL 4200: RIPRODUCI SUONOpgV AGGIORNO PESO PILA DI DESTINAZIONE 3g` IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESI $="S"h *******************************************i * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1 *Ii *******************************************mi Y(V1(2(P21))) Y0 2i (V1(2(P21))),Y: SOLLEVO DISCOi Yi X(V( 2630j< Y2Y9(ADQ1)jF YY1 Y2 2jP (V1(2(P21))),YjZ Ykd 4200: RIPRODUCI SUONO=kn AGGIORNO PESO PILA DI DESTINAZIONE 1}kx IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESIk P1(1)P2:P1P2:Q1Q11k AGGIORNO ************l * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 3 *m *******************************************:m Y(V1(2(P21))) Y0 2cm (V1(2(P21))),Y: SOLLEVO DISCOkm Ym X(V(2(P21))) X3 2m (V(2(P21))),X:nh (V1(2(P21))),Ynr Yn| 4200: RIPRODUCI SUONO o AGGIORNO PESO PILA DI DESTINAZIONE 3Io IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESIdo P3(1)P2:P3P2:Q3Q31o AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2o Q2LO 3 A PIOLO 1 *p ******************************************q Y(V1(2(P31))) Y0 2,q (V1(2(P31))),Y: SOLLEVO DISCO4q YVq& X(V(2(P31))) X1 2q0 (V(2(P31))),X: SPOSTO DISCO A DXq: XqD APPOGGIO DISORNO PESO PILA DI DESTINAZIONE 1r IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESIs P1(1)P3:P1P3:Q1Q11Gs AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3s Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIs P3(Q3)0: Y(V1(2(P31))) Y0 2t* (V1(2(P31))),Y: SOLLEVO DISCOt4 Yu> X(V(2(P31))) X2 22uH (V(2(P31))),X: SPOSTO DISCO A SX:uR XPu\ APPOGGIO DISCO:zuf Y1= Y DI PARTENZA Y2 = Y DI ARRIVOup Y1(V1(2(P31)))I: SCALO IN BASSO I PESIv P2(1)P3:P2P3:Q2Q21v AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3;w Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIPw P3(Q3)0:Q3Q31gw Q31 P3P3(1)w Q30 P3(1)0:P30w56145,1:0 2e (V1(2(P11))),Y: SOLLEVO DISCOe Y f X(V(2(P11))) X3 27f (V(2(P11))),X: SPOSTO DISCO A DX?f XUf APPOGGIO DISCO:f Y1= Y DI PARTENZA Y2 = Y DI ARRIVOf Y1(V1(2(P11)))f P30 Y2Y9: 2350gj P3(1)P1:P3P1:Q3Q31gt AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1@h~ Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN ALTO I PESIUh P1(Q1)0:Q1Q11lh Q11 P1P1(1)h Q10 P1(1)0:P10h GM$"G" 3590h : ELSE IF GM2(P21))) X1 2i (V(2(P21))),X: SPOSTO DISCO A SXi X j APPOGGIO DISCO:Lj Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEj( Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOj2 P10 Y2Y9: PRESENZA DISCHI PILA DI PARTENZA 2 l Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESI"l P2(Q2)0:Q2Q219l Q21 P2P2(1)Sl Q20 P2(1)0:P20hl GM$"G" 3590l : ELSE IF GM$="S"l ******************************* SPOSTO DISCO A SXm" Xm, APPOGGIO DISCO:n6 Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITE`n@ Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOznJ P30 Y2Y9: 2910nT Y2Y9(ADQ3)n^ YY1 Y2 21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESIo P2(Q2)0:Q2Q21p Q21 P2P2(1)p Q20 P2(1)0:P204p GM$"G" 3590Lp : ELSE IF GM$="S"}p ******************************************p * SPOSTAMENTO DISCO DA PIOCO:qN Y1= Y DI PARTENZA Y2 = Y DI ARRIVOqX Y1(V1(2(P31)))qb P10 Y2Y9: 3190=rl Y2Y9(ADQ1): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOQrv YY1 Y2 2jr (V1(2(P31))),Yrr Yr 4200: RIPRODUCI SUONOr AGGIQ3Q31s Q31 P3P3(1)s Q30 P3(1)0:P30s GM$"G" 3590s : ELSE IF GM$="S".t ******************************************_t * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 2 *t ******************************************t  uz P20 Y2Y9: 3470u Y2Y9(ADQ2): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOv YY1 Y2 2v (V1(2(P31))),Y#v Y@v 4200: RIPRODUCI SUONOkv AGGIORNO PESO PILA DI DESTINAZIONE 2v IQ21 1 1:P2(I)P2(I1):  56155,1:56165,1: GM$"S" w DEBUGw Q3D 3750: HO FINITO IL GIOCO (Q3=D ?)x$ PRINT"":GOSUB 3500:POKE 646,5:POKE 53280,5Yx. " ": 646,5: 53280,5x8" COMPLIMENTI,HAI RI VICTORY SOUNDy((56320) 16)0 410y 3720y "": 53269,0:yMM1: INCREMENTO MOSSE FATTEz 1340&z DISEGNO I PIOLI E LA BASETERMINA<?|PND:SP49151:A1:B2:C3:M0|Z SALVO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152: MOSSA "(M)": #"A$" -> #"B$: 1720} RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK-~C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1[~ PRINT "RITORNO DALLA RICORSIONE RAMO 1"a~z~ ELSE (N>1): RAMO 2~NN-> #"B$: 1720 SALVO LE VARIABILI NELLO STACK:"SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C.,XA:AB:BX: SCAMBIO A CON B HANOI($N, $B, $A ,$C);96 3970|@ RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACK76,128 GM$"S" ((56320) 16)0 410ʁ *******************Ё 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,08 0,0,0,0,0,0,0,0,0,0V 0,0,0,0,0,0,247,0,1,231~ 128,1,247,128,1,247,128,1,247 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,3,231,192,7,219 224,7,247,224,7,219,224,7,231,224 3,255,1928 0,0,0,0,0,0,0,0,0,0R 0,0,0,0,0,0,0,0,0,0l 0,0,0,0,0,0,0,0,0,0 0,0\ 248,31,199,248,31,251,248,31,199,248f 15,255,240p΅z 0,0,0,0,0,0,0,0,0,0腄 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0> 0,0,0,0,0,31,231,248,63,223i 252,63,199,252,63,219,252,63,231,252z 31 0,0,0,0,0,0,0,0,0,0. 0,0,0,0,0,0,0,0,0,08 0,0,0,0,0,0,0,0,0,0܇B 0,0,0,0,0,127,231,254,255,219 L 255,255,231,255,255,219,255,255,231,255V 127,255,254C` ********* VICTORY SOUND ********pjQ54272: I0 24: QI,0: I: Q24, 15: T Q1,34: Q0,164: Q4,17 T1 180: Tĉ Q4,16: T1 15: T Q1,51: Q0,230: Q4,17 T1 350: T  Q4,16 9 ************ SUONO BLEEP **************H( 54296,15W2 54277,17g< 54278,150wSOLTO IL GIOCO!"xB(MMM) " NEL NUMERO MINIMO DI MOSSE ("(MM)")"yL 646,1:(MMM) " HAI FATTO"(M)" MOSSE SU"(MM)" PREVISTE"7yV 1872,32: 1874,32Oy` 1882,32: 1884,32gyj 1892,32: 1894,32yt 1919,62: 1927,60y~ 4960:T "  "z "  "{ "  1  2  3  "M{  "  TERMINA  "}{ "  SPOSTA TUTTI I DISCHI SUL PIOLO #3 "{{(|dSPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C|n 3970: 1A CHIAMATA HANOI($N, $A, $B ,$C);}x 3610G} N1 4050: RAMO1:E' COME DIRE IF N=1 ESEGUI LE RIGHE SEGUENTIy}MM1:A$((A),2,1):B$((C),2,1):PIA:PFC} "1~ SALVO LE VARIABILI NELLO STACK:~SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C$XB:BC:CX: SCAMBIO B CON C HANOI($N, $A, $C ,$B);/ 3970aMM1:A$((A),2,1):B$((C),2,1):PIA:PFC "MOSSA "(M)": #"A$" JC(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1T PRINT "RITORNO DALLA RICORSIONE RAMO 2"^h *** SUONO DISCHI ***r54296,15*|54277,0954278,240H54272,100V54273,20e54276,129sT120:542,128& 0,255,00: 0,0,0,0,0,0,0,0,0,0ƂD 0,0,0,0,0,0,0,0,0,0N 0,0,0,0,0,0,0,0,0,0X 0,0,0,0,0,0,0,0,0,0b 0,0,0,0,0,1,231,128,3,219Bl 192,3,247,192,3,239,192,3,195,192Rv 1,255,128Xr 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,7,247,224,15,239҄  240,15,215,240,15,195,240,15,247,240 7,255,224 * 0,0,0,0,0,0,0,0,0,04 0,0,0,0,0,0,0,0,0,06> 0,0,0,0,0,0,0,0,0,0PH 0,0,0,0,0,0,0,0,0,0rR 0,0,0,0,0,15,199,240,31,223,255,248 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0Ά 0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0  0,0,0,0,0,63,195,252,127,2519 254,127,247,254,127,239,254,127,239,254J 63,255,252Pj 0,0,0,0,0,0,0,0,0,0$ 15t Q5,15: Q6,240~ Q1,25: Q0,243: Q4,17 T1 50: Tֈ Q4,16: T1 15: T Q1,25: Q0,243: Q4,17  T1 50: T% Q4,16: T1 15: TE Q1,25: Q0,243: Q4,17X T1 50: Tt Q4,16: T1 F 54273,100P 54272,100Z 54276,17d T1 12: Tn 54273,70Ȋx 54272,100ۊ T1 12: Tꊌ 54273,40 54272,100  T1 18: T 54276,16* 54276,000,243: Q4,17X T1 50: Tt Q4,16: T1  LA (C)2024"K 8)"WWW.ALESSANDROSCOLA.COM"AK" 6)"GIOCA ALLA TORRE DI HANOI"fK@ 6)"O FALLA RISOLVERE AL TUO"K^ 6)"COMMODORE 64 CON IL METODO"K| 6)"RICORSIVO."K SD1 2080K ***************************K * RIDEFINIS CONTO ALLA ROVESCIA6M 2040SN,BSN: SETTA BANCO DI MEMORIA PER OGNI SPRITEEM I0 62dM A: 64B(SN64)I,A: ImM SNM SD1: SPRITES DEFINITIM* """M> " PREMI FIRE IN PORTA 2 PER GIOCARE "N\(  <"'O "": 31);D:J(56320)GO. (D7 (J 1)0) DD1gOL (D2 (J 2)0) DD1~Oj (J 16)0 2500O I1 25: IO 56320,255: 2320O GM$"G": ""O 56320,255 P (GM$"G") "JOYSTICK UP/DOWN)" Q 56320,255:J(56320)7Q (GM$"S" (J 1)0) GM$"G": 2530cQ (GM$"G" (J 2)0) GM$"S": 2530zQ (J 16)0 2890Q I1 50: IQ, 2710QJ Qh MEMORIZZA IN UN ARRAY LO STATO PRESENZA DISCHI PESATI SIOCO S I0: VARIABILE OFFSET RESGISTRI SPRITES>S: OC0: OFFFSET COLORE PER SALTARE IL NUMERO 8sSX SND1 0 1: SETTA POSIZIONE X E Y DISCHISv V(SN2),X1:II1: V((SN2)1),Y9((I1)AD2)S II1S (SN4)7 OC1: PER SALTARE1,VA: ESPANSIONE IN ALTEZZA*U *************************************************bU *************************************************U MM2D1:M1: MM=NUMERO MOSSE MINIME X RISOLVERE, M=NUMERO MOSSAU SPOSTA IL DISCO PIU IN ALTO DAL PIOLO646,1: 214,2: 58732: "FAI LA MOSSA N."(M)"WPI0:PF0: PIOLO INIZIO,FINECW (PC1) 1872,62:1874,60dW((PC1) 1882,32:1884,32WF(PC1) 1892,32:1894,32Wd(PC2) 1872,32:1874,32W(PC2) 1882,62:1884,60W(PC PI0 PI1:4390: SELEZIONO P1&Yr(J 16)0 PC1 PI1 PI0: DESELEZIONO P1`Y(J 16)0 PC2 PI0 PI2:4390: SELEZIONO P2Y(J 16)0 PC2 PI2 PI0:4390: DESELEZIONO P2Y(J 16)0 PC3 PI0 PI3:4390: SE" THEN 9910Z IF B$="F" THEN 9940[ (B$)49 (B$)55 4810A[ PI1 PF2 Q10 (P20 P2P1) 4900r[4 PI1 PF3 Q10 (P30 P3P1) 5740[R PI2 PF1 Q20 (P10 P1P2) 6550[p PI2 PF3 Q20 (P30 PRAMMA DA DISCO"JP "CON ,8 E NON CON ,8,1 !! "NJn "ALLA FINE ESEGUILO CON IL COMANDO RUN"TJJ ***********************************************************************J ""9)"LA TORRE DI HANOI"J 6)"BY ALESSANDRO SCOCE GLI SPRITES *L ***************************NL " INIZIALIZZAZIONE SPRITES, ATTENDI..."L0B245: BANCO MEMORIA DI PARTENZA PER GLI SPRITE 245LN LEGGE I DATA PER I DISCHI CHE UTILIZZEROLl SN0 DM1L 1862,56SN: VISUALIZZA(56320) 16)0 2200: ATTENTE PRESSIONE FIRENz 2140hN 53269,0: 53280,15: 53281,0: 646,1: COLORE SFONDO,BORDO SCRITTEND2:"QUANTI DISCHI ? (1-8)"N "(JOYSTICK UP/DOWN)"O" > GIOCARE <"HP (GM$"G") " >VEDERE SOLUZIONE<"P< (GM$"S") " > GIOCARE <"PZ (GM$"S") " >VEDERE SOLUZIONE<"Px "(U PIOLO 1Q I1 D:P1(I)I: I (V(2(P11))),X: SPOSTO DISCO A DXa\ Xbz APPOGGIO DISCO:=b Y1= Y DI PARTENZA Y2 = Y DI ARRIVOVbY1(V1(2(P11)))pb P30 Y2Y9: 6160bY2Y9(ADQ3): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOb Y:P1(I)P1(I1): I: SCALO IN ALTO I PESIcP1(Q1)0:Q1Q11 d Q11 P1P1(1)'d< Q10 P1(1)0:P10& Q3D 10060: HO FINITO IL GIOCO (Q3=D ?)!s\&"": 10150: 646,5: 53280,5fsz&" COMPLIMENTI,HAI RISOLTO IL GIOCO!"s&(MMM) " NEL NUMERO MINIMO DI MOSSE (" : 646,1t' I1 13t' "    "t( Iu( "  "Gu<( "  1  2  3  "wuZ( "  "}ux(u( ****************IAMATA HANOI($N, $A, $B ,$C);vh) 9790w) N1 10870: RAMO1:E' COME DIRE IF N=1 ESEGUI LE RIGHE SEGUENTI*w)MM1:A$((A),2,1):B$((C),2,1)Ww) "MOSSA "(M)": #"A$" -> #"B$: 4630w) RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DPSP1: SP,Cx*XB:BC:CX: SCAMBIO B CON C HANOI($N, $A, $C ,$B);x* 10630 y +MM1:A$((A),2,1):B$((C),2,1)6y*+ "MOSSA "(M)": #"A$" -> #"B$: 4630\yH+ SALVO LE VARIABILI NELLO STACK:yf+SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,SIONE RAMO 2"z,z8,zV, 0,0,0,0,0,0,0,0,0,0zt, 0,0,0,0,0,0,0,0,0,0z, 0,0,0,0,0,0,0,0,0,0 {, 0,0,0,0,0,0,0,0,0,0){, 0,0,0,0,0,0,247,0,1,231Q{, 128,1,247,128,1,247,128,1,247,128_{ - 0,255,0e{(-{F- 0,0,0,0,0,0,0,0,0,0{d- 0,0,0,0,0,0,0,0|. 0,0,0,0,0,3,231,192,7,219|. 224,7,247,224,7,219,224,7,231,224|. 3,255,192|/ }&/ 0,0,0,0,0,0,0,0,0,0%}D/ 0,0,0,0,0,0,0,0,0,0?}b/ 0,0,0,0,0,0,0,0,0,0Y}/ 0,0,0,0,0,0,0,0,0,0z}/ 0,0,0,0,0,7,247,224,15,239}/ 240 ~0~1 0,0,0,0,0,0,0,0,0,0~$1 0,0,0,0,0,0,0,0,0,0~B1 0,0,0,0,0,0,0,0,0,0~`1 0,0,0,0,0,0,0,0,0,0~1 0,0,0,0,0,31,231,248,63,223<1 252,63,199,252,63,219,252,63,231,252M1 31,255,248S1m1 0,0,0,0,0,0,0,0,0,02 0,0,0,0,0,0,0,0,0,022 0,0,0,0,0,0,0,0,0,0P2 0,0,0,0,0,0,0,0,0,0n2 0,0,0,0,0,63,195,252,127,251 2 254,127,247,254,127,239,254,127,239,2542 63,255,252#2=2 0,0,0,0,0,0,0,0,0,0W3 0,0,0,0,0,0,0,0,0,0q"3 0,0,0,0,0,0,0,0,0,0@3 0,0,0,PIOLO 2 *oP# ******************************************on# Y(V1(2(P31))) Y0 2'p# (V1(2(P31))),Y: SOLLEVO DISCO/p# YQp# X(V(2(P31))) X2 2|p# (V(2(P31))),X: SPOSTO DISCO A SXp$ Xp"$ APPOGGIO DISCO:p@% IQ21 1 1:P2(I)P2(I1): I: SCALO IN BASSO I PESIqN%P2(1)P3:P2P3:Q2Q21%rl% AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3hr% Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESI}r%P3(Q3)0:Q3Q31r% Q31 P3P3(1)r%(MM)")"s& 646,1:(MMM) " HAI FATTO"(M)" MOSSE SU"(MM)" PREVISTE"t&((56320) 16)0 1120t& 9940$t' A$"S" 2290:t.' "": 53269,0:]tL'MM1: INCREMENTO MOSSE FATTEhtj' 3790t' DISEGNO I PIOLI E LA BASEt' ""*******u( * SOLUZIONE RICORSIVA:*u( ***********************u(ND:SP49151:A1:B2:C3:M0>v) SALVO LE VARIABILI NELLO STACK A PARTIRE DALLA LOCAZIONE 49152:~v,)SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,CvJ) 10630: 1A CHALLO STACKw)C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1 x* PRINT "RITORNO DALLA RICORSIONE RAMO 1"x:*+xX* ELSE (N>1): RAMO 25xv*NN1[x* SALVO LE VARIABILI NELLO STACK:x*SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SB:SPSP1: SP,Cy+XA:AB:BX: SCAMBIO A CON B HANOI($N, $B, $A ,$C);y+ 10630%z+ RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKiz+C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1z+ PRINT "RITORNO DALLA RICOR0,0,0,0,0,0,0,0,0{- 0,0,0,0,0,0,0,0,0,0{- 0,0,0,0,0,0,0,0,0,0{- 0,0,0,0,0,1,231,128,3,219|- 192,3,247,192,3,239,192,3,195,192%|- 1,255,128+|.E|6. 0,0,0,0,0,0,0,0,0,0_|T. 0,0,0,0,0,0,0,0,0,0y|r. 0,0,0,0,0,0,0,0,0,0|. 0,0,0,,15,215,240,15,195,240,15,247,240}/ 7,255,224}/}0 0,0,0,0,0,0,0,0,0,0}40 0,0,0,0,0,0,0,0,0,0 ~R0 0,0,0,0,0,0,0,0,0,0#~p0 0,0,0,0,0,0,0,0,0,0E~0 0,0,0,0,0,15,199,240,31,223p~0 248,31,199,248,31,251,248,31,199,248~0 15,255,240u0,0,0,0,0,0,0^3 0,0,0,0,0,127,231,254,255,219݀|3 255,255,231,255,255,219,255,255,231,2553 127,255,2540,0,0,0,0,31,231,248,63,223<1 252,63,199,252,63,219,252,63,231,252M1 31,255,248S1m1 0,0,0,0,0,0,0,0,0,02 0,0,0,0,0,0, @D@ *************** LA TORRE DI HANOY ***************@( *************** BY ALESSANDRO SCOLA 2024 ***************@F *************** WWW.ALESSANDROSCOLA.COM ***************Ad ********************************************* CATORE PER LA PARTITAIB MM :NUMERO MOSSE MINIME PER VINCERE = 2^D-1wB P1 :PESO DISCO IN ALTO SU PIOLO 1B6 P2 :PESO DISCO IN ALTO SU PIOLO 2BT P3 :PESO DISCO IN ALTO SU PIOLO 3Cr P1(DM) :SITUAZIONE PESI DISCHI IMA SPRITES (IL PUNTO PIU IN ALTO)_D& Y9 :COORDINATA Y MASSIMA SPRITES (IL PUNTO PIU IN BASSO)DD AD :ALTEZZA SPRITE DI UN SINGOLO DISCO IN PIXELSDb SN :SPRITE NUMBERD SP :STACK POINTER (PER LA SOLUZIONE RICORSIVA)*************************4FSD0: SPRITES NON ANCORA DEFINITIWF4DM8: FINO A 8 DISCHI MASSIMOFR P1(DM): STATO PRESENZA DEI PIOLI SU PIOLO 1, DA 1 A 7Fp P2(DM): STATO PRESENZA DEI PIOLI SU PIOLO 2, DA 1 A 7G P3(DM): STATO PRESENZA DEXELS(SPRITE ESPANSO =6 X 2 = 12)OH$V53248: REGISTRO DEL VIC DI PARTENZA PER GESTION SPRITESHB ************************************************************************H` 53280,15: 53281,0: 646,1: COLORE SFONDO,BORDO SCRITTEI~ 53269,0: RAMMA DA DISCO"JP "CON ,8 E NON CON ,8,1 !! "NJn "ALLA FINE ESEGUILO CON IL COMANDO RUN"TJJ ***********************************************************************J ""9)"LA TORRE DI HANOI"J 6)"BY ALESSANDRO SCOCE GLI SPRITES *L ***************************NL " INIZIALIZZAZIONE SPRITES, ATTENDI..."L0B245: BANCO MEMORIA DI PARTENZA PER GLI SPRITE 245LN LEGGE I DATA PER I DISCHI CHE UTILIZZEROLl SN0 DM1L 1862,56SN: VISUALIZZA (56320) 16)0 2200: ATTENTE PRESSIONE FIRENz 2140hN 53269,0: 53280,15: 53281,0: 646,1: COLORE SFONDO,BORDO SCRITTEND2:"QUANTI DISCHI ? (1-8)"N "(JOYSTICK UP/DOWN)"O"  <"'O "": 31);D:J(56320)6O J(56320)kO ((J 1)0 (J 2)0 (J 16)0) 2321O. (D7 (J 1)0) DD1OL (D2 (J 2)0) DD1OQ (J 16)0 2500OV I1 50:I: 2320O  FOR I=1 TO 25:NEXT I P 56320,255: 2320P GM$"G": ""/P 56320,255nP (GM$"G") " > GIOCARE <"P (GM$"G") " >VEDERE SOLUZIONE<"P< (GM$"S") " > GI***************************hA ******************** VARIABILI PRINCIPALI *************************A SD :SPRITE DEFINITI (SI/NO)A DM :NUMERO DICHI MASSIMI CHE IL PROGRAMMA GESTISCEB D :NUMERO DISCHI SCELTI DAL GIO SU PIOLO 17C P2(DM) :SITUAZIONE PESI DISCHI SU PIOLO 2iC P3(DM) :SITUAZIONE PESI DISCHI SU PIOLO 3C Q1,Q2,Q3 :NUMERO DISCHI PRESENTI SU OGNI PIOLOC X1,X2,X3 :COORDINATE X DEGLI SPRITES SU OGNI PIOLOD Y0 :COORDINATA Y MIN6E V :REGISTRO DEL VIC DI PARTENZA PER GESTION SPRITESoE B :BANCO MEMORIA DI PARTENZA PER GLI SPRITEE ************************************************************************ F ***********************************************I PIOLI SU PIOLO 3, DA 1 A 7LGX176:X2156:X3236: COORDINATE X DEGLI SPRITES SU PIOLIGY060: Y MIMINA (PUNTO PIU IN ALTO QUANDO MUOVO DISCO)GY9168: Y MASSIMA (COORD Y PPUTNO DI APPOGGIO DEI DISCHI AL PIANO)HAD12: ALTEZZA DISCO IN PISPEGNE TUTTI GLI SPRITES EVENTUALMENTE VISIBILI3I (44)64 1450II "ATTENZIONE!!"pI "PER ESEGUIRE QUESTO PROGRAMMA"I "DEVI PRIMA ESEGUIRE IL SEGUENTE COMANDO:"I "POKE 43,1:POKE 44,64:POKE 16384,0"I2 "POI RICARICA IL PROGLA (C)2024"K 8)"WWW.ALESSANDROSCOLA.COM"AK" 6)"GIOCA ALLA TORRE DI HANOI"fK@ 6)"O FALLA RISOLVERE AL TUO"K^ 6)"COMMODORE 64 CON IL METODO"K| 6)"RICORSIVO."K SD1 2080K ***************************K * RIDEFINIS CONTO ALLA ROVESCIA6M 2040SN,BSN: SETTA BANCO DI MEMORIA PER OGNI SPRITEEM I0 62dM A: 64B(SN64)I,A: ImM SNM SD1: SPRITES DEFINITIM* """M> " PREMI FIRE IN PORTA 2 PER GIOCARE "N\( 2(P11))),Y_" Y_@ AGGIORNO PESO PILA DI DESTINAZIONE 2>`^ IQ21 1 1:P2(I)P2(I1): I: SCALO IN ALTO I PESIY`|P2(1)P1:P2P1:Q2Q21` AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1` Q11 : I1 Q11:P1(I)P1(I1): I: SCAL OCARE <"+QZ (GM$"S") " >VEDERE SOLUZIONE<"UQx "(JOYSTICK UP/DOWN)"pQ 56320,255:J(56320)Q (GM$"S" (J 1)0) GM$"G": 2530Q (GM$"G" (J 2)0) GM$"S": 2530Q (J 16)0 2 UN PIOLO#S POSIZIONA GLI SPRITES DEI DISCHI UNO SULL'ALTRO SU PIOLO 1CS DISEGNA LA BASE DEL GIOCOpS I0: VARIABILE OFFSET RESGISTRI SPRITESS: OC0: OFFFSET COLORE PER SALTARE IL NUMERO 8SX SND1 0 1: SETTA POSIZIONE X E Y DISCHI 1:VAVA(2N):UH 53269,VA: ABILITA SPRITES0Uf 53277,VA: ESPANSIONE IN LARGHEZZAWU 53271,VA: ESPANSIONE IN ALTEZZAU *************************************************U ************************************************* V MM2D1SEVt GM$"S" 10420W GM$="G" GIOCARE0WPI0:PF0:PC1: PIOLO INIZIO,FINE,CORRENTEeW 646,1: 214,2: 58732: "FAI LA MOSSA N."(M)WPI0:PF0: PIOLO INIZIO,FINEW (PC1) 1872,62:1874,60W((PC1) 1882,32:1884,32WF(0 (J 8)0 (J 16)0) 4120 )Y"(J 4)0 PC1 PCPC1: JOY A SINISTRAXY6(J 8)0 PC3 PCPC1: JOY A DESTRAYT(J 16)0 PC1 PI0 PI1:4390: SELEZIONO P1Yr(J 16)0 PC1 PI1 PI0: DESELEZIONO P1Z0 PCPI PFPC: 4630 [&(PI0) 56145,1:56155,1:56165,1$[D(PI1) 56145,4;[b(PI2) 56155,4R[(PI3) 56165,4][ 3850w[ IF A$="F" THEN 9910[ IF B$="F" THEN 9940[ PI1 PF2 Q10 (P20 P2P1) 4900[4 "* MOSSA NON POSSIBILE *""] I1 255: I: I1 255: IL] " ": 3610}]$ ******************************************]B * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 2 *]` ***************SCO A DX^2 X^P APPOGGIO DISCO:+_n Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEs_Y1(V1(2(P11))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO_ P20 Y2Y9: 5350_Y2Y9(ADQ2)_ YY1 Y2 2_ (V1(*************************a Y(V1(2(P11))) Y0 2"b (V1(2(P11))),Y: SOLLEVO DISCO*b YKb  X(V(2(P11))) X3 2vb> (V(2(P11))),X: SPOSTO DISCO A DX~b\ Xbz APPOGGIO DISCO:b Y1= Y DI PARTENZA Y2 = Y DI AR O IN BASSO I PESI`P1(Q1)0:Q1Q11` Q11 P1P1(1)a Q10 P1(1)0:P10*a0 GM$"G" 9730BaN: ELSE IF GM$="S"sal ******************************************a * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 3 *a *****************890Q I1 50: IQ, 2710RJ JRh MEMORIZZA IN UN ARRAY LO STATO PRESENZA DISCHI PESATI SU PIOLO 1dR I1 D:P1(I)I: IR P11:P20:P30: PESO DEL DISCO IN ALTO SU UN DATO PIOLOR Q1D:Q20:Q30: Q1, Q2, Q3 = QUANTI DISCHI HA CIASCTv V(SN2),X1:II1: V((SN2)1),Y9((I1)AD2)T II1NT (SN4)7 OC1: PER SALTARE IL COLORE GIALLOT 53287SN,SN4OC: SETTA I COLORI DEI DISCHIT SNT ABILITA SPRITES E ESPANDILI IN LARGHEZZA E ALTEZZAT* VA0: N0 D:M1: MM=NUMERO MOSSE MINIME X RISOLVERE, M=NUMERO MOSSAEV SPOSTA IL DISCO PIU IN ALTO DAL PIOLO SELEZIONATOoV "SI RISOLVE IN "(MM)" MOSSE."V8 646,1: 53280,15: "SI RISOLVE IN "(MM)" MOSSE."VV 10150: DISEGNA I PIOLI E LA BAPC1) 1892,32:1894,32 Xd(PC2) 1872,32:1874,32,X(PC2) 1882,62:1884,60MX(PC2) 1892,32:1894,32nX(PC3) 1872,32:1874,32X(PC3) 1882,32:1884,32X(PC3) 1892,62:1894,60XJ(56320)X((J 4)(J 16)0 PC2 PI0 PI2:4390: SELEZIONO P2>Z(J 16)0 PC2 PI2 PI0:4390: DESELEZIONO P2xZ(J 16)0 PC3 PI0 PI3:4390: SELEZIONO P3Z(J 16)0 PC3 PI3 PI0:4390: DESELEZIONO P3Z(J 16)0 PI PI1 PF3 Q10 (P30 P3P1) 5740$\R PI2 PF1 Q20 (P10 P1P2) 6550U\p PI2 PF3 Q20 (P30 P3P2) 7360\ PI3 PF1 Q30 (P10 P1P3) 8170\ PI3 PF2 Q30 (P20 P2P3) 8980\ 53280,2:***************************)^~ P1 = VALORE DEL DISCO PIU IN ALTO,CHE CORRISPONDE ALLO SPRITES P1-1M^ Y(V1(2(P11))) Y0 2v^ (V1(2(P11))),Y: SOLLEVO DISCO~^ Y^ X(V(2(P11))) X2 2^ (V(2(P11))),X: SPOSTO DI RIVObY1(V1(2(P11)))b P30 Y2Y9: 61602cY2Y9(ADQ3): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOFc YY1 Y2 2_c. (V1(2(P11))),YgcL Ycj AGGIORNO PESO PILA DI DESTINAZIONE 3c IQ31 1 1:P3(I)P3(I1): 9730dx: ELSE IF GM$="S"e *******************************************9e * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1 *ke *******************************************e Y(V1(2(P21))) Y0 2e (V1(2(P21))),Y: SOLLEVO D ISCOf P10 Y2Y9: 6970fY2Y9(ADQ1)f: YY1 Y2 2gX (V1(2(P21))),Ygv YBg AGGIORNO PESO PILA DI DESTINAZIONE 1g IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESIgP1(1)P2:P1P2:Q1Q11g AGGIORNO PRE *********h * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 3 *i *******************************************?i Y(V1(2(P21))) Y0 2hi8 (V1(2(P21))),Y: SOLLEVO DISCOpiV Yit X(V(2(P21))) X3 2i (V(2(P21))),X: S (V1(2(P21))),Yj Yj AGGIORNO PESO PILA DI DESTINAZIONE 31k IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESILkP3(1)P2:P3P2:Q3Q31~k AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2k6 Q21 : I1 Q21:P2(I)P2(I1):*********************************lD Y(V1(2(P31))) Y0 2mb (V1(2(P31))),Y: SOLLEVO DISCOm Y>m X(V(2(P31))) X1 2im (V(2(P31))),X: SPOSTO DISCO A DXqm Xm APPOGGIO DISCO:m! Y1= Y DI PARTENZA Y2 P1(I1): I: SCALO IN BASSO I PESIn$"P1(1)P3:P1P3:Q1Q11oB" AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3Uo`" Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIjo~"P3(Q3)0:Q3Q31o" Q31 P3P3(1)o" Q30 P3(1)0:P30o"LEVO DISCOp# Yp# X(V(2(P31))) X2 2p# (V(2(P31))),X: SPOSTO DISCO A SXq$ Xq"$ APPOGGIO DISCO:Eq@$ Y1= Y DI PARTENZA Y2 = Y DI ARRIVO^q^$Y1(V1(2(P31)))xq|$ P20 Y2Y9: 9400q$Y2Y9(ADQ2): ALTRIMENTI Y DI I PARTENZA 3r% Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIr%P3(Q3)0:Q3Q31s% Q31 P3P3(1)/s% Q30 P3(1)0:P30As& GM$"S" Ms & DEBUGs>& Q3D 10060: HO FINITO IL GIOCO (Q3=D ?)s\&"": 10150: 646,5: 53280,5sz&" COMPLIMENTI,HAI RISOLTO IL GIOCO!"!t&(MMM) " NEL NUMERO MINIMO DI MOSSE ("(MM)")"ht& 646,1:(MMM) " HAI FATTO"(M)" MOSSE SU"(MM)" PREVISTE"t&((56320) 16)0 1120t& 9940t' I: SCALO IN BASSO I PESIcP3(1)P1:P3P1:Q3Q31d AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1bd Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN ALTO I PESIwdP1(Q1)0:Q1Q11d Q11 P1P1(1)d< Q10 P1(1)0:P10dZ GM$"G"ISCOe, YeJ X(V(2(P21))) X1 2 fh (V(2(P21))),X: SPOSTO DISCO A SXf X+f APPOGGIO DISCO:nf Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEfY1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DSENZA DISCHI PILA DI PARTENZA 2h  Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESI'h*P2(Q2)0:Q2Q21>hH Q21 P2P2(1)Xhf Q20 P2(1)0:P20mh GM$"G" 9730h: ELSE IF GM$="S"h **********************************POSTO DISCO A SXi Xi APPOGGIO DISCO:j Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEej Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOj( P30 Y2Y9: 7780jFY2Y9(ADQ3)jd YY1 Y2 2j I: SCALO IN ALTO I PESIkTP2(Q2)0:Q2Q21kr Q21 P2P2(1)l Q20 P2(1)0:P20l GM$"G" 97304l: ELSE IF GM$="S"el ******************************************l * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 1 *l& *********= Y DI ARRIVOm4!Y1(V1(2(P31)))mR! P10 Y2Y9: 8590%np!Y2Y9(ADQ1): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO9n! YY1 Y2 2Rn! (V1(2(P31))),YZn! Yn! AGGIORNO PESO PILA DI DESTINAZIONE 1n" IQ11 1 1:P1(I) GM$"G" 9730o": ELSE IF GM$="S"o# *******************************************p2# * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 2 *[pP# ******************************************pn# Y(V1(2(P31))) Y0 2p# (V1(2(P31))),Y: SOL ARRIVO E' APPENA SOPRA DISCOq$ YY1 Y2 2q$ (V1(2(P31))),Yq$ Yr% AGGIORNO PESO PILA DI DESTINAZIONE 2Yr0% IQ21 1 1:P2(I)P2(I1): I: SCALO IN BASSO I PESItrN%P2(1)P3:P2P3:Q2Q21rl% AGGIORNO PRESENZA DISCHI PILA D A$"S" 2290t.' "": 53269,0:tL'MM1: INCREMENTO MOSSE FATTEtj' 3790 u' DISEGNO I PIOLI E LA BASEu' "": 646,1.u' I1 13Zu' "    "bu( Iu( "  " NELLO STACK A PARTIRE DALLA LOCAZIONE 49152:v,)SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C1wJ) 10630: 1A CHIAMATA HANOI($N, $A, $B ,$C);1): RAMO 2xv*NN1x* SALVO LE VARIABILI NELLO STACK:&y*SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C`y*XB:BC:CX: SCAMBIO B CON C HANOI($N, $A, $C ,$B);ly* 10630y +MM1:A$((A),2,1):B$( A RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKz+C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1,{+ PRINT "RITORNO DALLA RICORSIONE RAMO 2"2{,8{8,R{V, 0,0,0,0,0,0,0,0,0,0l{t, 0,0,0,0,0,0,0,0,0,0{, 0,0,0,0,0,0,0,0,0,0- 192,3,247,192,3,239,192,3,195,192|- 1,255,128|.|6. 0,0,0,0,0,0,0,0,0,0|T. 0,0,0,0,0,0,0,0,0,0}r. 0,0,0,0,0,0,0,0,0,0(}. 0,0,0,0,0,0,0,0,0,0H}. 0,0,0,0,0,3,231,192,7,219p}. 224,7,247,224,7,219,224,7,231,224}. 3,255,192},0~R0 0,0,0,0,0,0,0,0,0,0~p0 0,0,0,0,0,0,0,0,0,0~0 0,0,0,0,0,15,199,240,31,2230 248,31,199,248,31,251,248,31,199,2480 15,255,240061 0,0,0,0,0,0,0,0,0,0P$1 0,0,0,0,0,0,0,0,0,0jB1 0,0,0,0,0,0,0,0,0,0`1 0,0,0,0,0,0,0,0127,247,254,127,239,254,127,239,2542 63,255,2522Ҁ2 0,0,0,0,0,0,0,0,0,03 0,0,0,0,0,0,0,0,0,0"3 0,0,0,0,0,0,0,0,0,0 @3 0,0,0,0,0,0,0,0,0,0D^3 0,0,0,0,0,127,231,254,255,219r|3 255,255,231,255,255,219,255,255,231,2553 127PRITESJP ""9)"LA TORRE DI HANOI"EJn 6)"BY ALESSANDRO SCOLA (C)2024"iJ 8)"WWW.ALESSANDROSCOLA.COM"J 6)"GIOCA ALLA TORRE DI HANOI"J 6)"O FALLA RISOLVERE AL TUO"J 6)"COMMODORE 64 CON IL METODO"J 6)"RIC E UTILIZZEROL SN0 DM18L 1862,56SN: VISUALIZZA CONTO ALLA ROVESCIAtL 2040SN,BSN: SETTA BANCO DI MEMORIA PER OGNI SPRITEL0 I0 62LN A: 64B(SN64)I,A: ILl SNL " PREMI FIRE IN PORTA 2 PER GIOCARE "M(( 56320) 16)0 2020: ATTENTE PRESSIONE FIREM 1960hM 53269,0: 53280,15: 53281,0: 646,1: COLORE SFONDO,BORDO SCRITTEMD2:"QUANTI DISCHI ? (1-8)"M  "(JOYSTICK UP/DOWN)"N>"u<( "  1  2  3  "uZ( "  "ux(v( ***********************:v( * SOLUZIONE RICORSIVA:*Xv( ***********************yv(ND:SP49151:A1:B2:C3:M0v) SALVO LE VARIABILI((A),2,1):B$((C),2,1):PIA:PFCw) "MOSSA "(M)": #"A$" -> #"B$: 4630%x) RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKix)C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1x* PRINT "RITORNO DALLA RICORSION(C),2,1):PIA:PFCy*+ "MOSSA "(M)": #"A$" -> #"B$: 4630yH+ SALVO LE VARIABILI NELLO STACK:1zf+SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,Ckz+XA:AB:BX: SCAMBIO A CON B HANOI($N, $B, $A ,$C);wz+ 10630z+ RITORNO DALL{, 0,0,0,0,0,0,0,0,0,0{, 0,0,0,0,0,0,247,0,1,231{, 128,1,247,128,1,247,128,1,247,128{ - 0,255,0{(-|F- 0,0,0,0,0,0,0,0,0,0.|d- 0,0,0,0,0,0,0,0,0,0H|- 0,0,0,0,0,0,0,0,0,0b|- 0,0,0,0,0,0,0,0,0,0|- 0,0,0,0,0,1,231,128,3,219|/}&/ 0,0,0,0,0,0,0,0,0,0}D/ 0,0,0,0,0,0,0,0,0,0}b/ 0,0,0,0,0,0,0,0,0,0}/ 0,0,0,0,0,0,0,0,0,0~/ 0,0,0,0,0,7,247,224,15,239:~/ 240,15,215,240,15,195,240,15,247,240J~/ 7,255,224P~/j~0 0,0,0,0,0,0,0,0,0,0~40 0,0,0,0,0,0,0,0,0,0,0~1 0,0,0,0,0,31,231,248,63,2231 252,63,199,252,63,219,252,63,231,2521 31,255,24811 0,0,0,0,0,0,0,0,0,02 0,0,0,0,0,0,0,0,0,0622 0,0,0,0,0,0,0,0,0,0PP2 0,0,0,0,0,0,0,0,0,0sn2 0,0,0,0,0,63,195,252,127,2512 254, ,255,2540,0,0,0,0,31,231,248,63,2231 252,63,199,252,63,219,252,63,231,2521 31,255,24811 0,0,0,0,0,0,0,0,0,02 0,0,0,0,0,0,0,0,0,0622 0,0,0,0,0,0,0,0,0,0PP2 0,0,0,0,0,0,0,0,0,0sn2 0,0,0,0,0,63,195,252,127,2512 254,ORSIVO."&K" " INIZIALIZZAZIONE SPRITES, ATTENDI..."HK@ ***************************jK^ * RIDEFINISCE GLI SPRITES *K| ***************************KB245: BANCO MEMORIA DI PARTENZA PER GLI SPRITE 245K LEGGE I DATA PER I DISCHI CH *"\D "***********************"+\b I1 255: I: I1 255: I: 3430\\ ******************************************\ * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 2 *\ ******************************************] P CO: ^ Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITER^Y1(V1(2(P11))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOl^ P20 Y2Y9: 4930~^$Y2Y9(ADQ2)^B YY1 Y2 2^` (V1(2(P11))),Y^~ Y^ AGGIORNO  > GIOCARE <"HOj (GM$"G") " >VEDERE SOLUZIONE<"O (GM$"S") " > GIOCARE <"O (GM$"S") " >VEDERE SOLUZIONE<"O "(JO PIOLO 1P I1 D:P1(I)I: IYd 3610RY A$"F" 9520sY (A$)49 (A$)55 4300Y 214,4: 58732: "MUOVI DISCO A PIOLO # (F=FINE)";B$Y B$"F" 9550Y (B"1" Q30 (P10 P1P3) 7750![ A$"3" B$"2" Q30 (P20 P2P3) 8560\[ 53280,2: "***********************""[ "* *"[ "* MOSSA NON POSSIBILE *"[& "* 11_P Q11 P1P1(1)_n Q10 P1(1)0:P10 ` GM$"G" 9310!`: ELSE IF GM$="S"R` ******************************************` * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 3 *` ******************************************`" Y1 = VALORE DEL DISCO PIU IN ALTO,CHE CORRISPONDE ALLO SPRITES P1-1,] Y(V1(2(P11))) Y0 2U] (V1(2(P11))),Y: SOLLEVO DISCO]]4 Y~]R X(V(2(P11))) X2 2]p (V(2(P11))),X: SPOSTO DISCO A DX] X] APPOGGIO DIS PESO PILA DI DESTINAZIONE 2_ IQ21 1 1:P2(I)P2(I1): I: SCALO IN ALTO I PESI8_P2(1)P1:P2P1:Q2Q21j_ AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1_ Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN BASSO I PESI_2P1(Q1)0:Q1QYSTICK UP/DOWN)" P 56320,255:J(56320)7P (GM$"S" (J 1)0) GM$"G": 2350cP (GM$"G" (J 2)0) GM$"S": 2350zP< (J 16)0 2710PZ I1 50: IPx 2530P P MEMORIZZA IN UN ARRAY LO STATO PRESENZA DISCHI PESATI SU CO Rh I0: VARIABILE OFFSET RESGISTRI SPRITES>R OC0: OFFFSET COLORE PER SALTARE IL NUMERO 8sR SND1 0 1: SETTA POSIZIONE X E Y DISCHIR V(SN2),X1:II1: V((SN2)1),Y9((I1)AD2)R II1R (SN4)7 OC1: PER SALTARE IVA: ESPANSIONE IN ALTEZZA*T *************************************************bT *************************************************T* MM2D1:M1: MM=NUMERO MOSSE MINIME X RISOLVERE, M=NUMERO MOSSATH SPOSTA IL DISCO PIU IN ALTO DAL PIOLO SEU(PC1) 1872,62:1874,60V8(PC1) 1882,32:1884,328VV(PC1) 1892,32:1894,32YVt(PC2) 1872,32:1874,32zV(PC2) 1882,62:1884,60V(PC2) 1892,32:1894,32V(PC3) 1872,32:1874,32V(PC3) 1882,EZIONO P1XI(J 16)0 PC2 PI0 PI2:3920: SELEZIONO P2OXJ(J 16)0 PC2 PI2 PI0:3920: DESELEZIONO P2XK(J 16)0 PC3 PI0 PI3:3920: SELEZIONO P3XL(J 16)0 PC3 PI3 PI0:3920: DESELEZIONO P3XP(PI$)49 (B$)55 4300Z A$"1" B$"2" Q10 (P20 P2P1) 4480MZ6 A$"1" B$"3" Q10 (P30 P3P1) 5320ZT A$"2" B$"1" Q20 (P10 P1P2) 6130Zr A$"2" B$"3" Q20 (P30 P3P2) 6940Z A$"3" B$ DA PIOLO 2 A PIOLO 3 *gX *******************************************hv Y(V1(2(P21))) Y0 2Gh (V1(2(P21))),Y: SOLLEVO DISCOOh Yph X(V(2(P21))) X3 2h (V(2(P21))),X: SPOSTO DISCO A SXh  Xh* APPO (V1(2(P11))) Y0 2a@ (V1(2(P11))),Y: SOLLEVO DISCO a^ Y*a| X(V(2(P11))) X3 2Ua (V(2(P11))),X: SPOSTO DISCO A DX]a Xsa APPOGGIO DISCO:a Y1= Y DI PARTENZA Y2 = Y DI ARRIVOaY1(V1(2(P11)))a0 AGGIORNO PESO PILA DI DESTINAZIONE 3j8 IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESI+jVP3(1)P2:P3P2:Q3Q31]jt AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2j Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESIjP2(Q2 )P1:P3P1:Q3Q31b  AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1Ac> Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN ALTO I PESIVc\P1(Q1)0:Q1Q11mcz Q11 P1P1(1)c Q10 P1(1)0:P10c GM$"G" 9310c: ELSE IF GM$="S"ck Y(V1(2(P31))) Y0 2k (V1(2(P31))),Y: SOLLEVO DISCOk Yl X(V(2(P31))) X1 2Hl (V(2(P31))),X: SPOSTO DISCO A DXPl6 XflT APPOGGIO DISCO:lr Y1= Y DI PARTENZA Y2 = Y DI ARRIVOlY1(V1(2(P31) X1 2d (V(2(P21))),X: SPOSTO DISCO A SXd X e APPOGGIO DISCO:Me Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEe<Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOeZ P10 Y2Y9: 6550exm P1(1)P3:P1P3:Q1Q11m AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 34n Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIIn P3(Q3)0:Q3Q31`n Q31 P3P3(1)zn! Q30 P3(1)0:P30n4! GM$"G" 9310nR!: ELSE IF GM Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESIgP2(Q2)0:Q2Q21g Q21 P2P2(1)7g Q20 P2(1)0:P20Lg GM$"G" 9310dg: ELSE IF GM$="S"g *******************************************g: * SPOSTAMENTO DISCO P31))) X2 2oB" (V(2(P31))),X: SPOSTO DISCO A SXo`" Xo~" APPOGGIO DISCO:$p" Y1= Y DI PARTENZA Y2 = Y DI ARRIVO=p"Y1(V1(2(P31)))Wp" P20 Y2Y9: 8980p"Y2Y9(ADQ2): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOp#  YY1 Y2 2p2# (V1(2(P31))),YpP# Ypn# AGGIORNO PESO PILA DI DESTINAZIONE 28q# IQ21 1 1:P2(I)P2(I1): I: SCALO IN BASSO I PESISq#P2(1)P3:P2P3:Q2Q21q# AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3q# Q31 : I1 QGGIO DISCO:hH Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEDifY1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO^i P30 Y2Y9: 7360piY2Y9(ADQ3)i YY1 Y2 2i (V1(2(P21))),Yi Yi  P30 Y2Y9: 5740bNY2Y9(ADQ3): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO%bl YY1 Y2 2>b (V1(2(P11))),YFb Yqb AGGIORNO PESO PILA DI DESTINAZIONE 3b IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESIbP3(1)0:Q2Q21j Q21 P2P2(1)j Q20 P2(1)0:P20j  GM$"G" 9310k(: ELSE IF GM$="S"DkF ******************************************ukd * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 1 *k ****************************************** *******************************************d * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1 *Jd. *******************************************ndL Y(V1(2(P21))) Y0 2dj (V1(2(P21))),Y: SOLLEVO DISCOd Yd X(V(2(P21)))))l P10 Y2Y9: 8170mY2Y9(ADQ1): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOm YY1 Y2 21m (V1(2(P31))),Y9m& YdmD AGGIORNO PESO PILA DI DESTINAZIONE 1mb IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESIY2Y9(ADQ1)e YY1 Y2 2e (V1(2(P21))),Ye Y!f AGGIORNO PESO PILA DI DESTINAZIONE 1af IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESI|f,P1(1)P2:P1P2:Q1Q11fJ AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 2fh$="S"np! ****************************************** o! * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 2 *:o! ******************************************^o! Y(V1(2(P31))) Y0 2o! (V1(2(P31))),Y: SOLLEVO DISCOo" Yo$" X(V(2( MOSSA "(M)": #"A$" -> #"B$: 4120x) SALVO LE VARIABILI NELLO STACK:y)SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,CPy)XA:AB:BX: SCAMBIO A CON B HANOI($N, $B, $A ,$C);\y) 10210y* RITORNO DALLA RICORSIONE,RIPRISTINO LE VA 31:P3(I)P3(I1): I: SCALO IN ALTO I PESIq$P3(Q3)0:Q3Q31q"$ Q31 P3P3(1)r@$ Q30 P3(1)0:P30 r^$ GM$"S" ,r|$ DEBUG]r$ Q3D 9640: HO FINITO IL GIOCO (Q3=D ?)r$"": 9730: 646,5: 53280,5r$" 0,0,0,0,0,0,247,0,1,231zH+ 128,1,247,128,1,247,128,1,247,128zf+ 0,255,0z+z+ 0,0,0,0,0,0,0,0,0,0{+ 0,0,0,0,0,0,0,0,0,0-{+ 0,0,0,0,0,0,0,0,0,0G{+ 0,0,0,0,0,0,0,0,0,0g{, 0,0,0,0,0,1,231,128,3,219{8, 192,3,247,192,3,239,192,3, 2110s% "": 53269,0:s%MM1: INCREMENTO MOSSE FATTEs% 3550t% DISEGNO I PIOLI E LA BASEt& "": 646,1't & I1 13St>& "    "[t\& Itz& "  "t& "  |- 0,0,0,0,0,0,0,0,0,0|- 0,0,0,0,0,0,0,0,0,0|- 0,0,0,0,0,0,0,0,0,0|- 0,0,0,0,0,7,247,224,15,239}. 240,15,215,240,15,195,240,15,247,240/}6. 7,255,2245}T.O}r. 0,0,0,0,0,0,0,0,0,0i}. 0,0,0,0,0,0,0,0,0,0}. 0,0,0,0,0,0,0,0,0,0 ACK A PARTIRE DALLA LOCAZIONE 49152:u'SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,C*v' 10210: 1A CHIAMATA HANOI($N, $A, $B ,$C);5v' 9370|v' N1 10450: RAMO1:E' COME DIRE IF N=1 ESEGUI LE RIGHE SEGUENTIv(MM1:A$((A),2 48,63,223~/ 252,63,199,252,63,219,252,63,231,252~0 31,255,248~40~R0 0,0,0,0,0,0,0,0,0,0p0 0,0,0,0,0,0,0,0,0,00 0,0,0,0,0,0,0,0,0,050 0,0,0,0,0,0,0,0,0,0X0 0,0,0,0,0,63,195,252,127,2510 254,127,247,254,127,239,254,127,2 ( ELSE (N>1): RAMO 2w(NN1w( SALVO LE VARIABILI NELLO STACK:x)SPSP1: SP,N:SPSP1: SP,A:SPSP1: SP,B:SPSP1: SP,COx,)XB:BC:CX: SCAMBIO B CON C HANOI($N, $A, $C ,$B);[xJ) 10210xh)MM1:A$((A),2,1):B$((C),2,1)x) " @D@ *************** LA TORRE DI HANOY ***************@( *************** BY ALESSANDRO SCOLA 2024 ***************@F *************** WWW.ALESSANDROSCOLA.COM *************** Ad 53280,15: 53281,0: 646,1: COLORE SFONDO,BO!RDO SCRITTEIA 53269,0: SPEGNE TUTTI GLI SPRITES EVENTUALMENTE VISIBILIA *************************************************************************A ************************* VARIABILI *******************************)B DM :N RIABILI DALLO STACKy:*C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1zX* PRINT "RITORNO DALLA RICORSIONE RAMO 2"zv*z*7z* 0,0,0,0,0,0,0,0,0,0Qz* 0,0,0,0,0,0,0,0,0,0kz* 0,0,0,0,0,0,0,0,0,0z + 0,0,0,0,0,0,0,0,0,0z*+  COMPLIMENTI,HAI RISOLTO IL GIOCO!"r$(MMM) " NEL NUMERO MINIMO DI MOSSE ("(MM)")"Es% 646,1:(MMM) " HAI FATTO"(M)" MOSSE SU"(MM)" PREVISTE"Qs0% ""sN% " VUOI GIOCARE ANCORA (S/N)";A$: A$"" 9550sl% A$"S" 195,192{V, 1,255,128{t,{, 0,0,0,0,0,0,0,0,0,0{, 0,0,0,0,0,0,0,0,0,0{, 0,0,0,0,0,0,0,0,0,0 |, 0,0,0,0,0,0,0,0,0,0-| - 0,0,0,0,0,3,231,192,7,219U|(- 224,7,247,224,7,219,224,7,231,224e|F- 3,255,192k|d-|- 0,0,0,0,0,0,0,0,0,0  1  2  3  "t& "  "t&u& ***********************3u' * SOLUZIONE RICORSIVA:*Qu.' ***********************ruL'ND:SP49151:A1:B2:C3:M0uj' SALVO LE VARIABILI NELLO ST }. 0,0,0,0,0,0,0,0,0,0}. 0,0,0,0,0,15,199,240,31,223}/ 248,31,199,248,31,251,248,31,199,248}&/ 15,255,240~D/~b/ 0,0,0,0,0,0,0,0,0,05~/ 0,0,0,0,0,0,0,0,0,0O~/ 0,0,0,0,0,0,0,0,0,0i~/ 0,0,0,0,0,0,0,0,0,0~/ 0,0,0,0,0,31,231,2 ,1):B$((C),2,1)v( "MOSSA "(M)": #"A$" -> #"B$: 4120w<( RITORNO DALLA RICORSIONE,RIPRISTINO LE VARIABILI DALLO STACKXwZ(C(SP):SPSP1:B(SP):SPSP1:A(SP):SPSP1:N(SP):SPSP1wx( PRINT "RITORNO DALLA RICORSIONE RAMO 1"w(w39,2541 63,255,252$1B1 0,0,0,0,0,0,0,0,0,0`1 0,0,0,0,0,0,0,0,0,0~1 0,0,0,0,0,0,0,0,0,01 0,0,0,0,0,0,0,0,0,0)1 0,0,0,0,0,127,231,254,255,219W1 255,255,231,255,255,219,255,255,231,255i1 127,255,2540,0,0,0,0,31,231,2! LI,IY060: Y MIMINA (PUNTO PIU IN ALTO QUANDO MUOVO DISCO)tIY9168: Y MASSIMA (COORD Y PPUTNO DI APPOGGIO DEI DISCHI AL PIANO)IAD12: ALTEZZA DISCO IN PIXELS(SPRITE ESPANSO =6 X 2 = 12)I2V53248: REGISTRO DEL VIC DI PARTENZA PER GESTION ! UMERO DICHI MASSIMI CHE IL PROGRAMMA GESTISCElB D :NUMERO DISCHI SCELTI DAL GIOCATORE PER LA PARTITAB MM :NUMERO MOSSE MINIME PER VINCERE = 2^D-1B6 P1 :PESO DISCO IN ALTO SU PIOLO 1CT P2 :PESO DISCO IN ALTO SU P! CORSIVO."'K" " INIZIALIZZAZIONE SPRITES, ATTENDI..."IK@ ***************************kK^ * RIDEFINISCE GLI SPRITES *K| ***************************KB245: BANCO MEMORIA DI PARTENZA PER GLI SPRITE 245K LEGGE I DATA PER I DISCHI C! OLO 32D Q1,Q2,Q3 :NUMERO DISCHI PRESENTI SU OGNI PIOLOkD X1,X2,X3 :COORDINATE X DEGLI SPRITES SU OGNI PIOLOD& Y0 :COORDINATA Y MINIMA SPRITES (IL PUNTO PIU IN ALTO)DD Y9 :COORDINATA Y MASSIMA SPRITES (IL PUNTO PIU IN BASSO)0E!(56320) 16)0 2020: ATTENTE PRESSIONE FIRE M 1960iM 53269,0: 53280,15: 53281,0: 646,1: COLORE SFONDO,BORDO SCRITTEMD2:"QUANTI DISCHI ? (1-8)"M  "(JOYSTICK UP/DOWN)"N>"! PER GLI SPRITERF ************************************************************************F ************************************************************************F4 (44)64 1090FR "ATTENZIONE!!"Fp "PER ESEGUIRE QUESTO PROGRAMM! > GIOCARE <"IOj (GM$"G") " >VEDERE SOLUZIONE<"O (GM$"S") " > GIOCARE <"O (GM$"S") " >VEDERE SOLUZIONE<"O "(J!CHI MASSIMO8H` P1(DM): STATO PRESENZA DEI PIOLI SU PIOLO 1, DA 1 A 7uH~ P2(DM): STATO PRESENZA DEI PIOLI SU PIOLO 2, DA 1 A 7H P3(DM): STATO PRESENZA DEI PIOLI SU PIOLO 3, DA 1 A 7HX176:X2156:X3236: COORDINATE X DEGLI SPRITES SU PIO! PIOLO 1Q I1 D:P1(I)I: I=Q P11:P20:P30: PESO DEL DISCO IN ALTO SU UN DATO PIOLO~Q Q1D:Q20:Q30: Q1, Q2, Q3 = QUANTI DISCHI HA CIASCUN PIOLOQ, POSIZIONA GLI SPRITES DEI DISCHI UNO SULL'ALTRO SU PIOLO 1QJ DISEGNA LA BASE DEL GI"OCO Rh I0: VARIABILE OFFSET RESGISTRI SPRITES?R OC0: OFFFSET COLORE PER SALTARE IL NUMERO 8tR SND1 0 1: SETTA POSIZIONE X E Y DISCHIR V(SN2),X1:II1: V((SN2)1),Y9((I1)AD2)R II1R (SN4)7 OC1: PER SALTARE !SPRITESJP ""9)"LA TORRE DI HANOI"FJn 6)"BY ALESSANDRO SCOLA (C)2024"jJ 8)"WWW.ALESSANDROSCOLA.COM"J 6)"GIOCA ALLA TORRE DI HANOI"J 6)"O FALLA RISOLVERE AL TUO"J 6)"COMMODORE 64 CON IL METODO"J 6)"RI!IOLO 2.Cr P3 :PESO DISCO IN ALTO SU PIOLO 3gC(J 16)0 PC2 PI2 PI0: DESELEZIONO P2 C P1(DM) :SITUAZIONE PESI DISCHI SU PIOLO 1C P2(DM) :SITUAZIONE PESI DISCHI SU PIOLO 2C P3(DM) :SITUAZIONE PESI DISCHI SU PI!HE UTILIZZEROL SN0 DM19L 1862,56SN: VISUALIZZA CONTO ALLA ROVESCIAuL 2040SN,BSN: SETTA BANCO DI MEMORIA PER OGNI SPRITEL0 I0 62LN A: 64B(SN64)I,A: ILl SNL " PREMI FIRE IN PORTA 2 PER GIOCARE "M(!b AD :ALTEZZA SPRITE DI UN SINGOLO DISCO IN PIXELSNE SN :SPRITE NUMBERE SP :STACK POINTER (PER LA SOLUZIONE RICORSIVA)E V :REGISTRO DEL VIC DI PARTENZA PER GESTION SPRITESF B :BANCO MEMORIA DI PARTENZA! <"(N\"": 31);D:J(56320)HNz(D7 (J 1)0) DD1hN(D2 (J 2)0) DD1N(J 16)0 2320N I1 25: IN 56320,255: 2140N GM$"G": ""N. 56320,255 OL (GM$"G") "!A"%G "DEVI PRIMA ESEGUIRE IL SEGUENTE COMANDO:"SG "POKE 43,1:POKE 44,64:POKE 16384,0"G "POI RICARICA IL PROGRAMMA DA DISCO"G "CON ,8 E NON CON ,8,1 !! "G "ALLA FINE ESEGUILO CON IL COMANDO RUN"G$GBDM8: FINO A 8 DIS!OYSTICK UP/DOWN)" P 56320,255:J(56320)8P (GM$"S" (J 1)0) GM$"G": 2350dP (GM$"G" (J 2)0) GM$"S": 2350{P< (J 16)0 2710PZ I1 50: IPx 2530P P MEMORIZZA IN UN ARRAY LO STATO PRESENZA DISCHI PESATI SU" F=FINE)";B$Y B$"F" 9550 Z (B$)49 (B$)55 4300=Z PI1 PF2 Q10 (P20 P2P1) 4480nZ6 PI1 PF3 Q10 (P30 P3P1) 5320ZT PI2 PF1 Q20 (P10 P1P2) 6130Zr PI2 PF3 Q20 (P30 P3P2) " IL COLORE GIALLOS 53287SN,SN4OC: SETTA I COLORI DEI DISCHI&S: SN_SX ABILITA SPRITES E ESPANDILI IN LARGHEZZA E ALTEZZASv VA0: N0 D1:VAVA(2N):S 53269,VA: ABILITA SPRITESS 53277,VA: ESPANSIONE IN LARGHEZZAS 53271" * *"\D "***********************"<\b I1 255: I: I1 255: I: 3430m\ ******************************************\ * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 2 *\ *********************************" SELEZIONATOUf 646,1: 53280,15: "SI RISOLVE IN "(MM)" MOSSE."EU 9730: DISEGNA I PIOLI E LA BASE[U GM$"S" 10000qU GM$="G" GIOCAREU 646,1: 214,2: 58732: "FAI LA MOSSA N."(M)U PI0:PF0:PC1: PIOLO INIZIO,FINE,CORREN"] APPOGGIO DISCO:^ Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEc^Y1(V1(2(P11))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO}^ P20 Y2Y9: 4930^$Y2Y9(ADQ2)^B YY1 Y2 2^` (V1(2(P11))),Y^~",32:1884,32V (PC3) 1892,62:1894,60;W(J(56320):(J 4)0 PC1 PCPC1: JOY A SINISTRAjWF(J 8)0 PC3 PCPC1: JOY A DESTRAWG(J 16)0 PC1 PI0 PI1:3920: SELEZIONO P1WH(J 16)0 PC1 PI1 PI0: DESE"_2P1(Q1)0:Q1Q11_P Q11 P1P1(1)`n Q10 P1(1)0:P10` GM$"G" 93102`: ELSE IF GM$="S"c` ******************************************` * SPOSTAMENTO DISCO DA PIOLO 1 A PIOLO 3 *` ***********************************" 16)0 PI0 PCPI PFPC: 4120YP(PI0) 56145,1:56155,1:56165,16YQ(PI1) 56145,4MYR(PI2) 56155,4dYS(PI3) 56165,4oYd 3610Y A$"F" 9520Y(PI0 PF0) 4300Y 214,4: 58732: "MUOVI DISCO A PIOLO # (" (2(P11)))a0 P30 Y2Y9: 5740"bNY2Y9(ADQ3): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO6bl YY1 Y2 2Ob (V1(2(P11))),YWb Yb AGGIORNO PESO PILA DI DESTINAZIONE 3b IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASS#O I PESIbP3(1)P1:P3P1:Q3Q31c  AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1Rc> Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN ALTO I PESIgc\P1(Q1)0:Q1Q11~cz Q11 P1P1(1)c Q10 P1(1)0:P10c GM$"G" 9310c: EL" 6940[ PI3 PF1 Q30 (P10 P1P3) 77502[ PI3 PF2 Q30 (P20 P2P3) 8560m[ 53280,2: "***********************""[ "* *"[ "* MOSSA NON POSSIBILE *"[& "",VA: ESPANSIONE IN ALTEZZA+T *************************************************cT *************************************************T* MM2D1:M1: MM=NUMERO MOSSE MINIME X RISOLVERE, M=NUMERO MOSSATH SPOSTA IL DISCO PIU IN ALTO DAL PIOLO "*********] P1 = VALORE DEL DISCO PIU IN ALTO,CHE CORRISPONDE ALLO SPRITES P1-1=] Y(V1(2(P11))) Y0 2f] (V1(2(P11))),Y: SOLLEVO DISCOn]4 Y]R X(V(2(P11))) X2 2]p (V(2(P11))),X: SPOSTO DISCO A DX] X"TEU(PC1) 1872,62:1874,60V8(PC1) 1882,32:1884,329VV(PC1) 1892,32:1894,32ZVt(PC2) 1872,32:1874,32{V(PC2) 1882,62:1884,60V(PC2) 1892,32:1894,32V(PC3) 1872,32:1874,32V(PC3) 1882" Y^ AGGIORNO PESO PILA DI DESTINAZIONE 2._ IQ21 1 1:P2(I)P2(I1): I: SCALO IN ALTO I PESII_P2(1)P1:P2P1:Q2Q21{_ AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 1_ Q11 : I1 Q11:P1(I)P1(I1): I: SCALO IN BASSO I PESI"LEZIONO P1XI(J 16)0 PC2 PI0 PI2:3920: SELEZIONO P2PXJ(J 16)0 PC2 PI2 PI0:3920: DESELEZIONO P2XK(J 16)0 PC3 PI0 PI3:3920: SELEZIONO P3XL(J 16)0 PC3 PI3 PI0:3920: DESELEZIONO P3XM(J"*******`" Y(V1(2(P11))) Y0 2a@ (V1(2(P11))),Y: SOLLEVO DISCOa^ Y;a| X(V(2(P11))) X3 2fa (V(2(P11))),X: SPOSTO DISCO A DXna Xa APPOGGIO DISCO:a Y1= Y DI PARTENZA Y2 = Y DI ARRIVOaY1(V1# I PESIjP2(Q2)0:Q2Q21j Q21 P2P2(1)j Q20 P2(1)0:P20 k  GM$"G" 9310$k(: ELSE IF GM$="S"UkF ******************************************kd * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 1 *k ***************************# SE IF GM$="S"c *******************************************)d * SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 1 *[d. *******************************************dL Y(V1(2(P21))) Y0 2dj (V1(2(P21))),Y: SOLLEVO DISCOd Yd# Y1(V1(2(P31)))l P10 Y2Y9: 8170mY2Y9(ADQ1): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCO)m YY1 Y2 2Bm (V1(2(P31))),YJm& YumD AGGIORNO PESO PILA DI DESTINAZIONE 1mb IQ11 1 1:P1(I)P1(I1): I: SCAL# Y2Y9: 6550exY2Y9(ADQ1)e YY1 Y2 2e (V1(2(P21))),Yf Y2f AGGIORNO PESO PILA DI DESTINAZIONE 1rf IQ11 1 1:P1(I)P1(I1): I: SCALO IN BASSO I PESIf,P1(1)P2:P1P2:Q1Q11fJ AGGIORNO PRESENZA DISCHI PILA #nR!: ELSE IF GM$="S"np! ******************************************o! * SPOSTAMENTO DISCO DA PIOLO 3 A PIOLO 2 *Ko! ******************************************oo! Y(V1(2(P31))) Y0 2o! (V1(2(P31))),Y: SOLLEVO DISCOo" Y#SPOSTAMENTO DISCO DA PIOLO 2 A PIOLO 3 * hX *******************************************/hv Y(V1(2(P21))) Y0 2Xh (V1(2(P21))),Y: SOLLEVO DISCO`h Yh X(V(2(P21))) X3 2h (V(2(P21))),X: SPOSTO DISCO A SX#SOPRA DISCOp# YY1 Y2 2p2# (V1(2(P31))),YpP# Y qn# AGGIORNO PESO PILA DI DESTINAZIONE 2Iq# IQ21 1 1:P2(I)P2(I1): I: SCALO IN BASSO I PESIdq#P2(1)P3:P2P3:Q2Q21q# AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3q##,Yi Yi AGGIORNO PESO PILA DI DESTINAZIONE 3!j8 IQ31 1 1:P3(I)P3(I1): I: SCALO IN BASSO I PESI& "    "lt\& Itz& "  #***************k Y(V1(2(P31))) Y0 2l (V1(2(P31))),Y: SOLLEVO DISCO l Y.l X(V(2(P31))) X1 2Yl (V(2(P31))),X: SPOSTO DISCO A DXal6 XwlT APPOGGIO DISCO:lr Y1= Y DI PARTENZA Y2 = Y DI ARRIVOl# X(V(2(P21))) X1 2d (V(2(P21))),X: SPOSTO DISCO A SXe Xe APPOGGIO DISCO:^e Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEe<Y1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOeZ P10 #O IN BASSO I PESIm P1(1)P3:P1P3:Q1Q11n AGGIORNO PRESENZA DISCHI PILA DI PARTENZA 3En Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIZn P3(Q3)0:Q3Q31qn Q31 P3P3(1)n! Q30 P3(1)0:P30n4! GM$"G" 9310#DI PARTENZA 2gh Q21 : I1 Q21:P2(I)P2(I1): I: SCALO IN ALTO I PESIgP2(Q2)0:Q2Q21.g Q21 P2P2(1)Hg Q20 P2(1)0:P20]g GM$"G" 9310ug: ELSE IF GM$="S"g *******************************************g: * #o$" X(V(2(P31))) X2 2oB" (V(2(P31))),X: SPOSTO DISCO A SXo`" X p~" APPOGGIO DISCO:5p" Y1= Y DI PARTENZA Y2 = Y DI ARRIVONp"Y1(V1(2(P31)))hp" P20 Y2Y9: 8980p"Y2Y9(ADQ2): ALTRIMENTI Y DI ARRIVO E' APPENA #h  Xh* APPOGGIO DISCO: iH Y1= COORD Y DI PARTENZA Y2 = COORD Y DI ARRIVO DELLO SPRITEUifY1(V1(2(P21))): ALTRIMENTI Y DI ARRIVO E' APPENA SOPRA DISCOoi P30 Y2Y9: 7360iY2Y9(ADQ3)i YY1 Y2 2i (V1(2(P21)))# Q31 : I1 Q31:P3(I)P3(I1): I: SCALO IN ALTO I PESIq$P3(Q3)0:Q3Q31r"$ Q31 P3P3(1)r@$ Q30 P3(1)0:P301r^$ GM$"S" =r|$ DEBUGnr$ Q3D 9640: HO FINITO IL GIOCO (Q3=D ?)r$"": 9730: 646,5: 53280,5r$"