'=========================================================================== ' Subject: MEMORY/CONCENTRATION GAME Date: 07-12-99 (18:49) ' Author: Dennis M. Crudden Code: QB, QBasic, PDS ' Origin: www.geocities.com/~qbasic2/ Packet: GAMES.ABC '=========================================================================== REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ REM + + REM + + REM + + REM + Welcome to Memory + + REM + + REM + By D M Crudden 1996 + + REM + + REM + dennisc896@aol.com + REM + + REM + + REM + + REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ TOP: SCREEN 1: CLS CLEAR REM Timer trap (Obsolete 3 15 92 by use of TIMER and now universal) TIMER ON STARTTIME = TIMER FOR Z = 1 TO 1000 NEXT Z TIMEPAST = TIMER - STARTTIME PAUSER% = 2 REM END TRAP ROUTINE DIM Q%(28) DIM A$(6) M = 0: CO = 0: TU = 0 GOTO TITLESCREEN DRAWSCREEN: REM draw the board ++++++++++++++++++++++++++++++++++++++++++++++ SCREEN 9: CLS FOR Y = 26 TO 298 STEP 70 FOR X = 50 TO 560 STEP 80 LINE (X, Y)-(X + 62, Y + 58), 15, B LINE (X + 1, Y + 1)-(X + 64, Y + 60), 15, B LINE (X + 2, Y + 2)-(X + 61, Y + 57), 12, BF NEXT X NEXT Y LOCATE 1, 10 PRINT "1 2 3 4 5 6 7" LOCATE 5, 3: PRINT "a" LOCATE 10, 3: PRINT "b" LOCATE 15, 3: PRINT "c" LOCATE 20, 3: PRINT "d" REM MAIN LOOP STARTS HERE *********************************************** START: X = X + 1: IF X > P THEN X = 1 PICK1: TU = TU + 1 C = 1 LOCATE 23, 3: PRINT " " LOCATE 23, 3: PRINT A$(X); "'s turn choose card one "; INPUT O$ GOTO legit1 PICK2: C = 2 LOCATE 23, 3: PRINT " " LOCATE 23, 3: PRINT A$(X); "'s turn choose card two "; INPUT T$ GOTO LEGIT2 TITLESCREEN: REM Opening Title Page+++++++++++++++++++++++++++++++++++++++++ SCREEN 0 CLS COLOR 15 X$ = "W E L C O M E T O M E M O R Y" LOCATE 12, 5 FOR A = 1 TO LEN(X$) STEP 2 PRINT MID$(X$, A, 2); SOUND 600 * RND + 400, 4 * RND NEXT NOW! = TIMER DO LOOP UNTIL TIMER > NOW! + 2 LOCATE 14, 9 PRINT " By CruddenSoft 1996" REM dennisc896@aol.com SOUND 40, 15 LOCATE 20, 1 REM music from Cats..... PLAY "MBl3 cc" PLAY "l9cdccc" PLAY "l9cdc 0 AND P < 6 THEN EXIT DO LOOP DIM S%(P) FOR X = 1 TO P PRINT "Player number "; X; ", enter your name: ": INPUT A$(X) IF LEN(A$(X)) > 8 THEN A$(X) = LEFT$(A$(X), 8) NEXT X REM randomize +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ RANDOMIZE TIMER DIM T%(28): DIM P%(28) FOR J = 1 TO 28: P%(J) = J: NEXT FOR J = 1 TO 28 I = INT(RND(2) * 27) + 1 T% = P%(J): P%(J) = P%(I): P%(I) = T%: NEXT FOR X = 1 TO 28 IF P%(X) > 14 THEN LET P%(X) = P%(X) - 14 NEXT X GOTO DRAWSCREEN legit1: IF LEN(O$) <> 2 THEN SOUND 40, 10: GOTO PICK1 L$ = LEFT$(O$, 1) IF L$ <> "a" AND L$ <> "b" AND L$ <> "c" AND L$ <> "d" THEN SOUND 40, 10: GOTO PICK1 L$ = RIGHT$(O$, 1) L = VAL(L$) IF L > 7 OR L < 1 THEN SOUND 40, 10: GOTO PICK1 LET L$ = O$: C = 1 GOTO SCREENLOCATION LEGIT2: IF LEN(T$) <> 2 THEN SOUND 40, 10: GOTO PICK2 L$ = LEFT$(T$, 1) IF L$ <> "a" AND L$ <> "b" AND L$ <> "c" AND L$ <> "d" THEN SOUND 40, 10: GOTO PICK2 L$ = RIGHT$(T$, 1) L = VAL(L$) IF L > 7 OR L < 1 THEN SOUND 40, 10: GOTO PICK2 LET L$ = T$: C = 2 IF O$ = T$ THEN SOUND 40, 10: C = 2: CO = 3: GOTO PICK2 SCREENLOCATION: K$ = LEFT$(L$, 1) IF K$ = "a" THEN V(C) = 26: K(C) = 0 IF K$ = "b" THEN V(C) = 96: K(C) = 7 IF K$ = "c" THEN V(C) = 166: K(C) = 14 IF K$ = "d" THEN V(C) = 236: K(C) = 21 K$ = RIGHT$(L$, 1) O = VAL(K$) H(C) = ((O - 1) * 80) + 50 SQ(C) = K(C) + O IF Q%(SQ(C)) = 5 THEN SOUND 40, 10: GOTO START REM DRAW THE SHAPES+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Q = SQ(C) QU = P%(Q) PAINT (H(C) + 2, V(C) + 2), 0 IF QU = 1 THEN GOTO shape1 IF QU = 2 THEN GOTO shape2 IF QU = 3 THEN GOTO shape3 IF QU = 4 THEN GOTO shape4 IF QU = 5 THEN GOTO shape5 IF QU = 6 THEN GOTO shape6 IF QU = 7 THEN GOTO shape7 IF QU = 8 THEN GOTO shape8 IF QU = 9 THEN GOTO shape9 IF QU = 10 THEN GOTO shape10 IF QU = 11 THEN GOTO SHAPE11 IF QU = 12 THEN GOTO shape12 IF QU = 13 THEN GOTO shape13 IF QU = 14 THEN GOTO shape14 shape1: REM Triangle R(1) = H(C) + 3: R(2) = H(C) + 58 Y(1) = V(C) + 3: Y(2) = V(C) + 58 LINE (R(1), Y(2))-(R(2), Y(1)), 15 LINE (R(2), Y(1))-(R(2), Y(2)), 15 LINE (R(2), Y(2))-(R(1), Y(2)), 15 PAINT (H(C) + 54, V(C) + 54), 9, 15 GOTO NEXTCARD shape2: REM Meatball CIRCLE (H(C) + 32, V(C) + 30), 28, 13 PAINT (H(C) + 32, V(C) + 30), 13, 13 CIRCLE (H(C) + 32, V(C) + 30), 16, 1 PAINT (H(C) + 32, V(C) + 30), 1, 1 GOTO NEXTCARD shape3: REM hollow square LINE (H(C) + 3, V(C) + 3)-(H(C) + 58, V(C) + 56), 14, BF LINE (H(C) + 13, V(C) + 13)-(H(C) + 48, V(C) + 46), 0, BF GOTO NEXTCARD shape4: REM checkerboard LINE (H(C) + 6, V(C) + 6)-(H(C) + 58, V(C) + 58), 15, BF LINE (H(C) + 8, V(C) + 8)-(H(C) + 24, V(C) + 24), 12, BF LINE (H(C) + 8, V(C) + 40)-(H(C) + 24, V(C) + 56), 12, BF LINE (H(C) + 24, V(C) + 24)-(H(C) + 40, V(C) + 40), 12, BF LINE (H(C) + 40, V(C) + 8)-(H(C) + 56, V(C) + 24), 12, BF LINE (H(C) + 40, V(C) + 40)-(H(C) + 56, V(C) + 56), 12, BF GOTO NEXTCARD shape5: REM diamond LINE (H(C) + 32, V(C) + 6)-(H(C) + 58, V(C) + 32), 10 LINE (H(C) + 58, V(C) + 32)-(H(C) + 32, V(C) + 58), 10 LINE (H(C) + 32, V(C) + 58)-(H(C) + 6, V(C) + 32), 10 LINE (H(C) + 6, V(C) + 32)-(H(C) + 32, V(C) + 6), 10 PAINT (H(C) + 32, V(C) + 32), 10, 10 GOTO NEXTCARD shape6: REM pink square LINE (H(C) + 10, V(C) + 10)-(H(C) + 54, V(C) + 54), 5, BF LINE (H(C) + 10, V(C) + 25)-(H(C) + 54, V(C) + 39), 14, BF GOTO NEXTCARD: shape7: REM 2 tall red deals LINE (H(C) + 6, V(C) + 6)-(H(C) + 28, V(C) + 58), 13, BF LINE (H(C) + 36, V(C) + 6)-(H(C) + 58, V(C) + 58), 13, BF GOTO NEXTCARD: shape8: REM red square white square LINE (H(C) + 6, V(C) + 6)-(H(C) + 32, V(C) + 32), 15, BF LINE (H(C) + 32, V(C) + 32)-(H(C) + 58, V(C) + 58), 12, BF GOTO NEXTCARD: shape9: REM cross plus LINE (H(C) + 29, V(C) + 6)-(H(C) + 34, V(C) + 58), 15, BF LINE (H(C) + 6, V(C) + 29)-(H(C) + 58, V(C) + 34), 15, BF GOTO NEXTCARD: shape10: REM PC LINE (H(C) + 6, V(C) + 58)-(H(C) + 58, V(C) + 58), 15 LINE (H(C) + 6, V(C) + 58)-(H(C) + 12, V(C) + 42) LINE (H(C) + 58, V(C) + 58)-(H(C) + 52, V(C) + 42) LINE (H(C) + 12, V(C) + 42)-(H(C) + 52, V(C) + 42) LINE (H(C) + 12, V(C) + 6)-(H(C) + 52, V(C) + 38), 15, B LINE (H(C) + 18, V(C) + 12)-(H(C) + 46, V(C) + 32), 7, BF GOTO NEXTCARD: SHAPE11: REM 2 wide hollow boxes LINE (H(C) + 6, V(C) + 6)-(H(C) + 58, V(C) + 28), 11, BF LINE (H(C) + 6, V(C) + 36)-(H(C) + 58, V(C) + 58), 7, BF GOTO NEXTCARD: shape12: LINE (H(C) + 6, V(C) + 6)-(H(C) + 58, V(C) + 58), 7, BF CIRCLE (H(C) + 32, V(C) + 32), 22, 9 PAINT (H(C) + 16, V(C) + 32), 9, 9 GOTO NEXTCARD: shape13: CIRCLE (H(C) + 32, V(C) + 32), 28, 15 PAINT (H(C) + 32, V(C) + 32), 15 LINE (H(C) + 16, V(C) + 16)-(H(C) + 48, V(C) + 48), 5, BF GOTO NEXTCARD shape14: LINE (H(C) + 6, V(C) + 6)-(H(C) + 58, V(C) + 58), 15, B LINE (H(C) + 10, V(C) + 10)-(H(C) + 54, V(C) + 54), 15, B LINE (H(C) + 14, V(C) + 14)-(H(C) + 50, V(C) + 50), 15, B LINE (H(C) + 18, V(C) + 18)-(H(C) + 46, V(C) + 46), 15, B NEXTCARD: IF C = 1 THEN GOTO PICK2 REM CHECK FOR MATCH======================================================= IF P%(SQ(1)) = P%(SQ(2)) THEN GOTO MATCH NOW! = TIMER DO LOOP UNTIL TIMER > NOW! + 2 ERASECARD: C = 1: GOTO ERA ERA: LINE (H(C), V(C))-(H(C) + 64, V(C) + 60), 0, BF LINE (H(C), V(C))-(H(C) + 62, V(C) + 58), 15, B LINE (H(C) + 1, V(C) + 1)-(H(C) + 64, V(C) + 60), 15, B PAINT (H(C) + 2, V(C) + 2), 12, 15 IF C = 1 THEN C = 2: GOTO ERA GOTO START MATCH: REM match!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! LOCATE 23, 3: PRINT " IT'S A MATCH !!! " MUS% = MUS% + 1: IF MUS% = 4 THEN MUS% = 1 SELECT CASE MUS% CASE 1 FOR S = 800 TO 1200 STEP 15 SOUND S, 2 NEXT S CASE 2: REM Thanks for the Memories PLAY "MBl3cl2al2g.l8ga>c NOW! + 1 LET M = M + 1 IF M = 14 THEN GOTO scores C = 1 CLEARTHEM: LINE (H(C), V(C))-(H(C) + 64, V(C) + 60), 0, BF IF C = 1 THEN C = 2: GOTO CLEARTHEM GOTO PICK1 scores: REM show scores++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOUND 8000, 1 SCREEN 0: WIDTH 40 CLS : COLOR 15, 0 NOW! = TIMER DO LOOP UNTIL TIMER > NOW! + 2 LOCATE 6, 1 FOR Z = 1 TO P Q$ = A$(Z) + " Has" + STR$(S%(Z)) + " Matches" GOSUB CLICKER PRINT : PRINT NEXT Z PRINT Q$ = "Scoring avg.=" + STR$(INT(100 * (14 / TU))) + "% of tries" GOSUB CLICKER Q$ = " yield match" GOSUB CLICKER PRINT : PRINT IF TU < 27 THEN Q$ = " EXCELLENT! " IF TU > 26 AND TU < 37 THEN Q$ = " GOOD" IF TU > 36 THEN Q$ = " TERRIBLE!" GOSUB CLICKER PRINT : PRINT Q$ = "Touch P to play again" GOSUB CLICKER DO A$ = INKEY$ IF A$ = "p" OR A$ = "P" THEN GOTO TOP LOOP CLICKER: FOR I = 1 TO LEN(Q$) PRINT MID$(Q$, I, 1); SOUND 10000, 1 FOR X = 1 TO 15: NEXT X NEXT I RETURN SUB legit1 END SUB