'=========================================================================== ' Subject: MASTERMIND GAME Date: 11-18-98 (18:10) ' Author: Dominik Kaspar Code: QB, QBasic, PDS ' Origin: pedok@pop.agri.ch Packet: GAMES.ABC '=========================================================================== 'MasterMind programmed by: Dominik Kaspar ' Ahornweg 15 ' 5615 Fahrwangen ' Switzerland (pedok@pop.agri.ch) DECLARE SUB IMPUT (Text$, Range!, Row!, Col!, Hide) DECLARE SUB HighScore () DECLARE SUB Instructions () DECLARE SUB PlayGame () DECLARE SUB Center (Row!, Text$) DECLARE SUB EnterPassword () RANDOMIZE TIMER TYPE HighScoreTopTen Score AS INTEGER Time AS INTEGER PName AS STRING * 20 END TYPE DIM SHARED TopTen AS HighScoreTopTen DIM SHARED Time Time = TIMER DIM SHARED Score, PlayTime DIM SHARED Answer$ DIM SHARED Password$, Password MAINMENU: COLOR , 1 CLS COLOR 14, 4 Center 2, "Ι" + STRING$(47, 205) + "»" Center 3, "Ί Ί" Center 4, "Ί ΙΝΝΛΝΝ» ΙΝΝΝ» ΙΝΝΝ ΝΝΛΝΝ ΙΝΝΝΝ ΙΝΝΝ» Ί" Center 5, "Ί Ί Ί Ί Ί Ί Ί Ί Ί Ί Ί Ί" Center 6, "Ί Ί Ί Ί ΜΝΝΝΉ ΘΝΝ» Ί ΜΝΝ ΜΝΝΛΌ Ί" Center 7, "Ί Ί Ί Ί Ί Ί Ί Ί Ί Ί Ί Ί" Center 8, "Ί Ί Ί Ί Ί Ί ΝΝΝΌ Ί ΘΝΝΝΝ Ί Ί Ί" Center 9, "Ί" + STRING$(47, 32) + "Ί" Center 10, "Ί ΙΝΝΛΝΝ» Ί ΙΝΝΝΝ» Ί Ί" Center 11, "Ί Ί Ί Ί Ί Ί Ί Ί" Center 12, "Ί Ί Ί Ί Ί Ί Ί ΙΝΝΝΝΉ 1997 by Ί" Center 13, "Ί Ί Ί Ί Ί Ί Ί Ί Ί Dominik Ί" Center 14, "Ί Ί Ί Ί Ί Ί Ί ΘΝΝΝΝΌ Kaspar. Ί" Center 15, "Ί Ί" Center 16, "Θ" + STRING$(47, 205) + "Ό" Center 18, "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" Center 19, "Ί [1] Play the game! Ί" Center 20, "Ί [2] Instructions Ί" Center 21, "Ί [3] View High Score Ί" Center 22, "Ί [4] Quit Ί" Center 23, "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ" CHOICE: DO Key$ = INKEY$ LOOP UNTIL LEN(Key$) SELECT CASE VAL(Key$) CASE 1: PlayGame CASE 2: Instructions CASE 3: Score = 0: HighScore CASE 4: GOSUB QUIT CASE ELSE: GOTO CHOICE END SELECT GOTO MAINMENU QUIT: PCOPY 0, 1: COLOR 15, 2 Min = CINT(INT(TIMER - Time) / 60) Min$ = STR$(Min) + " Minute(s)!" + SPACE$(11 - LEN(STR$(Min))) + "Ί" Center 10, "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" Center 11, "Ί Are you a hundred percent sure that you Ί" Center 12, "Ί want to quit this program NOW (Y/N)? Ί" Center 13, "Ί You only played for" + Min$ Center 14, "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ" CHOICE2: a$ = "": DO: a$ = INKEY$: LOOP WHILE a$ = "" SELECT CASE UCASE$(a$) CASE "Y": SYSTEM CASE "N": PCOPY 1, 0: COLOR 15, 2: RETURN CASE ELSE: GOTO CHOICE2 END SELECT SUB Center (Row, Text$) LOCATE Row, (80 - LEN(Text$)) \ 2 PRINT Text$; END SUB SUB EnterPassword Center 18, "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" Center 19, "Ί Ί" Center 20, "Ί [1] Apply Password Ί" Center 21, "Ί [2] Change Password Ί" Center 22, "Ί Ί" Center 23, "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ" OPEN "MASTER.PSW" FOR RANDOM AS #1 LEN = 62 IF LOF(1) = 0 THEN StandardPassword$ = "ΘΠΘΘΡΟΙΙΝΙΙΝΙΙΡΙΙΙΙΙΜΙΘΘ" PUT #1, 1, StandardPassword$ END IF GET #1, 1, Encrypt$ FOR i = 1 TO LEN(Encrypt$) MID$(Encrypt$, i, 1) = LTRIM$(STR$(ASC(MID$(Encrypt$, i, 1)) - 200)) NEXT i Password$ = "" FOR i = 1 TO LEN(Encrypt$) STEP 3 Password$ = Password$ + CHR$(VAL(MID$(Encrypt$, i, 3))) NEXT i CHOICE5: DO: Key$ = INKEY$: LOOP UNTIL LEN(Key$) SELECT CASE VAL(Key$) CASE 1: GOTO APPLY CASE 2: GOTO CHANGE CASE ELSE: GOTO CHOICE5 END SELECT APPLY: Center 18, "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" Center 19, "Ί Ί" Center 20, "Ί Enter your password: Ί" Center 21, "Ί Ί" Center 22, "Ί Ί" Center 23, "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ" IMPUT "", 20, 21, 29, 1 LOCATE 21, 30 IF Answer$ = Password$ THEN PRINT "Password is OK! " Password = 1 ELSE PRINT "Wrong Password! " Password = 0 END IF DO: LOOP UNTIL INKEY$ = CHR$(13) CLOSE #1 EXIT SUB CHANGE: Center 18, "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" Center 19, "Ί Ί" Center 20, "Ί Enter old password: Ί" Center 21, "Ί Ί" Center 22, "Ί Ί" Center 23, "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ" IMPUT "", 20, 21, 29, 1 IF Answer$ = Password$ THEN Center 18, "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" Center 19, "Ί Ί" Center 20, "Ί Enter new password: Ί" Center 21, "Ί Ί" Center 22, "Ί Ί" Center 23, "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ" IMPUT "", 20, 21, 29, 1 Encrypt$ = "" FOR i = 1 TO LEN(Answer$) Z$ = LTRIM$(STR$(ASC(MID$(Answer$, i, 1)))) Encrypt$ = Encrypt$ + STRING$(3 - LEN(Z$), ASC(CHR$(48))) + Z$ NEXT i FOR i = 1 TO LEN(Encrypt$) MID$(Encrypt$, i, 1) = CHR$(VAL(MID$(Encrypt$, i, 1)) + 200) NEXT i PUT #1, 1, Encrypt$ LOCATE 21, 30: PRINT "New Password saved. " ELSE LOCATE 21, 30: PRINT "Wrong Password! " END IF DO: LOOP UNTIL INKEY$ = CHR$(13) CLOSE #1 END SUB SUB HighScore COLOR , 1: CLS LOCATE 3, 10: PRINT "Loading... (please wait)" COLOR 14, 4 LOCATE 2, 60: PRINT "ΙΝΝΝΝΝΝΝΝΝΝΝΝ»" LOCATE 3, 60: PRINT "Ί HIGH SCORE Ί" LOCATE 4, 60: PRINT "ΘΝΝΝΝΝΝΝΝΝΝΝΝΌ" OPEN "MASTER.TOP" FOR RANDOM AS #1 LEN = LEN(TopTen) IF LOF(1) = 0 THEN FOR i = 1 TO 10 TopTen.Score = 10 TopTen.Time = 10000 TopTen.PName = "No Entry" PUT #1, i, TopTen NEXT i END IF COLOR 14, 4 LOCATE 2, 2: PRINT "ΙΝΝΝΝΝΝΝΛΝΝΝΝΝΝΝΛΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" FOR i = 3 TO 23 LOCATE i, 2 IF i MOD 2 = 0 THEN PRINT "ΜΝΝΝΝΝΝΝΞΝΝΝΝΝΝΝΞΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΉ" ELSE PRINT "Ί Ί Ί Ί" END IF NEXT i LOCATE 24, 2: PRINT "ΘΝΝΝΝΝΝΝΚΝΝΝΝΝΝΝΚΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ"; LOCATE 3, 4: PRINT "SCORE" LOCATE 3, 12: PRINT "TIME" LOCATE 3, 20: PRINT "NAME" IF Score > 0 THEN Place = 0 FOR i = 1 TO 10 GET #1, i, TopTen IF Place = 0 THEN IF (Score * 100000 + PlayTime) <= (TopTen.Score * 100000 + TopTen.Time) THEN Place = i FOR j = 9 TO i STEP -1 GET #1, j, TopTen PUT #1, j + 1, TopTen NEXT j LOCATE 7, 51: PRINT "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" LOCATE 8, 51: PRINT "Ί You reached a place Ί" LOCATE 9, 51: PRINT "Ί the Top 10. Ί" LOCATE 10, 51: PRINT "Ί Please Enter your Ί" LOCATE 11, 51: PRINT "Ί name or initials... Ί" LOCATE 12, 51: PRINT "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ" LOCATE 3 + Place * 2, 3: PRINT Score; LOCATE , 11: PRINT PlayTime; IF Password = 1 THEN DIM Cheat$(3) Cheat$(0) = "A mean cheater" Cheat$(1) = "An insidious fraud" Cheat$(2) = "Some swindler" Cheat$(3) = "A nasty thief" Answer$ = Cheat$(INT(RND * 4)) ELSE IMPUT "", 20, 3 + Place * 2, 19, 0 END IF TopTen.PName = Answer$ TopTen.Score = Score TopTen.Time = PlayTime PUT #1, i, TopTen END IF END IF LOCATE 3 + i * 2, 3: PRINT TopTen.Score; LOCATE , 11: PRINT TopTen.Time; LOCATE , 20: PRINT TopTen.PName NEXT i ELSE FOR i = 1 TO 10 GET #1, i, TopTen LOCATE 3 + i * 2, 3: PRINT TopTen.Score; LOCATE , 11: PRINT TopTen.Time; LOCATE , 20: PRINT TopTen.PName NEXT i END IF LOCATE 22, 49: PRINT "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" LOCATE 23, 49: PRINT "Ί press ESC to continue Ί" LOCATE 24, 49: PRINT "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ"; CLOSE #1 DO: LOOP UNTIL INKEY$ = CHR$(27) END SUB SUB IMPUT (Text$, Range, Row, Col, Hide) PRINT Text$ Answer$ = "" DO DO a$ = INKEY$ LOOP WHILE a$ = "" IF ASC(a$) = 8 THEN IF LEN(Answer$) > 0 THEN Answer$ = LEFT$(Answer$, LEN(Answer$) - 1): GOTO 1 END IF SELECT CASE ASC(a$) CASE 13: EXIT DO CASE 32 TO 255: IF LEN(Answer$) = Range THEN GOTO 1 Answer$ = Answer$ + a$ END SELECT 1 : LOCATE Row, Col + LEN(Text$) + 1 IF Hide = 0 THEN PRINT Answer$; ELSE PRINT STRING$(LEN(Answer$), 42); PRINT SPACE$(Range - (LEN(Answer$))) a$ = "" LOOP END SUB SUB Instructions COLOR 14, 1 CLS COLOR , 4 Center 2, "Ι" + STRING$(29, 205) + "»" Center 3, "Ί Instructions to Master Mind Ί" Center 4, "Θ" + STRING$(29, 205) + "Ό" COLOR , 1 Center 7, "This is a game to get your old brain cells in new shape!" Center 9, "The computer will create a four digit random number that you have to" Center 10, "find out by guessing and making smart conclusions." Center 11, "The only hints the computer provides for you are how many digits of" Center 12, "your guess are correct, and how many are on the wrong place but" Center 13, "included in the computer's number." Center 15, "If you reach a good score, you might be able to join the High Score" Center 16, "and immortalize your name (till someone beats you)." Center 18, "GOOD LUCK and HAVE FUN!" COLOR 14, 4 LOCATE 22, 49: PRINT "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" LOCATE 23, 49: PRINT "Ί press ESC to continue Ί" LOCATE 24, 49: PRINT "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ"; DO: LOOP UNTIL INKEY$ = CHR$(27) END SUB SUB PlayGame Center 18, "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" Center 19, "Ί Choose one: Ί" Center 20, "Ί [1] Let's play! Ί" Center 21, "Ί [2] Password Ί" Center 22, "Ί [3] Main Menu Ί" Center 23, "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ" CHOICE3: DO: Key$ = INKEY$: LOOP UNTIL LEN(Key$) SELECT CASE VAL(Key$) CASE 1: CASE 2: EnterPassword CASE 3: EXIT SUB CASE ELSE: GOTO CHOICE3 END SELECT PLAYBEGINS: Score = 0 PlayTime = TIMER Number$ = "" DO N$ = LTRIM$(STR$(INT(RND * 10))) IF INSTR(1, Number$, N$) = 0 THEN Number$ = Number$ + N$ LOOP UNTIL LEN(Number$) = 4 COLOR , 1: CLS COLOR 14, 4 LOCATE 2, 2: PRINT "ΙΝΝΝΛΝΝΝΛΝΝΝΛΝΝΝ»" FOR i = 3 TO 23 LOCATE i, 2 IF i MOD 2 = 0 THEN PRINT "ΜΝΝΝΞΝΝΝΞΝΝΝΞΝΝΝΉ" ELSE PRINT "Ί Ί Ί Ί Ί" END IF NEXT i LOCATE 24, 2: PRINT "ΘΝΝΝΚΝΝΝΚΝΝΝΚΝΝΝΌ"; FOR i = 4 TO 16 STEP 4 LOCATE 23, i IF Password = 1 THEN PRINT MID$(Number$, i / 4, 1) ELSE PRINT "?" END IF NEXT i LOCATE 22, 21: PRINT "ΙΝΝΝΛΝΝΝΛΝΝΝΛΝΝΝ»" LOCATE 23, 21: PRINT "Ί Ί Ί Ί Ί" LOCATE 24, 21: PRINT "ΘΝΝΝΚΝΝΝΚΝΝΝΚΝΝΝΌ"; COLOR , 1: LOCATE 23, 40: PRINT "MAKE YOUR GUESS [choose a number]" Guess$ = "" CHOICE4: COLOR 10, 4 FOR i = 1 TO 4 LOCATE 23, 19 + i * 4 IF MID$(Guess$, i, 1) = "" THEN PRINT CHR$(32) ELSE PRINT MID$(Guess$, i, 1) END IF NEXT i Guess$ = RTRIM$(Guess$) DO: Key$ = INKEY$: LOOP UNTIL LEN(Key$) SELECT CASE ASC(Key$) CASE 48 TO 57: IF LEN(Guess$) < 4 THEN Guess$ = Guess$ + Key$ GOTO CHOICE4 CASE 8: IF LEN(Guess$) > 0 THEN Guess$ = LEFT$(Guess$, LEN(Guess$) - 1) GOTO CHOICE4 CASE 13: IF LEN(Guess$) < 4 THEN GOTO CHOICE4 CASE 27: PCOPY 0, 1: COLOR 15, 2 Center 10, "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" Center 11, "Ί Do you really want to quit playing Ί" Center 12, "Ί this game of Master Mind (Y/N)? Ί" Center 13, "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ" DO: Key$ = INKEY$: LOOP UNTIL LEN(Key$) IF UCASE$(Key$) = "Y" THEN GameQuit = 1: GOTO GAMEOVER ELSE PCOPY 1, 0: GOTO CHOICE4 END IF CASE ELSE: GOTO CHOICE4 END SELECT Score = Score + 1 Correct = 0 WrongPlace = 0 FOR i = 1 TO 4 IF MID$(Guess$, i, 1) = MID$(Number$, i, 1) THEN Correct = Correct + 1 ELSE IF INSTR(Guess$, MID$(Number$, i, 1)) THEN WrongPlace = WrongPlace + 1 END IF NEXT i COLOR 14, 1 LOCATE 1 + 2 * Score, 20 PRINT "CORRECT: "; Correct, "WRONG PLACE: "; WrongPlace; COLOR 13, 4 FOR i = 4 TO 16 STEP 4 LOCATE 1 + 2 * Score, i PRINT MID$(Guess$, i / 4, 1) NEXT i IF Correct = 4 THEN PlayTime = CINT(TIMER - PlayTime) PlayTime$ = STR$(PlayTime) + " seconds" + STRING$(23 - LEN(STR$(PlayTime)), 32) + "Ί" Tries$ = STR$(Score) + STRING$(31 - LEN(STR$(Score)), 32) + "Ί" COLOR 15, 2 Center 10, "Ι" + STRING$(38, 205) + "»" Center 11, "Ί YOU WON THIS GAME! Ί" Center 12, "Ί The right number was " + Number$ + " Ί" Center 13, "Ί Tries:" + Tries$ Center 14, "Ί Time :" + PlayTime$ Center 15, "Ί Let's have a look at the High Score. Ί" Center 16, "Θ" + STRING$(38, 205) + "Ό" DO: LOOP UNTIL INKEY$ = CHR$(13) HighScore EXIT SUB END IF GAMEOVER: IF Score = 10 OR GameQuit = 1 THEN IF GameQuit = 1 THEN GameStr$ = "QUIT" ELSE GameStr$ = "LOST" COLOR 15, 2 Center 10, "ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ»" Center 11, "Ί YOU " + GameStr$ + " THE GAME! Ί" Center 12, "Ί The right Number: Ί" Center 13, "Ί " + Number$ + " Ί" Center 14, "ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ" DO: LOOP UNTIL INKEY$ = CHR$(13) EXIT SUB END IF Guess$ = " " GOTO CHOICE4 END SUB