home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dimension 64 13
/
Dimension_64_Nr.13_19xx_-_de_Side_A.d64
/
t.v.hanoi
(
.txt
)
< prev
Wrap
Commodore BASIC
|
2023-02-26
|
4KB
|
152 lines
190 rem die tuerme von hanoi
200 poke53280,7:poke53281,7:gosub1520
210 poke53280,6:poke53281,6
220 t$="[146] [146][164][146][175][146][185][146][162][184][183][163]"
230 b$="[164][175][185][162][146][184][146][183][146][163][146] "
240 dimtp$(8),t$(8),bt$(8),b$(8),cs$(20)
250 cs$(2)="[144]":cs$(04)="[154]":cs$(06)=""
260 cs$(8)="[159]":cs$(10)="[156]":cs$(12)=""
270 cs$(14)="[149]"
280 fori=1to8
290 c$=mid$(t$,2*i,1):c$=c$+c$+c$:c$=c$+c$+c$:c$=left$(c$+c$,14)
300 tp$(i)=mid$(t$,2*i-1,1)+c$
310 c$=mid$(b$,2*i,1):c$=c$+c$+c$:c$=c$+c$+c$:c$=left$(c$+c$,14)
320 bt$(i)=mid$(b$,2*i-1,1)+c$
330 nexti
340 l$=" [180][161][146][170][146] "
350 r$="[146] [146][180][146][161][170] "
360 dimlf$(5),rt$(5)
370 fori=1to5:lf$(i)=mid$(l$,2*i-1,2):rt$(i)=mid$(r$,2*i-1,2):nexti
380 cr$=chr$(13)
390 print"[147][129]wieviel scheiben (2 - 7) ? ";:gosub 1400
400 ifin$=""then390
410 fori=1tolen(in$)
420 :t$=mid$(in$,i,1):ift$>="0"andt$<="9"then440
430 print"[145][145][145]":goto390
440 nexti
450 n=val(in$):ifn>7thenprint"[129]nicht mehr als 7 [145][145][145][145][145][145]":fory=1to999:nexty:goto390
460 ifn<2thenprint"[145][145][145]":goto390
470 dn$=""
480 rt$=""
490 fori=1to3:forj=0to7:p(i,j)=0:nextj:nexti
500 print"[147]";dn$;"";:p(1,0)=n
510 fori=1to3:print"[129] ";:nexti
520 printdn$;"[129]#1#2#3"
530 printdn$;left$("[145][145][145][145][145][145][145]",n);
540 fori=1ton:printcs$(i*2);
550 printleft$("[146]"+rt$,7-i+1);left$("[164]"+bt$(1),2*i+1);"[164]"
560 p(1,n-i+1)=i*2
570 nexti
580 mv=0
590 tm=ti+60
600 ifti<tmthen600
610 gosub1350
620 pr$="von welcher plattform? ":gosub1250:ifin$=""then610
630 f=val(in$)
640 ifp(f,0)<1thenprint"dieser platz ist leer.":goto590
650 pr$="[156]wohin damit ? ":gosub1250:ifin$=""then610
660 t=val(in$)
670 iff=tthenprint"dieser zug geht nicht.":goto590
680 ifp(t,0)=0then700
690 ifp(f,p(f,0))>p(t,p(t,0))thenprint"das geht nicht.":goto590
700 fc=p(f,0):fw=p(f,fc):tc=p(t,0):tw=p(t,tc):mv=mv+1
710 x=1+13*(f-1)+7-fw/2:print""cs$(fw)
720 print dn$;left$("[145][145][145][145][145][145][145][145][145]",fc+1);left$("[146]"+rt$+rt$+rt$,x);
730 lf$=left$("[157][157][157][157][157][157][157][157][157][157][157][157][157][157]",fw+1)
740 fori=1to 8:t$(i)=left$(tp$(i),1+fw):b$(i)=left$(bt$(i),1+fw):nexti
750 ht=0:j=1:iff>tthenj=-1
760 fori=ftotstepj
770 ifp(i,0)>htthenht=p(i,0)
780 nexti
790 ifht=p(t,0)thenht=ht+1:goto810
800 ifabs(f-t)>1thenifht=p(2,0)thenht=ht+1
810 fori=fctoht
820 :for j=1to8
830 :printt$(j);lf$;b$(j);lf$;"[145][145]";
840 :nextj
850 :print"[145]";
860 nexti
870 print"";
880 l$=left$("[157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]",1+fw):r$=left$(rt$,fw-1)
890 print"";left$(" ",fw);"[146]";left$("[157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]",fw);
900 iff>tthen980
910 fori=f*13tot*13-1
920 :forj=1to5
930 printlf$(j);r$;rt$(j);l$;
940 nextj
950 print"";
960 nexti
970 goto1040
980 fori=t*13tof*13-1
990 print"[157]";
1000 :forj=5to1step-1
1010 ::printlf$(j);r$;rt$(j);l$;
1020 :nextj
1030 nexti
1040 fori=ht-1totcstep-1
1050 :forj=8to1step-1
1060 :printt$(j);lf$;b$(j);lf$;"[145][145]";
1070 :nextj
1080 :print"";
1090 nexti
1100 printleft$("[164]"+bt$(1),fw+1);"[164]"
1110 p(t,0)=p(t,0)+1
1120 p(t,p(t,0))=p(f,p(f,0))
1130 p(f,0)=p(f,0)-1
1140 ifp(2,0)<>nandp(3,0)<>nthen590
1150 gosub1350
1160 print"[144] [172][162][162][162][162][162][162][162][162][162][162][162][162][187]"
1170 print" [161]geschafft!! [146][161]"
1180 print" [188][162][162][162][162][162][162][162][162][162][162][162][162][146][190]"
1190 print"[158]du hast";mv;"schritte dazu gebraucht":print
1200 t=2^n-1:print"[159]am kuerzesten waeren"t"schritte."
1210 print"[156]noch eins? ";:gosub1400
1220 ifleft$(in$,1)<>"j"thenend
1230 run
1240 end
1250 printpr$;
1260 gosub1400:ifin$=""thenreturn
1270 ifleft$(in$,1)="q"thenend
1280 iflen(in$)>1then1300
1290 ifin$>="1"andin$<="3"thenreturn
1300 print"falsche eingabe !!!"
1310 fori=1to500:nexti
1320 print"[145] "
1330 print"[145][145]";pr$;left$(" ",len(in$))
1340 print"[145]";:goto1250
1350 print"";
1360 fori=1to5:print" ":nexti
1370 print"";
1380 return
1390 print""
1400 in$=" ":zt=ti:zc=2:zd$=chr$(20)
1410 getz$:if z$<>""then1440
1420 ifzt<=tithenprintmid$(" [166]",zc,1);"[157]";:zc=3-zc:zt=ti+15
1430 goto1410
1440 z=asc(z$):zl=len(in$):if(zand127)<32thenprint" [157]";:goto1480
1450 iffland(zand127)>64and(zand127)<91thenz$=chr$((z+128)and255)
1460 ifzl>254then1410
1470 in$=in$+z$:printz$;zd$;z$;
1480 ifz=13thenin$=mid$(in$,2):printcr$;:return
1490 ifz=20andzl>1thenin$=left$(in$,zl-1):print"[157]";:goto1410
1500 ifz=141thenz$=chr$(-20*(zl>1)):forz=2tozl:printz$;:nextz:goto1400
1510 goto1410
1520 print"[147]*** [129]commodore 64 *** [129]tuerme v. hanoi ***"chr$(142)chr$(8)
1530 print"[144]du hast 3 platten mit einer anzahl von"
1540 print" scheiben. die aufgabe ist,die scheiben"
1550 print" an einer anderen stelle in gleicher"
1560 print" anordnung aufzubauen."
1570 print"es darf aber dabei immernur eine"
1580 print" kleinere scheibe auf eine groessere"
1590 print" scheibe gesetzt werden."
1600 print"mit so wenig schritten wie moeglich."
1610 print""
1620 gosub1640
1630 return
1640 print" bitte auf die leertaste druecken.
1650 [129]i[178]1[164]250:[130]
1660 [153]" bitte auf die leertaste druecken.
1670 fori=1to250:next
1680 geta$:ifa$=" "thenreturn
1690 goto1640