home *** CD-ROM | disk | FTP | other *** search
Wrap
10 REM ********************** 20 REM * FIND.EM * 30 REM * BY DAVID GRIGGS * 40 REM * COPYRIGHT (C) 1986 * 50 REM * BY MICROSPARC, INC * 60 REM * CONCORD, MA 01742 * 70 REM ********************** 80 ONERR GOTO 1190 90 DEF FN MD(X) = X -((X >SN) *SN) +((X < = 0) *SN) 100 FOR I = 768 TO 777: READ A: POKE I,A: NEXT 110 DATA 104,168,104,166,223,154,72,152,72,96 120 GOSUB 2580 130 GOSUB 2860 140 GOTO 740 150 HTAB (21 - LEN(Q$)/2): PRINT Q$: NORMAL : RETURN 160 INVERSE : GOTO 150 170 FLASH : GOTO 150 180 VTAB 22: PRINT "PRESS <RETURN> TO CONTINUE";: GET A$: PRINT A$: RETURN 190 IF LEN(M$)/2 < > INT( LEN(M$)/2) THEN M$ = M$ +" " 200 FOR X = 1 TO LEN(M$)/2:MP$ = LEFT$(M$,X) + RIGHT$(M$,X): VTAB VP: HTAB 21 -X:Q = PEEK(SOUND) + PEEK(SOUND): PRINT MP$: NEXT : RETURN 210 REM START OF MENU 220 NL = 3 +(SN >10) 230 INVERSE : VTAB VP +NL: PRINT BK$; 240 VTAB VP +NL: HTAB (20 - LEN(BS$)/2): PRINT BS$; 250 ZZ$ = SN$(U) 260 INVERSE : HTAB 1: VTAB VP: PRINT ZZ$ 270 NORMAL : VTAB VP +1: PRINT DE$ 280 SP = U *8 -7 -(U >5) *40 -(U >10) *40 290 VTAB VP +1: IF U >5 THEN VTAB VP +2 300 IF U >10 THEN VTAB VP +3 310 HTAB SP: INVERSE : PRINT MID$ (DE$,(U >5) *40 +(U >10) *40 +SP,8); 320 A = PEEK(KB): IF A <128 THEN X = RND(X): GOTO 320 330 POKE KS,0:A = A -128: IF A = 21 THEN 420 340 IF A = 8 THEN 410 350 IF A = 32 OR A = 10 THEN 440 360 IF A = 11 THEN 430 370 IF A = 13 THEN 470 380 FOR Q = U +1 TO U +SN -1:Z = FN MD(Q): IF A = ASC( LEFT$(SN$(Z),1)) THEN U = Z: GOTO 250 390 NEXT Q 400 GOTO 320 410 U = U -1:U = FN MD(U): GOTO 250 420 U = U +1:U = FN MD(U): GOTO 250 430 U = U -5: GOTO 450 440 U = U +5: IF U >SN THEN U = U -15 450 IF U < = 0 THEN U = U +5: GOTO 450 460 GOTO 250 470 REM EXIT 480 NN = U: NORMAL 490 RETURN 500 REM PROCESS KEY PRESS 510 A = PEEK(KB): POKE KS,0 520 IF A = 141 THEN 610: REM END OF WORD 530 IF A = 136 THEN GOSUB 570: RETURN 540 A$ = CHR$(A -128) 550 IF A$ <"A" OR A$ >"Z" THEN RETURN 560 LE = LE +1:B$ = B$ +A$: GOTO 600 570 LE = LE -1 580 IF LE < = 0 THEN LE = 1:B$ = "": GOTO 600 590 B$ = LEFT$(B$,LE) 600 VTAB 20: HTAB 1: CALL -868: PRINT B$;: RETURN 610 REM END OF WORD 620 CT = CT +1:WD$(CT,PN) = B$:WD$(0,PN) = STR$(CT): VTAB PV +1: HTAB 1: PRINT B$:B$ = "":LE = 0:PV = PEEK(37) 630 VTAB 20: HTAB 1: CALL -868 640 IF CT = 100 THEN TEXT : VTAB 20: PRINT G$;"WORD LIMIT REACHED": GOSUB 180: POP : RETURN 650 RETURN 660 REM GET WORDS 670 PV = 0:LE = 0:B$ = "":CT = 0: REM WORD CT 680 FOR DE = 1 TO NS 690 IF PEEK(KB) >127 THEN GOSUB 500 700 IF DE >NS -450 THEN YY = PEEK(SOUND) 710 NEXT DE 720 TEXT : VTAB 20: PRINT G$;"TIME LIMIT REACHED": GOSUB 180 730 RETURN 740 REM START OF MAIN MENU 750 U = 1 760 TEXT : HOME :VP = 19: GOSUB 210 770 IF NN = SN THEN 800 780 ON NN GOSUB 1260,1430,2150,2290 790 GOTO 760 800 TEXT : HOME :Q$ = "QUIT THE PROGRAM": GOSUB 160 810 VTAB 5: PRINT "DO YOU REALLY WISH TO QUIT (Y/N) N"; CHR$(8);: INPUT "";AN$ 820 IF LEFT$(AN$,1) = "Y" THEN HOME : PRINT "THANK YOU FOR PLAYING FIND'EM !!": END 830 GOTO 760 840 REM DISPLAY BOARD 850 INVERSE 860 VTAB 4: HTAB 10: PRINT " ": REM 21 SPACES 870 FOR I = 0 TO 4 880 VTAB 6 +I *2: HTAB 10: PRINT " ": REM 21 SPACES 890 VTAB 5 +I *2: HTAB 10 900 IN = I +1 910 PRINT " ";L$(IN,1);" ";L$(IN,2);" ";L$(IN,3);" ";L$(IN,4);" ";L$(IN,5);" " 920 NEXT I 930 PRINT : NORMAL 940 RETURN 950 REM SORT WORDS 960 FOR I = 1 TO NP 970 LI = VAL(WD$(0,I)) 980 FOR K = 1 TO LI -1:CH = 0 990 FOR J = 1 TO LI -K 1000 IF WD$(J,I) >WD$(J +1,I) THEN T$ = WD$(J,I):WD$(J,I) = WD$(J +1,I):WD$(J +1,I) = T$:CH = 1 1010 NEXT J 1020 IF CH = 0 THEN K = LI 1030 NEXT K 1040 NEXT I 1050 RETURN 1060 REM RESET "0" COUNTS 1070 FOR I = 1 TO NP 1080 FOR J = 1 TO VAL(WD$(0,I)) 1090 IF WD$(J,I) = "^^^" THEN WD$(0,I) = STR$(J -1): GOTO 1110 1100 NEXT J 1110 NEXT I 1120 RETURN 1130 REM PICK RANDOM NUMBERS & LETTERS 1140 FOR I = 1 TO 5: FOR J = 1 TO 5 1150 X = INT( RND(1) *6) +1 1160 L$(I,J) = MID$ (CC$(I,J),X,1) 1170 NEXT J,I 1180 RETURN 1190 REM ERROR END 1200 CALL 768: REM ON ERR CLEAR 1210 LI = PEEK(218) + PEEK(219) *256 1220 ER = PEEK(222) 1230 POKE 216,0 1240 PRINT "AN ERROR #";ER;" HAS OCCURRED IN LINE ";LI 1250 END 1260 REM ********************** 1270 REM ENTER PLAYERS 1280 REM ********************** 1290 TEXT : HOME 1300 Q$ = "ENTER PLAYERS' NAMES": GOSUB 160 1310 VTAB 4: PRINT " (RETURN EXITS)" 1320 VTAB 3: INPUT "HOW MANY PLAYERS (1-4)? ";A$ 1330 IF A$ = "" THEN RETURN 1340 IF A$ <"1" OR A$ >"4" THEN PRINT G$;: GOTO 1290 1350 NP = VAL(A$) 1360 FOR I = 1 TO NP 1370 VTAB 5 +I: PRINT "PLAYER "I"'S (10 CHARS): ";: INPUT "";PL$(I): IF LEN(PL$(I)) >10 THEN PL$(I) = LEFT$(PL$(I),10) 1380 SC(I) = 0 1390 NEXT I 1400 VTAB 20: CALL -958: PRINT "IS THE ABOVE OK (Y/N) Y"; CHR$(8);: INPUT "";A$ 1410 IF A$ = "N" THEN 1290 1420 U = 2: RETURN 1430 REM ********************** 1440 REM PLAY THE GAME 1450 REM ********************** 1460 NS = 11000: REM TIME LIMIT = 3 MINUTES 1470 GOSUB 1130: REM GENERATE LETTERS 1480 IF NP = 0 THEN NP = 1 1490 PC = 0 1500 HOME 1510 FOR PN = 1 TO NP 1520 TEXT : HOME : PRINT "PLEASE HAVE ";: INVERSE : PRINT PL$(PN);: NORMAL : PRINT " SIT IN FRONT": PRINT "OF THE APPLE NOW -- ALL OTHER PLAYERS PLEASE DON'T WATCH!!!" 1530 PRINT : PRINT "PRESS RETURN TO CONTINUE": INPUT "";A$ 1540 HOME 1550 Q$ = "ENTER WORDS NOW" + CHR$(7): GOSUB 170 1560 GOSUB 840: REM DISPLAY BOARD 1570 POKE 33,9: POKE 35,19 1580 GOSUB 660: REM GET WORDS 1590 NEXT PN 1600 REM SCORE THE GAME 1610 TEXT : HOME 1620 Q$ = "SCORE THE GAME": GOSUB 160 1630 VTAB 6:Q$ = "ELIMINATING DUPLICATE WORDS": GOSUB 150 1640 GOSUB 950: VTAB 6: CALL -868 1650 VTAB 8: PRINT " WORDS WORDS": REM 14/8 SPACES 1660 PRINT "PLAYER ENTERED -- UNIQUE": REM 7 SPACES 1670 PRINT "--------- ------- ------": REM 9 -'S/4 SPACES/7 -'S/6 SPACES/6 -'S 1680 FOR I = 1 TO NP:LI(I) = VAL(WD$(0,I)) 1690 VTAB 10 +I: PRINT PL$(I);: HTAB 17: PRINT LI(I) 1700 NEXT I 1710 FOR I = 1 TO NP 1720 FOR L = 1 TO LI(I) 1730 FL = 0:A$ = WD$(L,I) 1740 IF LEN(A$) <3 THEN FL = 1: GOTO 1810 1750 FOR J = I TO NP 1760 FOR K = 1 TO LI(J) 1770 IF J = I AND K < = L THEN 1790 1780 IF A$ = WD$(K,J) THEN WD$(K,J) = "^^^":FL = (J < >I) 1790 NEXT K 1800 NEXT J 1810 IF FL = 1 THEN WD$(L,I) = "^^^" 1820 NEXT L 1830 NEXT I 1840 GOSUB 950: REM SORT 1850 GOSUB 1060: REM RESET WORD COUNTS 1860 FOR I = 1 TO NP: VTAB 10 +I 1870 HTAB 29: PRINT WD$(0,I) 1880 NEXT 1890 GOSUB 180 1900 REM VERIFY WORDS 1910 TEXT : HOME 1920 Q$ = "VERIFY WORDS": GOSUB 160 1930 GOSUB 840 1940 VTAB 16: PRINT "IF THE SPELLING IS CORRECT, PRESS 'Y'. PRESS 'N' IF INCORRECT." 1950 POKE 34,17 1960 HOME 1970 FOR I = 1 TO NP 1980 LI = VAL(WD$(0,I)) 1990 IF LI = 0 THEN 2100 2000 FOR J = 1 TO LI 2010 W$ = WD$(J,I) 2020 GOSUB 2360 2030 VTAB 20: CALL -958: PRINT "THE WORD: ";: INVERSE : PRINT W$: NORMAL 2040 IF OK = 0 THEN WD$(J,I) = "^^^": VTAB 20: HTAB 24: PRINT "IS NOT FOUND!!": GOSUB 180: GOTO 2090 2050 VTAB 20: HTAB 24: PRINT "CORRECT (Y/N) ";: GET A$: PRINT A$ 2060 IF A$ = "Y" THEN 2090 2070 IF A$ = "N" THEN WD$(J,I) = "^^^": GOTO 2090 2080 GOTO 2050 2090 NEXT J 2100 NEXT I 2110 GOSUB 950: GOSUB 1060 2120 REM POST SCORES 2130 FOR I = 1 TO NP:SC(I) = SC(I) + VAL(WD$(0,I)): NEXT 2140 U = 3: RETURN 2150 REM ********************** 2160 REM DISPLAY THE STANDINGS 2170 REM ********************** 2180 TEXT : HOME 2190 Q$ = "DISPLAY THE SCORES": GOSUB 160 2200 VTAB 4: PRINT " NAME SCORE": REM 15/9 SPACES 2210 PRINT " ------------- -----": REM 11 SPACES/13 -'S/3 SPACES/5 -'S 2220 IF NP = 0 THEN VTAB 7: PRINT G$;" ..... NO PLAYERS ENTERED .....": GOTO 2270 2230 FOR I = 1 TO NP 2240 VTAB 5 +I: PRINT "PLAYER "I" - ";PL$(I);: 2250 HTAB 31: PRINT SC(I) 2260 NEXT 2270 GOSUB 180 2280 U = 2: RETURN 2290 REM ********************** 2300 REM CLEAR THE GAME 2310 REM ********************* 2320 TEXT : HOME :Q$ = "CLEAR MEMORY": GOSUB 160 2330 VTAB 5: PRINT "DO YOU REALLY WISH TO DO THIS (Y/N) N"; CHR$(8);: INPUT "";A$ 2340 IF LEFT$(A$,1) = "Y" THEN POP : RUN 2350 RETURN 2360 REM CHECK THE WORDS 2370 LI = LEN(W$):OK = 0 2380 FOR II = 1 TO 5: FOR JJ = 1 TO 5:C(II,JJ) = 0:P1 = II +(JJ -1) *5: FOR P = 1 TO 3:A(P1,P) = 0: NEXT P,JJ,II 2390 FOR Q = 1 TO 5: FOR Z = 1 TO 5 2400 IF L$(Q,Z) < > LEFT$(W$,1) THEN 2550 2410 A(1,1) = Q:A(1,2) = Z:C(Q,Z) = 1:P = 2:A(2,3) = 0 2420 IF (P -1) = LI THEN OK = 1: RETURN 2430 A$ = MID$ (W$,P,1) 2440 A(P,3) = A(P,3) +1 2450 IF A(P,3) <9 THEN 2500 2460 FOR X = 1 TO 3:A(P,X) = 0: NEXT X:P = P -1 2470 C(A(P,1),A(P,2)) = 0 2480 IF P = 1 THEN 2550 2490 GOTO 2430 2500 A(P,1) = A(P -1,1) +DX(A(P,3)) 2510 A(P,2) = A(P -1,2) +DY(A(P,3)) 2520 IF A(P,1) <1 OR A(P,1) >5 OR A(P,2) <1 OR A(P,2) >5 THEN 2440: REM OFF BOARD 2530 IF A$ = L$(A(P,1),A(P,2)) AND C(A(P,1),A(P,2)) = 0 THEN C(A(P,1),A(P,2)) = 1:P = P +1: REM CORRECT LETTER 2540 GOTO 2420 2550 NEXT Z,Q 2560 OK = 0 2570 RETURN 2580 REM START OF DATA INITIALIZATION SECTION 2590 T$ = "" 2600 DIM SN$(5),CC$(5,5),L$(5,5),WD$(100,4),A(25,3),C(5,5) 2610 G$ = CHR$(7):D$ = CHR$(4):NE = 0 2620 SOUND = -16336:KB = -16384:KS = -16368 2630 BS$ = "FIND 'EM !!" 2640 BK$ = " ": REM 40 BLANKS 2650 SN = 5 2660 SN$(1) = " ENTER PLAYERS' NAMES" 2670 SN$(2) = " PLAY THE GAME" 2680 SN$(3) = "DISPLAY STANDINGS" 2690 SN$(4) = " CLEAR MEMORY AND RESTART PROGRAM" 2700 SN$(5) = " QUIT THIS PROGRAM" 2710 DE$ = "" 2720 FOR I = 1 TO SN:DE$ = DE$ + LEFT$(SN$(I),7) +" " 2730 IF LEFT$(SN$(I),1) = " " THEN SN$(I) = MID$ (SN$(I),2): GOTO 2730 2740 SN$(I) = LEFT$(SN$(I) +BK$,40): NEXT :DE$ = LEFT$(DE$ +BK$ +BK$,80 +(SN >10) *40) 2750 T$(1) = "FIND'EM! BY DAVID GRIGGS":T$(2) = " COPYRIGHT (C) 1986 ":T$(3) = " BY MICROSPARC, INC ":T$(4) = " CONCORD, MA 01742 " 2760 REM DATA FOR THE CUBES 2770 DATA "WYCSBA","ORMTIS","GDETOC","BDHCFA","MLNIEK" 2780 DATA "EDASRI","NKSOQH","NRTPUA","FEOTNI","KLGCIJ" 2790 DATA "ELXYAG","HIENRO","LOMPIG","AWXOBE","AEZYDT" 2800 DATA "TMARID","ASHRTL","NIFDSG","EATNIJ","YWTNAU" 2810 DATA "SGFBTU","VREAGU","XOLAVR","SLOCTR","PTEAIN" 2820 FOR I = 1 TO 5: FOR J = 1 TO 5: READ CC$(I,J): NEXT J,I 2830 FOR I = 1 TO 8: READ DX(I),DY(I): NEXT 2840 DATA 1,0,1,1,0,1,-1,1,-1,0,-1,-1,0,-1,1,-1 2850 RETURN 2860 HOME 2870 CH$ = "*" 2880 C = 1:H = 20:L = 40 2890 VTAB C: HTAB C: FOR I = C TO L: PRINT CH$;: NEXT 2900 FOR I = C TO H: VTAB I: HTAB L: PRINT CH$;: NEXT 2910 FOR I = L TO C STEP -1: VTAB H: HTAB I: PRINT CH$;: NEXT 2920 FOR I = H TO C STEP -1: VTAB I: HTAB C: PRINT CH$;: NEXT 2930 C = C +1:L = L -1:H = H -1 2940 IF C = 11 AND CH$ = " " THEN RETURN 2950 IF C = 9 AND CH$ = "*" THEN CH$ = " ": INVERSE : FOR Y = 1 TO 4:VP = 8 +Y:M$ = T$(Y): GOSUB 190: NEXT Y: GOSUB 180: NORMAL : GOTO 2880 2960 GOTO 2890