BASIC2\BRAHMA.BAS  ·  BAS  ·  7.2 KB  ·  1988-01-13  ·  from PCPlus_Issue-18_Mar-1988
'************************
'* THE TOWERS OF BRAHMA *
'************************
'****** WRITTEN BY ******
'**** GARY WILKINSON ****
'************************
'
SCREEN #1 GRAPHICS 8000 FIXED,5000 FIXED:WINDOW #1 MOUSE 2:go=0:CLS RESET:WINDOW #1 FULL ON:WINDOW #1 OPEN:WINDOW #1 TITLE "********* INSTRUCTIONS *********":SET COLOUR 12 POINTS 8
LOCATE #1,8;16:PRINT "THE OBJECT OF THE GAME IS TO TRANSFER THE RINGS FROM PILLAR   TO PILLAR  , ONE AT A TIME.":LOCATE #1,8;17:PRINT "AT           MAY A LARGER RING BE PLACED ON TOP OF A SMALLER RING. THE RINGS MAY BE MOVED"
LOCATE #1,8;18:PRINT "BY PRESSING THE KEY CORRESPONDING TO THE COLUMN NUMBER OR BY CLICKING THE COLUMN WITH THE"
LOCATE #1,8;19:PRINT "MOUSE. THE GAME MAY BE RESTARTED BY PRESSING THE      KEY. TO QUIT  THE  GAME PRESS THE"
LOCATE #1,8;20:PRINT "KEY. YOU MAY ALSO RESTART OR QUIT BY CLICKING THE MOUSE ON THE     AND     SYMBOLS."
SET COLOUR 1:LOCATE #1,8;21:PRINT"PLEASE PRESS THE SPACE BAR WHEN YOU ARE READY TO PLAY.":SET COLOUR 10 EFFECTS &X1:LOCATE #1,53;16:PRINT "1":LOCATE #1,62;16:PRINT "3":SET EFFECTS &X0:LOCATE #1,11;17:PRINT "NO TIME":LOCATE #1,46;19:PRINT "R"
LOCATE #1,74;19:PRINT "X":LOCATE #1,56;20:PRINT"R":LOCATE #1,62;20:PRINT"X"
BOX 775;1700,6750,400 FILL WITH 28 COLOUR 3:BOX 2011;2075,220,2200 FILL WITH 28 COLOUR 3:BOX 3962;2075,220,2200 FILL WITH 28 COLOUR 3:BOX 5913;2075,220,2200 FILL WITH 28 COLOUR 3:SET COLOUR 10 POINTS 10 EFFECTS &X1,&X100
LOCATE #1,21;3:PRINT "1":LOCATE #1,40;3:PRINT "2":LOCATE #1,59;3:PRINT "3"
BOX 1260;2100,1710,250 FILL WITH 5 COLOUR 7 ROUNDED:BOX 1360;2355,1510,250 FILL WITH 5 COLOUR 6 ROUNDED:BOX 1460;2590,1310,250 FILL WITH 5 COLOUR 5 ROUNDED:BOX 1560;2850,1110,250 FILL WITH 5 COLOUR 4 ROUNDED
BOX 1660;3100,910,250 FILL WITH 5 COLOUR 2 ROUNDED:BOX 1760;3350,710,250 FILL WITH 5 COLOUR 1 ROUNDED:BOX 1860;3610,510,250 FILL WITH 5 COLOUR 14 ROUNDED:BOX 1960;3860,310,250 FILL WITH 5 COLOUR 13 ROUNDED:SET COLOUR 4 POINTS 8 EFFECTS &X0
REPEAT
in$=INKEY$:UNTIL in$=" "
WINDOW #1 TITLE "********* THE TOWERS OF BRAHMA *********"
WINDOW #1 MOUSE 3

BOX 600;100,7000,1450 FILL WITH 8 COLOUR 0
BOX 7180;3960,600,600 STYLE 1 WIDTH 5 COLOUR 3 ROUNDED
SET COLOUR 10 POINTS 16 EFFECTS &X1
LOCATE #1,73;4:PRINT "R"
BOX 330;3960,600,600 STYLE 1 WIDTH 5 COLOUR 3 ROUNDED
LOCATE #1,6;4:PRINT "X"

