This is non-commercial site, its content is based on Atari 8-bit home computer contents and references.
If you feel your rights are violated by showing/using any part of contents of your product represented on this page,
please contact me immediatelly so I can remove it!
|
|
|
-
Entry name:Word Hunt
-
Category:Games
-
Publisher/Developer:BELLCOM - Public Domain Library
Listing 1
10 REM ***** WORD HUNT ***** KEN MURPHY
20 CLR:C0=0:C1=1:C2=2:C3=3:C4=4:C5=5:C6=6:C7=7:C8=8:C9=9:C10=10
70 GOSUB 2000:OPEN #C1,C4,C0,"K:"
80 S=C10:W=C10:DIM M(S,S),W$(W*C10),LN(W),P(S,S),L(W,C3),F(C8),R$(C10),T$(C10):HSCORE=C0
85 T$=" ":FOR I=C0 TO C9:W$(I*C10+C1,I*C10+C10)=T$:NEXT I
90 POKE 752,C0:PRINT "WHAT SKILL LEVEL"
100 PRINT:PRINT "1 (EASY) - TO - 5 - (HARD)?3";
110 INPUT X:IF X<C1 OR X>C5 THEN 100
120 SL=C6-X
130 PRINT "ENTER ";W;" WORDS,"
140 PRINT "EACH 3 TO 7 CHARACTERS LONG"
150 REM GET WORDS AND PUT IN ORDER
160 REM LONGEST TO SHORTEST
170 FOR X=C1 TO W:L(X,C1)=C0:L(X,C2)=C0:L(X,C3)=C0
180 PRINT "WORD ";X;:INPUT R$
190 Q=LEN(R$)
200 IF Q<C3 THEN PRINT "* TOO SHORT *":GOTO 180
210 IF Q>C7 THEN PRINT "* TOO LONG *":GOTO 180
220 X9=C0:T$="*":T$(C2)=R$:T$(LEN(T$)+C1)="*":FOR Y=C1 TO Q:A=ASC(T$(Y+C1,Y+C1))
230 IF A<65 OR A>90 THEN X9=C1:Y=Q
240 NEXT Y:IF X9=C1 THEN PRINT " * BAD WORD *":GOTO 180
250 IF X=C1 THEN T$=R$:T$(Q+C1)="*":W$(X*C10-C9,X*C10)=T$:LN(X)=Q+C1:GOTO 290
260 X9=C0:FOR Y=C1 TO X-C1:IF Q<=LN(Y)-C1 THEN 280
270 FOR B=X TO Y+C1 STEP -C1:T$=W$((B-C1)*C10-C9,(B-C1)*C10):W$(B*C10-C9,B*C10)=T$:LN(B)=LN(B-C1):NEXT B
275 T$=R$:T$(Q+C1)="*":W$(Y*C10-C9,Y*C10)=T$:LN(Y)=LEN(T$):Y=X-C1
280 NEXT Y:IF X9=C0 THEN T$=R$:T$(Q+C1)="*":W$(X*C10-C9,X*C10)=T$:LN(X)=LEN(T$)
290 NEXT X
300 POKE 752,C1:PRINT "That's enough words!"
310 PRINT "Please be patient....."
320 PRINT " I'm now making the puzzle! "
330 REM INITIALIZE LETTER MATRIX
340 FOR X=C1 TO S:FOR Y=C1 TO S:M(Y,X)=42:NEXT Y:NEXT X:Q=C0
350 REM INIT POINT MATRIX & GET NEXT WORD
360 FOR X=C1 TO S:FOR Y=C1 TO S:P(Y,X)=C0:NEXT Y:GOSUB 1720
370 NEXT X:Q=Q+C1:IF Q>W THEN 760
375 GOSUB 1720
380 G=LN(Q)-C2
390 REM TRY ALL POINTS FOR EACH WORD
400 X9=C0:FOR X=C1 TO S:FOR Y=C1 TO S:IF P(Y,X)=C0 THEN X9=C1:X=S:Y=S
405 GOSUB 1720
410 NEXT Y:NEXT X:IF X9=C1 THEN 450
420 REM WORD WILL NOT FIT, TRY AGAIN
430 PRINT "This list of words will not all fit."
440 PRINT:PRINT "Please enter another list of words!":GOTO 130
450 A=INT(S*RND(C1)+C1):B=INT(S*RND(C1)+C1):IF P(B,A)<>C0 THEN GOSUB 1720:GOTO 450
455 GOSUB 1720
460 P(B,A)=C1:IF M(B,A)=42 THEN 490
470 IF M(B,A)<>ASC(W$(Q*C10-C9)) THEN 400
480 REM TRY ALL DIRECTIONS FROM THIS POINT
490 FOR X=C1 TO C8:F(X)=C0:NEXT X
500 X9=C0:FOR X=C1 TO C8:IF F(X)=C0 THEN X9=C1:X=C8
510 NEXT X:IF X9=C0 THEN 400
520 D=INT(C8*RND(C1)+C1):IF F(D)=C1 THEN 520
530 F(D)=C1:ON D GOTO 550,590,580,620,610,650,640,560
540 REM CHECK WORD WILL FIT
550 IF (A+G)>S THEN 500
560 IF (B-G)<C1 THEN 500
570 GOTO 670
580 IF (B+G)>S THEN 500
590 IF (A+G)>S THEN 500
600 GOTO 670
610 IF (A-G)<C1 THEN 500
620 IF (B+G)>S THEN 500
630 GOTO 670
640 IF (B-G)<C1 THEN 500
650 IF (A-G)<C1 THEN 500
660 REM CHECK WORD MATCHES INTO MATRIX
670 X=A:Y=B:X9=C0:FOR N=C2 TO G+C1:GOSUB 1550:IF M(Y,X)=42 THEN 690
680 IF M(Y,X)<>ASC(W$((Q-C1)*C10+N)) THEN X9=C1:N=G+C1
690 NEXT N:X=A:Y=B:IF X9=C1 THEN 500
700 REM ENTER WORD
710 FOR N=C1 TO G+C1:IF M(Y,X)=42 THEN M(Y,X)=ASC(W$((Q-C1)*C10+N))
720 GOSUB 1550:NEXT N
730 REM SAVE START & DIRECTION INFO
740 L(Q,C1)=A-C1:L(Q,C2)=B-C1:L(Q,C3)=D:IF D<W THEN 360
750 REM FILL IN SPACES
760 FOR Y=C1 TO S:FOR X=C1 TO S:IF M(Y,X)=42 THEN M(Y,X)=INT(25*RND(C1)+65)
770 NEXT X:NEXT Y:WP=C0:TS=C0
775 SOUND C0,C0,C0,C0:SOUND C1,C0,C0,C0
780 PRINT " "
790 PRINT "Depress any key when ready to play!"
800 IF PEEK(764)=255 THEN 800
805 POKE 764,255
810 REM SET UP DISPLAY
820 PRINT " ";:POKE 85,27:PRINT ""
830 REM PRINT 'ROW' DOWN LEFT COLUMN
840 REM START OUT DOWN 4
850 REM LATER DO 5 UP AND 3 RIGHT
860 PRINT "";
870 FOR X=C0 TO S-C1:PRINT X;:NEXT X:PRINT:Y=C1:GOSUB 1650
880 FOR Y=C1 TO S:PRINT "";Y-C1;"|";
890 FOR X=C1 TO S:PRINT CHR$(M(Y,X));:NEXT X
900 PRINT "|":NEXT Y:Y=C0:GOSUB 1650
910 PRINT:PRINT "":PRINT " 7 8 1"
920 PRINT " |":PRINT " 62":PRINT " |":PRINT " 5 4 3"
930 G=16:GOSUB 1700:PRINT " "
940 POKE 85,25:PRINT " "
950 POKE 85,25:PRINT " 0 "
955 POKE 85,25:PRINT " "
956 POKE 85,20:PRINT "HIGH "
957 G=20:GOSUB 1700:PRINT "";HSCORE
960 G=C0:GOSUB 1700:PRINT " "
970 WP=WP+C1:IF WP>W THEN 1450
980 Q=LN(WP)-C1
990 REM NEXT WORD
1000 GOSUB 1700:POKE 85,29-(Q/C2):PRINT W$((WP-C1)*C10+C1,(WP-C1)*C10+Q)
1005 POKE 20,C0:POKE 19,C0:REM KILL RTCLK
1010 REM GET START LOC
1020 G=C3:GOSUB 1700:PRINT "STARTING LOCATION":POKE 85,20:PRINT "(ROW,COLUMN):"
1030 FOR G=C6 TO 14:GOSUB 1700
1040 PRINT " ":NEXT G:G=C6:GOSUB 1700
1050 GOSUB 1760:B=KEY:IF B=155 THEN 1050
1070 PRINT CHR$(B);",";:IF B=48 THEN B=C0:GOTO 1090
1080 B=B-48:IF B<C1 OR B>C9 THEN PRINT " ";:GOTO 1050
1090 GOSUB 1760:A=KEY
1100 IF A=155 THEN 1090
1110 PRINT CHR$(A);:IF A=48 THEN A=C0:GOTO 1140
1120 A=A-48:IF A<C1 OR A>C9 THEN 1030
1140 G=C8:GOSUB 1700:PRINT "DIRECTION:":PRINT:POKE 85,20:PRINT " ";
1150 GOSUB 1760:D=KEY
1160 IF D=155 THEN 1150
1170 PRINT CHR$(D);:D=D-48:IF D<C1 OR D>C8 THEN 1140
1180 REM CHK IF GOOD INPUT
1190 WT=PEEK(20)+256*PEEK(19):IF B<>L(WP,C2) THEN 1230
1210 IF D=L(WP,C3) THEN 1360
1220 REM CHK IF A DOUBLE MAY EXIST
1230 X=A+C1:Y=B+C1:G=LN(WP)-C1:IF M(Y,X)<>ASC(W$(WP*C10-C9)) THEN 1300
1240 X9=C0:FOR N=C2 TO G:GOSUB 1550:IF X<C1 OR X>C10 THEN 1270
1250 IF Y<C1 OR Y>C10 THEN 1270
1260 IF M(Y,X)=ASC(W$((WP-C1)*C10+N)) THEN 1280
1270 X9=C1:N=G
1280 NEXT N:IF X9=C0 THEN 1360
1290 REM BAD START/DIR - NO SCORE
1300 G=C6:GOSUB 1700:PRINT " ";:B=L(WP,C2):A=L(WP,C1)
1310 PRINT B;",";A
1320 G=C10:GOSUB 1700:PRINT " ";L(WP,C3)
1330 G=12:GOSUB 1700:PRINT " "
1340 G=13:GOSUB 1700:PRINT " , CORRECT ":GOTO 1420
1350 REM GOOD ANSWER - GET SCORE
1360 IF WT<(SL*60) THEN WS=100:GOTO 1390
1370 IF WT>(SL*1200) THEN WS=C10:GOTO 1390
1380 WS=C5+INT(((SL*1200)-WT)/60)
1390 G=12:GOSUB 1700:PRINT ""
1400 G=13:GOSUB 1700:PRINT " , ";WS;" POINTS":TS=TS+WS
1410 REM UPDATE TOTAL SCORE
1420 G=18:GOSUB 1700:PRINT "";TS
1430 FOR X=C1 TO 500:NEXT X:GOTO 960
1440 REM END GAME
1450 POSITION C2,15
1460 FOR X=C1 TO C8:PRINT " ":NEXT X
1461 IF TS>HSCORE THEN HSCORE=TS
1462 G=20:GOSUB 1700:PRINT "";HSCORE
1470 FOR G=-C2 TO 14:GOSUB 1700
1480 PRINT " ":NEXT G
1490 POSITION C2,15:PRINT "PLAY AGAIN (Y OR N) ?"
1500 GET #C1,R
1510 IF R=ASC("Y") THEN 90
1520 IF R<>ASC("N") THEN 1500
1530 END
1540 REM SUB TO INC COORDINATES IN DIR
1550 ON D GOTO 1560,1570,1580,1590,1600,1610,1620,1630
1560 Y=Y-C1
1570 X=X+C1:RETURN
1580 X=X+C1
1590 Y=Y+C1:RETURN
1600 Y=Y+C1
1610 X=X-C1:RETURN
1620 X=X-C1
1630 Y=Y-C1:RETURN
1640 REM SUB FOR BOT TOP/BOTTOM
1650 PRINT "";:IF Y=C1 THEN PRINT "";:GOTO 1670
1660 PRINT "";
1670 FOR X=C0 TO S-C1:PRINT "";:NEXT X:IF Y=C1 THEN PRINT "":RETURN
1680 PRINT "":RETURN
1690 REM SUB TO POSITION
1700 POSITION 20,G+C2:RETURN
1710 REM SOUND GENERATOR
1720 SOUND C0,INT(RND(C0)*255),C10,C8:SOUND C1,INT(RND(C0)*255),C10,C8:RETURN
1730 REM CLOCK TICK
1740 SOUND C0,C0,C4,14:I=I+C1:SOUND C0,C0,C0,C0:RETURN
1750 REM TICK THE CLOCK WHILE WAITING FOR A KEY
1760 POKE 764,255:I=PEEK(20)+256*PEEK(19)
1780 IF PEEK(764)<>255 THEN GET #C1,KEY:RETURN
1790 IF PEEK(20)+256*PEEK(19)-I>=60 THEN GOSUB 1740:GOTO 1760
1800 GOTO 1780
2000 GRAPHICS C2+16:SETCOLOR 4,4,4
2010 POSITION C2,C3:? #C6;"W O R D":GOSUB 2100
2015 POSITION C6,C7:? #C6;"W O R D":GOSUB 2100
2020 POSITION C10+C1,C3:? #C6;"H U N T":GOSUB 2100
2025 POSITION C6,C10:? #C6;"H U N T":GOSUB 2100
2030 FOR I=C2 TO C10+C7:FOR J=C1 TO C10+C1:POSITION I,J:? #C6;CHR$(INT(RND(0)*26)+65)
2035 SOUND C0,RND(C0)*150,C10,C6:SOUND C1,RND(C0)*150,C10,C6:NEXT J:NEXT I
2040 SOUND C0,C0,C0,C0:SOUND C1,C0,C0,C0:GOSUB 2110:RETURN
2100 SOUND C0,RND(C0)*150,C10,C6:SOUND C1,RND(C0)*150,C10,C6
2110 FOR I=C0 TO 150:NEXT I:RETURN
References
Listing downloads
Downloads
Copyright holder
