!*! Updated on 08-Nov-90 at 12:28 PM by Paul Ciosek; edit time: 0:00:51
!*************************** AMUS Program Label ******************************
! Filename: MASTMD.RUN Date: 11/8/90
! Category: Hash Code: 737-703-541-565 Version: 1.0(1)
! Initials: Name: G. KIRBY
! Company: PROTECH DATA SYSTEMS Telephone #:
! Related Files: mastmd.dat
! Min. Op. Sys.: Expertise Level: INT
! Special: need to load input.sbr to run
! Description: mastermind game, quite fun
!
!
!*****************************************************************************
!*! Updated on 01-Nov-90 at 11:05 AM by Paul Ciosek; edit time: 0:04:56
! MASTERMIND BOARD
PRINT TAB(13,78);TAB(-1,33);TAB(13,61);TAB(-1,32); &
"HOW MANY NUMBERS:";TAB(-1,33);TAB(15,61);SPACE(17);
XCALL INPUT,15,69,2,1,"#E",ENTRY,INXCTL,1
IF INXCTL = 2 GOTO ENDIT
NOM = VAL(ENTRY)
IF NOM < 1 OR NOM > 10 GOTO GETLEN
PRINTIT:
400 PRINT TAB(4,1);TAB(-1,23);TAB(6,1); MIDL; TAB(5,1); SIDEL; &
TAB(5,1); QST; TAB(4,1); TOPL
GOES = NOM + 4 : IF NOM >8 THEN GOES = GOES + 1
FOR COUNT = 1 TO GOES
PRINT TAB(6+COUNT,1); SIDEL
NEXT COUNT
PRINT TAB(6+COUNT,1); BOTL;TAB(-1,24);
GETVAL:
450 FOR COUNT = 1 TO NOM
ANS = INT((RND(10)*9)+1) : IF ANS > 9 ANS = 9
ANSWER = ANSWER+STR(ANS)
NEXT COUNT
TRY = 0
GUESSIT:
500 TRY = TRY+1 : IF TRY > GOES GOTO LOSTIT
PRINT TAB(13,78);TAB(-1,33);TAB(13,61);TAB(-1,32);" MAKE YOUR GUESS ";TAB(-1,33);
XCALL INPUT,15,70-(INT(NOM/2)),NOM,1,"A ",ENTRY,INXCTL,1
GUESS = ENTRY
IF LEN(GUESS) < NOM GOTO GUESSIT
IF GUESS # INT(GUESS) GOTO GUESSIT
?TAB(13,61);" ENTER YOUR GUESS";
ANSWER1 = ANSWER
PRIGSS:
550 STRY = NOM : FOR COUNT = 1 TO NOM
ANSWER2[23-(COUNT*2),23-(COUNT*2)] = GUESS[STRY,STRY] : STRY = STRY-1
NEXT COUNT
G=INSTR(1,ANSWER2,"V") : G1=INSTR(G+1,ANSWER2,"V")
PRINT TAB(TRY+6,2+G); ANSWER2[G+2,G1-1]; &
TAB(TRY+6,2+G+G1+1);ANSWER2[G1+2,25];
IF GUESS = ANSWER CALL GOTIT : GOTO MOREPLAY
CHECKIT:
600 STRY = 0 : FOR COUNT = 1 TO NOM
IF GUESS[COUNT,COUNT] = ANSWER1[COUNT,COUNT] THEN GUESS[COUNT,COUNT] = " " : &
ANSWER1[COUNT,COUNT] = " " : STRY = STRY + 1 : PRINT TAB(TRY+6,24+(STRY*2)); "X"
NEXT COUNT
FOR COUNT = 1 TO NOM
IF GUESS[COUNT,COUNT] # " " CALL CHECK
NEXT COUNT
GOTO GUESSIT
CHECK:
650 LOOK = 0 : FOR COUNT1 = 1 TO NOM
IF LOOK = 1 GOTO NEXTBIT
IF GUESS[COUNT,COUNT] # ANSWER1[COUNT1,COUNT1] GOTO NEXTBIT
LOOK = 1 : STRY = STRY+1 : PRINT TAB(TRY+6,24+(STRY*2)); "O"
ANSWER1[COUNT1,COUNT1] = " "
NEXTBIT:
700 NEXT COUNT1
RETURN
LOSTIT:
1000 CALL PRANS : CALL LOSTMSGE
PRINT TAB(18,79);TAB(-1,35);TAB(18,51);TAB(-1,34);MSGE;TAB(-1,35);
?TAB(20,63);"<<< YOU LOSE >>>";
LOST = LOST + 1 : CALL SCORES
GOTO MOREPLAY
GOTIT:
1010 STRY = NOM : FOR COUNT = 1 TO NOM
PRINT TAB(TRY+6,24+(COUNT*2)); "X"
PRINT TAB(5,23-(COUNT*2)); GUESS[STRY,STRY] : STRY = STRY-1
NEXT COUNT
WON = WON + 1 : CALL SCORES
1014 IF TRY = 1 GOTO INONE
CALL WONMSGE
PRINT TAB(18,79);TAB(-1,35);TAB(18,51);TAB(-1,34);MSGE;TAB(-1,35);
?TAB(20,63);"<<<< YOU WIN >>>>";
1016 RETURN
INONE:
KEY = 1
CALL READMSG
1020 MSGE="YOU LUCKY ** BASTARD YOU **"
PRINT TAB(18,79);TAB(-1,35);TAB(18,51);TAB(-1,34);MSGE;TAB(-1,35);
?TAB(20,63);"<<<< YOU WIN >>>>";
RETURN
MOREPLAY: ! NO NOT FOREPLAY
1030 PRINT TAB(23,48); "CARE TO PLAY AGAIN...(Y/N) : ";
ANSWER = "" : TRY = 0 : CLOSE #1
XCALL INPUT,23,77,1,1,"YY",ENTRY,INXCTL,1
?TAB(18,51);SPACE(29);
IF UCS(ENTRY[1,1]) = "Y" GOTO CLEAR
?TAB(23,48);"OH GO ON.....PLEEEEASE !!! ";
XCALL INPUT,23,76,1,1,"YY",ENTRY,INXCTL,1
IF UCS(ENTRY[1,1]) = "Y" GOTO CLEAR
PRINT TAB(-1,0);"S C A R E D Y C A T"; : FOR I = 1 TO 2000 : NEXT I
CHAIN "MN.RUN[110,13]"
PRANS:
1100 STRY = NOM : FOR COUNT = 1 TO NOM
PRINT TAB(5,23-(COUNT*2)); ANSWER[STRY,STRY] : STRY = STRY-1
NEXT COUNT
RETURN
SCORES:
IF WON>LOST GOTO S'WON
IF LOST>WON GOTO S'LOST
PRINT TAB(5,61); "GAMES WON"; TAB(7,61); "GAMES LOST";
1110 PRINT TAB(5,74); WON USING "#,###"; TAB (7,74); LOST USING "#,###"
RETURN
S'WON:
PRINT TAB(5,61); "GAMES";TAB(-1,21);"WON";TAB(-1,22); &
TAB(7,61); "GAMES LOST";
PRINT TAB(5,74); WON USING "#,###"; TAB (7,74); LOST USING "#,###"
RETURN
S'LOST:
PRINT TAB(7,61); "GAMES";TAB(-1,21);"LOST";TAB(-1,22); &
TAB(5,61); "GAMES WON ";
PRINT TAB(5,74); WON USING "#,###"; TAB (7,74); LOST USING "#,###"
RETURN
READMSG:
1155 OPEN #1,"MASTMD.DAT",INPUT
FOR COUNT = 1 TO KEY
INPUT LINE #1,MSGE
NEXT COUNT
RETURN
INSTRUCTION:
1160 PRINT TAB(12,23);"DO YOU REQUIRE INSTRUCTIONS Y/N " : INS = 1
XCALL INPUT,12,58,1,0,"AE",ENTRY,INXCTL,1
IF UCS(ENTRY[1,1]) = "Y" GOTO INSTRUCTIONS
RETURN
ENDIT:
1170 PRINT TAB(-1,0) : CHAIN "MN.RUN" ! QUIT TO MENU PROGRAM
INSTRUCTIONS:
1200 PRINT TAB(2,1);TAB(-1,10); &
"The object of this game is to correctly guess the hidden numbers that the"
?"computer has picked. How many numbers, however, will be chosen by you."
?""
?"You will be asked how many numbers you wish to guess (between 1 and 10)"
?"...If you choose 1 number then that could be anything from 1 to 9"
?"...If you choose 2 numbers then that could be anything from 11 to 99"
?"...If you choose 3 number then that could be anything from 111 to 999"
?""
?"When you make your guess you will be told how close you were....you will"
?"be shown an X for a correct number in the correct position and "
?" O for a correct number in the wrong position"
?""
?"For example If you asked for 4 numbers and the hidden answer is 2324"
?" your guess may be 6423 this would result in you being "
?" given three 'pegs' X O O as to how close you were"
?" - - - "
?"The X would be because you had correctly guessed the position of the"
?"number 2 in the answer. The O O because two other numbers were correctly"
?"guessed but not in the right positions (the 3 & 4 are in the wrong place)."
?"You would NOT get an X and an O for the number 2 in your guess as you"
?"only get a maximum of one 'peg' per number."
input "HAVE A MIND NUMBING GOOD TIME..............RETURN TO CONTINUE",dummy
RETURN
DRAW'HEADER:
?TAB(-1,0);TAB(-1,29);TAB(-1,23);TAB(-1,36);
PRINT TAB(1,51);TAB(-1,33);TAB(1,30);TAB(-1,32); &
" ";TAB(-1,33); &
TAB(23,38);"QZZZZU";TAB(22,38);"S R";
FOR I=1 TO 37 : ?TAB(22,I);"Z"; : IF I<37 ?TAB(22,43+I);"Z";
NEXT I
?TAB(-1,24);
?TAB(23,1);TAB(-1,11);"Courtesy of G. Kirby"; &
TAB(23,60);"Protech Data Systems";TAB(-1,12);TAB(-1,37);
X=21 : Y=21
FOR I=1 TO 37
R=INT(RND(30)*10)+1
IF I<4 OR I>33 R=10
IF R<3 AND X1=0 X1=1 ELSE IF R<5 AND Y1=0 Y1=1
IF X1<>0 X=X-X1 : IF X<19 X1=-1 : X=19
IF Y1<>0 Y=Y-Y1 : IF Y<19 Y1=-1 : Y=19
IF X>21 X=21 : X1=0
IF Y>21 Y=21 : Y1=0
FOR DELAY=1 TO 900 : NEXT DELAY
IF Y=20 ?TAB(19,80-I);" "; &
TAB(20,80-I);NM2[1;1];" "; : &
?TAB(21,81-I);NM2[2;I-1];
IF Y=21 ?TAB(20,80-(I-1));" "; &
TAB(21,81-I);NM2[1;I];
NEXT I
JUMP'INTO'POT:
FOR I=1 TO 9 : FOR DELAY=1 TO 900 : NEXT DELAY
IF I=1 ?TAB(20,38);"\";TAB(19,34);"aaah";
?TAB(21,28+I);" ";NM1[30,38-I];TAB(22,40);NM1[40-I;1];
NEXT I : ?TAB(22,40);" ";
FOR I=1 TO 9 : FOR DELAY=1 TO 900 : NEXT DELAY
IF I=1 ?TAB(19,34);" ";TAB(20,38);" "; : &
?TAB(20,43);"/";TAB(19,44);"aaah";
?TAB(21,44);NM2[I+1,39];TAB(22,41);NM2[I;1];
NEXT I : ?TAB(22,41);" ";TAB(21,44);" ";TAB(20,43);" ";TAB(19,44);" ";
RISE'FROM'POT:
FOR I1=1 TO 10
FOR I=21 TO 2 STEP-1 : ?TAB(I,40);NAME[I1;1];TAB(I+1,40);" ";
FOR DELAY=1 TO 200 : NEXT DELAY
NEXT I
X=(I1*2)-1
IF I1>5 X1=11-I1 : X=((X1+10)+(X1-1))
?TAB(1,30+X);NAME[I1;1];TAB(2,40);" "; : NEXT I1
?TAB(4,1);TAB(-1,28);
RETURN
!--------------------------------------------------------------------------
! Y = ROW X = COL
! W = WIDTH H = HEIGHT
DRAW'BOX:
XCALL TRMCHR,STATUS,TRMCHR'MAP
IF TRMCHR'FLAGS AND 524288 GOTO AM62A
6000 PRINT TAB(-1,23);TAB(Y,X);TAB(-1,38);
FOR I = (X+1) TO (X+W) : PRINT TAB(-1,46); : NEXT I
PRINT TAB(-1,39);
FOR I = (Y+1) TO (Y+H) : PRINT TAB(I,(X+W+1));TAB(-1,47); : NEXT I
PRINT TAB((Y+H+1),(X+W+1));TAB(-1,41);
FOR I = (X+W) TO (X+1) STEP -1 : PRINT TAB((Y+H+1),I);TAB(-1,46); : NEXT I
PRINT TAB((Y+H+1),X);TAB(-1,40);
FOR I = (Y+H) TO (Y+1) STEP -1 : PRINT TAB(I,X);TAB(-1,47); : NEXT I
PRINT TAB(-1,24);
6050 RETURN
AM62A:
HH = H + 32 : WW = W + 32
PRINT TAB(Y,X); TAB(-1,92); CHR(HH); CHR(WW);
RETURN
RESET'BOARD:
TOPL=" ZPZ "
MIDL=" ZXZ "
BOTL=" Z=Z "
SIDEL=" V "
QST=" V "
ANSWER2=" V "
?TAB(2,1);TAB(-1,91);CHR(54);CHR(81);" ";
RETURN