DIM a(3,8)
FOR x=1 TO 3
FOR y=1 TO 8
IF x=1 THEN a(x,y)=y
IF x>1 THEN a(x,y)=0
NEXT y
NEXT x
SET EFFECTS &X0 POINTS 10
LABEL loop1:SET COLOUR 4:LOCATE #1,8;16:PRINT "FROM WHICH PILLAR DO YOU WISH TO REMOVE THE RING?":IF BUTTON<>-1 THEN REPEAT:UNTIL BUTTON=-1
REPEAT
mx1=XMOUSE:my1=YMOUSE
IF BUTTON<>-1 AND mx1>122 AND mx1<212 AND my1>70 AND my1<160 THEN in$="1":GOTO check1
IF BUTTON<>-1 AND mx1>270 AND mx1<360 AND my1>70 AND my1<160 THEN in$="2":GOTO check1
IF BUTTON<>-1 AND mx1>427 AND mx1<512 AND my1>70 AND my1<160 THEN in$="3":GOTO check1
IF BUTTON<>-1 AND mx1>24 AND mx1<75 AND my1>140 AND my1<163 THEN in$="X":GOTO check1
IF BUTTON<>-1 AND mx1>558 AND mx1<611 AND my1>140 AND my1<163 THEN in$="R":GOTO check1
in$=INKEY$
UNTIL in$<>""
LABEL check1:v=ASC(in$)-48
IF in$="R" OR in$="r" THEN alrt_val=ALERT 1 TEXT"ARE YOU SURE ","YOU WANT TO ","RESTART?" BUTTON "YES","NO":IF alrt_val=1 THEN RUN ELSE WINDOW #1 MOUSE 3
IF in$="X" OR in$="x" THEN alrt_val=ALERT 1 TEXT"ARE YOU SURE ","YOU WANT TO","QUIT?" BUTTON "YES","NO":IF alrt_val=1 THEN STOP ELSE WINDOW #1 MOUSE 3
IF v>3 OR v<1 THEN GOTO loop1
FOR y=1 TO 8
IF a(v,y)>0 THEN t=a(v,y):last=t:a(v,y)=0:GOTO loop2
NEXT y
SET COLOUR 14
PRINT CHR$(7):LOCATE #1,8;18:PRINT "THERE'S NO RING ON THE PILLAR YOU SELECTED   "
GOTO loop1
LABEL loop2:SET COLOUR 2:LOCATE #1,8;18:PRINT STRING$(45," "):LOCATE #1,8;16:PRINT "TO WHICH PILLAR DO YOU WISH TO TRANSFER THE RING?":IF BUTTON<>-1 THEN REPEAT:UNTIL BUTTON=-1
REPEAT
mx1=XMOUSE:my1=YMOUSE
IF BUTTON<>-1 AND mx1>122 AND mx1<212 AND my1>70 AND my1<160 THEN in$="1":GOTO check2
IF BUTTON<>-1 AND mx1>270 AND mx1<360 AND my1>70 AND my1<160 THEN in$="2":GOTO check2
IF BUTTON<>-1 AND mx1>427 AND mx1<512 AND my1>70 AND my1<160 THEN in$="3":GOTO check2
IF BUTTON<>-1 AND mx1>24 AND mx1<75 AND my1>140 AND my1<163 THEN in$="X":GOTO check2
IF BUTTON<>-1 AND mx1>558 AND mx1<611 AND my1>140 AND my1<163 THEN in$="R":GOTO check2
in$=INKEY$
UNTIL in$<>""
LABEL check2:u=ASC(in$)-48
IF in$="R" OR in$="r" THEN alrt_val=ALERT 1 TEXT"ARE YOU SURE ","YOU WANT TO ","RESTART?" BUTTON "YES","NO":IF alrt_val=1 THEN RUN
IF in$="X" OR in$="x" THEN alrt_val=ALERT 1 TEXT"ARE YOU SURE ","YOU WANT TO ","QUIT?" BUTTON "YES","NO":IF alrt_val=1 THEN QUIT
IF u>3 OR v<1 THEN GOTO loop2
IF u=v THEN PRINT CHR$(7):SET COLOUR 15:LOCATE #1,8;18:PRINT"THE RING IS ALREADY ON THAT PILLAR               ":a(v,y)=t:GOTO loop1
FOR w=8 TO 1 STEP-1
IF a(u,w)=0 THEN IF w=8 THEN a(u,w)=t:GOTO graphic
IF a(u,w)=0 THEN IF w<8 THEN IF a(u,w+1)<t THEN GOTO invalid
IF a(u,w)=0 THEN a(u,w)=t:GOTO graphic
NEXT w
LABEL invalid :PRINT CHR$(7):SET COLOUR 10:LOCATE #1,8;18:PRINT"YOU CANNOT PLACE A LARGE RING ON A SMALL RING"
a(v,y)=t
GOTO loop1
LABEL graphic:go=go+1
IF u=1 THEN x1=1260
IF u=2 THEN x1=3211
IF u=3 THEN x1=5162
IF w=8 THEN y1=2100
IF w=7 THEN y1=2355
IF w=6 THEN y1=2590
IF w=5 THEN y1=2850
IF w=4 THEN y1=3100
IF w=3 THEN y1=3350
IF w=2 THEN y1=3610
IF w=1 THEN y1=3860
IF a(u,w)=8 THEN x2=1710:c=7
IF a(u,w)=7 THEN x2=1510:LET x1=x1+100:c=6
IF a(u,w)=6 THEN x2=1310:LET x1=x1+200:c=5
IF a(u,w)=5 THEN x2=1110:LET x1=x1+300:c=4
IF a(u,w)=4 THEN x2=910:LET x1=x1+400:c=2
IF a(u,w)=3 THEN x2=710:LET x1=x1+500:c=1
IF a(u,w)=2 THEN x2=510:LET x1=x1+600:c=14
IF a(u,w)=1 THEN x2=310:LET x1=x1+700:c=13
IF v=1 THEN xl1=1260:LET col=2011
IF v=2 THEN xl1=3211:col=3962
IF v=3 THEN xl1=5162:col=5913
IF y=8 THEN yl1=2100
IF y=7 THEN yl1=2355
IF y=6 THEN yl1=2590
IF y=5 THEN yl1=2850
IF y=4 THEN yl1=3100
IF y=3 THEN yl1=3350
IF y=2 THEN yl1=3610
IF y=1 THEN yl1=3860
IF t=8 THEN xl2=1710:c=7
IF t=7 THEN xl2=1510:LET xl1=xl1+100
IF t=6 THEN xl2=1310:LET xl1=xl1+200
IF t=5 THEN xl2=1110:LET xl1=xl1+300
IF t=4 THEN xl2=910:LET xl1=xl1+400
IF t=3 THEN xl2=710:LET xl1=xl1+500
IF t=2 THEN xl2=510:LET xl1=xl1+600
IF t=1 THEN xl2=310:LET xl1=xl1+700
LET hgt=4275-yl1
BOX xl1;yl1,xl2,250 FILL WITH 5 COLOUR 0
BOX col;yl1,220,hgt FILL WITH 28 COLOUR 3
BOX x1;y1,x2,250 FILL WITH 5 COLOUR c ROUNDED
FOR y=1 TO 8
IF a(3,y)<>y THEN GOTO loop1
NEXT y
CLS RESET: WINDOW #1 FULL ON:WINDOW #1 OPEN:WINDOW #1 TITLE "********** !CONGRATULATIONS! **********":WINDOW #1 MOUSE 4
BOX 0;0,9000,9000 FILL WITH 8 COLOUR 1
FOR a=-1 TO 4700 STEP 100
LINE 0;4700-a,a;0 STYLE 1 WIDTH 1 COLOUR 6
LINE 0;314+a,a;5014 STYLE 1 WIDTH 1 COLOUR 6
LINE 8170;4700-a,8170-a;0 STYLE 1 WIDTH 1 COLOUR 6
LINE 8170;314+a,8170-a;5014 STYLE 1 WIDTH 1 COLOUR 6
NEXT a
SET COLOUR 6 EFFECTS &X1000000 POINTS 20
LOCATE #1,24;4:PRINT "CONGRATULATIONS!"
SET COLOUR 7 POINTS 16
LOCATE #1,15;8:PRINT "YOU'VE SOLVED THE PUZZLE WHICH THE"
LOCATE #1,12;10:PRINT "SUPREME HINDU DEITY, BRAHMA, IS SAID TO"
LOCATE #1,22;12:PRINT"HAVE GIVEN HIS DISCIPLES"
SET COLOUR 5
LOCATE #1,15;16:PRINT "THE PUZZLE WAS SOLVED IN";go;"MOVES"
SET COLOUR 2 POINTS 10
LOCATE #1,24;19:PRINT "<PRESS THE SPACE BAR TO PLAY AGAIN>"
REPEAT
in$=INKEY$
UNTIL in$=" "
RUN
'
'                   <C>  GARY WILKINSON  <C>
'                        SEPTEMBER 1987