Mental Mania

Developer(s): James DuPuy
Date: 1984
Type: Program
Platform(s): TS 2068

Move all 5 of the discs, one at a time, so that you end up with all 5 at 3 in the same order as 1 is now in the least number of moves. You can’t put a larger disc on top of a smaller disc. Variation of Tower of Hanoi.

Content

Appears On

Library tape of the Indiana Sinclair Timex User’s Group.

Related Products

Related Articles

Related Content

Image Gallery

Source Code

   10 REM "MEN MAN" by J.G.DuPuy 11/23/84
   20 GO TO 1110
   30 REM DRAW PEGS
   40 FOR B=0 TO 3: PLOT PL+B,128: DRAW 0,42: NEXT B: RETURN 
   50 REM DRAW DISCS
   60 LET PL=-34
   70 FOR n=SGN PI TO 5: PRINT AT N,1,,: NEXT n
   80 FOR N=SGN PI TO 3: LET PL=PL+80: GO SUB 40
   90 FOR O=SGN PI TO 5
  100 IF P(N,O)=0 THEN GO TO 130
  110 PRINT AT O,1+((N-1)*10); INK (6-P(N,O));D$(P(N,O))
  120 BEEP .05,P(N,O)+10
  130 NEXT O: NEXT n: RETURN 
  140 PRINT AT 16,10; FLASH 1;" STOP THE TAPE!": BEEP .5,0: BEEP .5,10: INPUT "Do you want intructions?(Y/N)"; LINE z$: IF z$="y" THEN GO SUB 1010
  150 PRINT AT 16,10;"                "
  160 INPUT "Enter:J-Joy stick,K-keys(1-3)"; LINE z$: LET st=0: IF z$="j" THEN LET st=1: GO SUB 1080
  170 PLOT 0,22: DRAW 255,0: DRAW 0,52: DRAW -255,0: DRAW 0,-52
  180 PRINT AT 14,17;"BEST SCORE:";hs
  190 IF st THEN PRINT AT 18,6;"LEFT=1, UP=2, RIGHT=3"
  200 REM MAIN PROGRAM
  210 LET M=M+1
  220 PRINT AT 16,1,,
  230 PRINT AT 14,1;"MOVE:";M
  240 IF m>100 THEN PRINT AT 16,1;"You have gone over you limit!": BEEP 1,-10: PAUSE 30: GO TO 950
  250 PRINT AT 16,1;"FROM?(1-3):";
  260 IF st THEN GO TO 690
  270 LET A$=INKEY$: IF A$="x" THEN GO TO 950
  280 IF A$>"3" OR A$<"1" THEN GO TO 270
  290 IF INKEY$<>"" THEN GO TO 290
  300 PRINT A$;: BEEP .1,27
  310 IF st AND |(1,1) THEN GO TO 310
  320 LET D=VAL A$: GO SUB 550
  330 IF Z THEN PRINT AT 16,1;"NOTHING THERE TO TAKE!": BEEP .5,-20: PAUSE 30: GO TO 220
  340 PRINT " / TO?(1-3):";
  350 IF st THEN GO TO 740
  360 LET B$=INKEY$: IF B$="x" THEN GO TO 950
  370 IF B$>"3" OR B$<"1" THEN GO TO 360
  380 IF INKEY$<>"" THEN GO TO 380
  390 PRINT B$: BEEP .1,30
  400 IF b$=a$ THEN PRINT AT 16,1;"A RATHER STUPID MOVE!!!   ": BEEP .5,-20: PAUSE 30: GO TO 220
  410 LET E=VAL B$: GO TO 620
  420 REM STORE MOVES
  430 LET M$=M$+A$+"-"+B$+":"
  440 REM UPDATE POSITION ARRAY
  450 LET P(D,I)=0: IF N=1 THEN LET P(E,N)=FR: GO SUB 60: GO TO 480
  460 LET P(E,N-1)=FR: GO SUB 60
  470 REM CHECK PEG#3 FOR WIN
  480 LET S=0
  490 FOR G=SGN PI TO 5
  500 IF P(3,G)=G THEN LET S=S+1
  510 NEXT G
  520 IF S=5 THEN GO TO 800
  530 GO TO 210
  540 REM "FROM"SETUP&ERROR CHECK
  550 DIM F(5)
  560 FOR I=SGN PI TO 5
  570 IF P(D,I)=0 THEN GO TO 590
  580 LET F(I)=P(D,I): LET Z=0: LET FR=F(I): RETURN 
  590 NEXT I
  600 LET Z=1: RETURN 
  610 REM "TO"SETUP & ERROR CHECK
  620 DIM T(5)
  630 FOR N=SGN PI TO 5
  640 IF P(E,N)=0 THEN GO TO 670
  650 LET T(N)=P(E,N): IF T(N)<FR THEN PRINT AT 16,1;"YOUR DISC IS TOO BIG! GO AGAIN": BEEP .5,-20: PAUSE 30: GO TO 210
  660 IF T(N)>0 THEN GO TO 430
  670 NEXT N
  680 GO TO 430
  690 IF |(1,1)=4 THEN LET a$="1": GO TO 290
  700 IF |(1,1)=1 THEN LET a$="2": GO TO 290
  710 IF |(1,1)=8 THEN LET a$="3": GO TO 290
  720 IF INKEY$="x" THEN GO TO 950
  730 GO TO 690
  740 IF |(1,1)=4 THEN LET b$="1": GO TO 380
  750 IF |(1,1)=1 THEN LET b$="2": GO TO 380
  760 IF |(1,1)=8 THEN LET b$="3": GO TO 380
  770 IF INKEY$="x" THEN GO TO 950
  780 GO TO 740
  790 REM WIN ROUTINE
  800 PLOT OVER 1;0,22: DRAW OVER 1;255,0: PLOT OVER 0;0,24: DRAW 0,-20: DRAW 255,0: DRAW 0,20: PRINT AT 18,1;"GOOD GOING! YOU GOT IT!",AT 19,1;"IT TOOK YOU : ";M-1;" MOVES.     "
  810 IF m-1<hs THEN LET hs=m-1: PRINT AT 14,17;"BEST SCORE:";hs;" "
  820 FOR N=SGN PI TO 20: BEEP .1,N+20: NEXT N
  830 GO SUB 860
  840 GO TO 990
  850 REM PRINT STORED MOVES
  860 INPUT "Want you moves printed?(Y/N):"; LINE z$: IF z$<>"y" THEN RETURN 
  870 INPUT "Turn printer on, press ENT "; LINE z$
  880 COPY 
  890 LPRINT "NUMBER of MOVES: ";M-1
  900 LPRINT '
  910 LPRINT M$
  920 LPRINT '
  930 RETURN 
  940 REM LOSE ROUTINE
  950 PRINT AT 20,1;"I guess I wiped your mind!!";AT 21,1;"Ha! Ha! Ha!"
  960 FOR n=SGN PI TO 20: BEEP .1,0-n: NEXT n
  970 GO SUB 860
  980 REM RESTART GAME
  990 INPUT "Want to play again?(Y/N):";z$: IF z$<>"n" THEN GO TO 30
 1000 STOP 
 1010 REM INSTRUCTIONS
 1020 PRINT AT 16,0,,
 1030 PRINT AT 12,0;"The object of the game is to    move all 5 of the discs one at atime so that you end up with all5 at 3 in the same order as 1 isnow in the least number of movesbut You can't put a larger disc on top of a smaller disc! Enter an ""X"" if you want to quit."
 1040 PRINT "BEWARE, You only have 100 moves!"
 1050 INPUT "Press enter to start.  "; LINE z$
 1060 FOR x=12 TO 20
 1070 PRINT AT x,0,,: NEXT x: RETURN 
 1080 PRINT AT 12,0;"You have elected to use the     JOY STICK. To move, LEFT=1, UP=2and RIGHT=3. X key to stop."
 1090 INPUT "Press enter to start   ";z$: FOR v=12 TO 16: PRINT AT v,0,,: NEXT v: RETURN 
 1100 REM INITIALIZE
 1110 POKE 23609,25
 1120 LET hs=100
 1130 BORDER 1: PAPER 7: LET m=0: INK m: BRIGHT 1: CLS 
 1140 FOR n=m TO 7: READ a: POKE USR "\a"+n,a: NEXT n
 1150 DATA 170,85,170,85,170,85,170,85
 1160 CLS : DIM p(PI,5): LET m$="": DIM d$(5,10)
 1170 LET d$(1)="\  \  \  \  \::\::"
 1180 LET d$(2)="\  \  \  \::\::\::\::"
 1190 LET d$(PI)="\  \  \::\::\::\::\::\::"
 1200 LET d$(4)="\  \::\::\::\::\::\::\::\::"
 1210 LET d$(5)="\::\::\::\::\::\::\::\::\::\::"
 1220 FOR N=SGN PI TO 5: LET P(1,N)=N: NEXT N
 1230 REM SET UP SCREEN
 1240 PRINT AT 6,m;"\a\a\a\a\a1\a\a\a\a\a\a\a\a\a2\a\a\a\a\a\a\a\a\a3\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a"
 1250 PRINT ' INK m;"     M E N T A L  M A N I A"
 1260 PLOT m,87: DRAW 255,m: DRAW m,88: DRAW -255,m: DRAW m,-88
 1270 GO SUB 60: GO TO 140
 1280 CLEAR : SAVE "MEN MAN" LINE 10
Scroll to Top