1 ' ********************************************************** 2 ' 3 ' This program plays the game of concentration. 4 ' There are 12 possible levels of difficulty. 5 ' The program can handle from 1 to 6 players. 6 ' - programmed by Anne Taft 7 ' 8 ' ********************************************************* 10 CLS 12 OPTION BASE 1 14 DEFINT X 16 DIM XUSED(52),XSCORE(6) 18 DIM T$(52),CARD$(52),P$(6) 100 REM ******** initialize game ************* 150 GOSUB 1400 ' # of players & skill level 190 RESTORE 300 200 FOR X = 1 TO XNL 210 READ N$ 220 CARD$(X) = N$ + CHR$(3) 230 CARD$(X+XNL) = N$ + CHR$(4) 240 CARD$(X+(2*XNL)) = N$ + CHR$(5) 250 CARD$(X+(3*XNL)) = N$ + CHR$(6) 260 NEXT X 270 FOR X = 1 TO XN 280 XUSED(X) = 0 290 NEXT X 300 DATA " A"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9","10"," J"," Q"," K" 310 FOR XX = 1 TO 2 320 N = VAL(MID$(TIME$,7,2)) 330 RANDOMIZE N 340 REM ****** SHUFFLE AND DEAL ****** 350 FOR X = 1 TO (XN-1) 360 XL = INT((XN+1-X)*RND(1)+1) 370 SWAP CARD$(X) , CARD$(XL+X-1) 380 NEXT X 390 NEXT XX 395 RESTORE 440 400 FOR X = 1 TO XN 410 READ N$ 420 T$(X) = N$ 430 NEXT X 440 DATA " 1 "," 2 "," 3 "," 4 "," 5 "," 6 "," 7 "," 8 "," 9 "," 10"," 11"," 12" 450 DATA " 13"," 14"," 15"," 16"," 17"," 18"," 19"," 20"," 21"," 22"," 23"," 24" 460 DATA " 25"," 26"," 27"," 28"," 29"," 30"," 31"," 32"," 33"," 34"," 35"," 36" 470 DATA " 37"," 38"," 39"," 40"," 41"," 42"," 43"," 44"," 45"," 46"," 47"," 48" 480 DATA " 49"," 50"," 51"," 52" 490 INPUT "Press RETURN to start the game", N$ 500 FOR X=1 TO XPN: XSCORE(X) = 0:NEXT X 505 XSUM = 0 510 MATCH = 0 512 XT = 1 520 XTURN = 0 530 REM *********** START OF MAJOR LOOP ************************* 535 XTURN = XTURN + 1 540 GOSUB 1120 'DISPLAY ROUTINE 550 IF XPN=1 THEN PRINT ELSE PRINT P$(XT);"'S TURN:" 560 INPUT "First card selected: ",XTRY1 570 IF XTRY1 < 1 THEN GOTO 600 580 IF XTRY1 > XN THEN GOTO 600 590 GOTO 620 600 PRINT "Please choose a card number between 1 and ";XN;"." 610 GOTO 560 620 FOR X = 1 TO XN 630 IF XTRY1 =XUSED(X) GOTO 660 640 NEXT X 650 GOTO 690 660 PRINT "The card you have chosen has already been matched." 670 PRINT "Please choose another card." 680 GOTO 560 690 INPUT "Second card selected: ",XTRY2 700 IF XTRY2 < 1 THEN GOTO 760 710 IF XTRY2 > XN THEN GOTO 760 720 IF XTRY2 <> XTRY1 THEN GOTO 780 730 PRINT "That card was your first selection." 740 PRINT "Please choose a different card." 750 GOTO 690 760 PRINT "Please choose a card number between 1 and ";XN;"." 770 GOTO 690 780 FOR X = 1 TO XN 790 IF XTRY2 = XUSED(X) THEN GOTO 820 800 NEXT X 810 GOTO 850 820 PRINT "The card you have chosen has already been matched." 830 PRINT "Please choose another card." 840 GOTO 690 850 IF LEFT$(CARD$(XTRY1),2) = LEFT$(CARD$(XTRY2),2) THEN MATCH = 1 860 TEMP1$ = T$(XTRY1) 870 T$(XTRY1) = CARD$(XTRY1) 880 TEMP2$ = T$(XTRY2) 890 T$(XTRY2) = CARD$(XTRY2) 900 GOSUB 1120 'DISPLAY ROUTINE 910 IF MATCH = 0 GOTO 915 912 PRINT: PRINT " GOOD! You have a match!" 915 REM 925 IF LEFT$(N$,1) = "0" GOTO 1010 930 IF MATCH = 1 GOTO 960 940 T$(XTRY1) = TEMP1$ 950 T$(XTRY2) = TEMP2$ 960 REM 970 IF MATCH=1 THEN XSCORE(XT)=XSCORE(XT)+1: XSUM=XSUM+1 980 IF MATCH = 1 THEN XUSED((2*XSUM)-1) = XTRY1 990 IF MATCH = 1 THEN XUSED(2*XSUM) = XTRY2 995 XT=XT+1:IF XT>XPN THEN XT=1 ' WHO'S NEXT? 1000 MATCH = 0 1001 PRINT: PRINT 1002 INPUT "Strike RETURN to continue, 0 to quit: ",N$ 1003 IF (2*XSUM) >= XN GOTO 1010 1004 IF LEFT$(N$,1) = "0" GOTO 1010 1005 GOTO 530 1010 REM *************END OF MAJOR LOOP***************************** 1020 GOSUB 1300 ' scoring routine 1030 INPUT "Do you want to play another game now? ", N$ 1040 A$ = LEFT$(N$,1) 1050 IF A$ = "Y" GOTO 100 1060 IF A$ = "y" GOTO 100 1070 IF A$ = "N" GOTO 1220 1080 IF A$ = "n" GOTO 1220 1090 PRINT "Please answer yes or no:" 1100 GOTO 1030 1110 REM **********DISPLAY ROUTINE************************** 1120 GOSUB 1250 'CLS AND PRINT HEADING 1130 XTAB = (77-5*(XNL-1))\2 1150 FOR XR = 0 TO 3 1160 PRINT: PRINT: PRINT TAB(XTAB); 1170 FOR X = 1 TO XNL 1180 PRINT T$(X+(XR*XNL));SPACE$(2); 1190 NEXT X 1200 NEXT XR 1205 PRINT 1210 RETURN 1215 REM **********END OF PROGRAM************************* 1220 PRINT "Goodbye. " 1230 END 1250 REM ********CLEAR SCREEN & PRINT HEADING ************ 1260 CLS:PRINT:PRINT:PRINT TAB(33);"CONCENTRATION" 1270 PRINT:PRINT:RETURN 1300 REM *********** FINAL SCORING ************************ 1310 GOSUB 1250 1320 IF XPN > 1 THEN GOTO 1350 1330 PRINT TAB(10);"Your score is ";XSCORE(1);" matches in ";XTURN;" tries." 1340 PRINT: RETURN 1350 FOR X = 1 TO XPN 1360 PRINT TAB(10);"Score of ";P$(X);" is ";XSCORE(X);" matches." 1370 PRINT: NEXT X 1380 RETURN 1400 REM ***** selection of no. of players and skill level ****** 1410 GOSUB 1250 'CLS and print heading 1420 INPUT "From 1 to 6 players may play. How many this time? ",XPN 1430 IF XPN = 1 THEN GOTO 1500 1440 IF (XPN>6)OR(XPN<1) GOTO 1410 1450 FOR X = 1 TO XPN 1460 PRINT:PRINT "Name of player # ";X:INPUT " : ",P$(X) 1470 NEXT X 1500 REM *** skill level *** 1510 GOSUB 1250 'CLS and print heading 1520 PRINT "You can play at any one of 12 different levels of skill." 1540 PRINT TAB(10);"B - Beginner - easy";TAB(40);"6 - Intermediate" 1550 PRINT TAB(10);"1";TAB(40);"7" 1560 PRINT TAB(10);"2";TAB(40);"8 - Advanced Intermediate" 1570 PRINT TAB(10);"3 - Advanced Beginner";TAB(40);"9" 1580 PRINT TAB(10);"4";TAB(40);"A - Advanced" 1590 PRINT TAB(10);"5";TAB(40);"E - Expert" 1600 PRINT:INPUT "Please select a skill level for this game: ",XL$ 1610 XNL = INSTR(2," B123456789AE",XL$) 1620 IF XNL = 0 THEN GOTO 1500 ELSE XN = 4*XNL 1650 RETURN