Compucolor.org – Virtual Media

Listing of file='WORPUZ.BAS;01' on disk='vmedia/word_puzzle-sector.ccvf'

10 REM 	WORD-PUZZLE
20 REM 	BY GREG HUBBARD    1/9/81
30 REM 	PHONE (03)241-7094
40 REM 	(C) COPYRIGHT 1981



120 GOSUB 10000
130 T= PEEK (33209):IF T= 0THEN 130
140 T= RND (- T)
1000 REM 	
COMMAND CENTRE

1010 TM= PEEK (32940)+ PEEK (32941)* 256+ 1
1020 CLEAR 1000
1030 PLOT 27,24,6,7,12,15
1040 PLOT 3,12,2:PRINT "a b teu {jd neu     {jd a b ez ez a   {je"
1050 PLOT 3,12,3:PRINT "res vw a | lw     a   vw y y l l"
1060 PLOT 29,3,16,7,14,6,3
1070 PRINT "YOU HAVE THE FOLLOWING CHOICES -"
1080 PLOT 6,6,3,16,10:PRINT "1. EXAMINE WORD LIST INDEX"
1090 PRINT TAB( 16)"2. CREATE A NEW WORD LIST"
1100 PRINT TAB( 16)"3. MAKE A WORD PUZZLE"
1110 PRINT TAB( 16)"4. RETURN TO MENU
1120 PRINT :PRINT TAB( 16)"WHICH DO YOU CHOOSE? ";
1130 CH= CALL (2):IF CH= 27THEN 23000
1140 IF CH< 49OR CH> 52THEN 1130
1150 C= CH- 48:PRINT C
1160 IF C= 1THEN GOSUB 4000:GOTO 6000
1170 IF C= 2THEN 2000
1180 IF C= 3THEN GOSUB 4000:GOSUB 5000:GOTO 7000
1190 IF C= 4THEN PLOT 29,6,2,27,11,15,12,1
1200 GOTO 1000
2000 REM 
	CREATE WORD LIST

2010 DIM WL$(24)
2020 TM= PEEK (32940)+ PEEK (32941)* 256+ 1
2030 X= 0:Y= 23:H= 3:W= 64:C= 1:LI= Y- 1:GOSUB 20000
2040 PLOT 12,3,24,0:PRINT "CREATE WORD LIST"
2050 PLOT 6,4,2,0,116,242,127,116,127,49,0,49,0,116,255
2060 PLOT 3,0,20:PRINT "YOU MAY ENTER UP TO 24 WORDS (ENTER A NUMBER TO FINISH)"
2070 PLOT 15:FOR I= 1TO 24
2080 GOSUB 21000:PRINT "WORD NO."I;:INPUT " > ";WL$(I)
2090 L= LEN (WL$(I)):IF L> 0AND L< 17THEN 2110
2100 GOSUB 21000:PRINT "INPUT ERROR!":GOTO 2080
2110 IF VAL (WL$(I))> 0THEN WL$(I)= "":GOTO 2140
2120 GOSUB 2250:PLOT 3,X,Y:PRINT ""I"."WL$(I)
2130 NEXT I
2140 NW= I- 1:LI= LI- 3
2150 FOR I= 31TO 20STEP - 1:PLOT 3,0,I,11:NEXT I
2160 GOSUB 21000:INPUT "DO YOU WISH TO MAKE ANY CHANGES? ";A$
2170 IF LEFT$ (A$,1)= "Y"THEN 2280
2180 GOSUB 21000:INPUT "WHAT IS THE TITLE OF THIS WORD-LIST? ";WL$
2190 L= LEN (WL$):IF L> 0AND L< 29THEN 2210
2200 GOSUB 21000:PRINT "INPUT ERROR!":GOTO 2180
2210 GOSUB 21000:PRINT "DO YOU WISH TO SAVE THIS WORD LIST? ";
2220 CH= CALL (2):IF CH= 78THEN PRINT "N":GOTO 1000
2230 IF CH< > 89THEN 2220
2240 PRINT "Y":GOTO 3000
2250 Y= INT ((I- 1)/ 3):X= I- 3* Y:Y= Y* 2+ 4:X= (X- 1)* 20+ 1
2260 IF I< 10THEN X= X+ 1
2270 RETURN
2280 GOSUB 21000:INPUT "ENTER NUMBER OF WORD TO CHANGE...";I$
2290 I= VAL (I$):IF I> 0AND I< = NWTHEN 2310
2300 GOSUB 21000:PRINT "INPUT ERROR!":GOTO 2280
2310 GOSUB 2250:PLOT 3,X,Y:PRINT SPC( 20)
2320 GOSUB 21000:INPUT "ENTER NEW WORD > ";WL$(I)
2330 L= LEN (WL$(I)):IF L> 0AND L< 17THEN 2350
2340 GOSUB 21000:PRINT "INPUT ERROR!":GOTO 2320
2350 PLOT 3,X,Y:PRINT ""I"."WL$(I)
2360 GOTO 2160
3000 REM 
	SAVE WORD LIST

3010 IF NW< 1THEN GOSUB 21000:PRINT "NO WORD LIST!":FOR I= 1TO 1000:NEXT I:GOTO 1000
3020 GOSUB 21000:PRINT "THIS WILL TAKE A MOMENT...."
3030 FILE "T",22000:FILE "R",1,"INDEX",2
3040 FOR I= 1TO 32:GET 1,I;NA$[28]
3050 IF NA$< > WL$THEN 3100
3060 GOSUB 21000:PRINT "THERE IS ALREADY A WORD-LIST NAMED "WL$
3070 GOSUB 21000:INPUT "ENTER A NEW NAME > ";WL$
3080 L= LEN (WL$):IF L< 1OR L> 28THEN GOSUB 21000:PRINT "INPUT ERROR":GOTO 3070
3090 FOR J= L+ 1TO 28:WL$= WL$+ " ":NEXT J:GOTO 3040
3100 IF LEFT$ (NA$,5)= "     "THEN RN= I:GOTO 3120
3110 NEXT I:RN= I- 1
3120 FI$= "WL"+ MID$ (STR$ (RN),2)
3130 PUT 1,RN;WL$[28],FI$[4]:FILE "C",1
3140 FILE "N",FI$,24,16,24
3150 FILE "R",1,FI$,1
3160 FOR I= 1TO 24:PUT 1,I;WL$(I)[16]
3170 NEXT I:FILE "C",1
3180 GOTO 1000
4000 REM 
PRINT WORD LIST INDEX

4010 DIM WL$(24)
4020 TM= PEEK (32940)+ PEEK (32941)* 256+ 1
4030 X= 15:Y= 21:H= 3:W= 49:C= 1:LI= Y- 1:GOSUB 20000
4040 FILE "T",22000:FILE "R",1,"INDEX",2
4050 PLOT 6,4,12,2,0,115,242,127,115,127,48,0,48,0,115,255
4060 PLOT 3,24,0:PRINT "WORD-LIST INDEX"
4070 FOR I= 1TO 32:GET 1,I;NA$[28]
4080 IF NA$= "                            "THEN RETURN
4090 X= 1:IF INT (I/ 2)= I/ 2THEN X= 32
4100 IF I< 10THEN X= X+ 1
4110 Y= INT (I/ 2)+ 4:IF X> 30THEN Y= Y- 1
4120 N$= MID$ (STR$ (I),2)
4130 PLOT 3,X,Y:PRINT ""N$"."NA$:NEXT I
5000 REM 
LOAD WORD LIST

5010 GOSUB 21000:INPUT "SELECT A WORD-LIST BY NUMBER...";A$
5020 RN= VAL (A$):LR= I- 1:IF RN< 1OR RN> LRTHEN GOSUB 21000:PRINT "INPUT ERROR":GOTO 5000
5030 GET 1,RN;WL$[28],FI$[4]:FILE "C",1
5040 FOR I= YTO 4STEP - 1:PLOT 3,1,I:PRINT SPC( 62)"":NEXT I:PLOT 8,14,11
5050 FOR I= 27TO 1STEP - 1:IF RIGHT$ (WL$,1)= " "THEN WL$= LEFT$ (WL$,I):NEXT I
5060 PLOT 6,3,3,(64- LEN (WL$))/ 2,1:PRINT WL$""
5070 FILE "R",1,FI$,1:FOR I= 1TO 24:GET 1,I;WL$(I)[16]
5080 FOR J= 15TO 1STEP - 1:IF RIGHT$ (WL$(I),1)= " "THEN WL$(I)= LEFT$ (WL$(I),J):NEXT J
5090 IF WL$(I)= " "THEN 5110
5100 GOSUB 2250:PLOT 3,X,Y:PRINT I"."WL$(I)"":NEXT I
5110 FILE "C",1:NW= I- 1:RETURN
6000 REM 
DELETE WORD LIST

6010 GOSUB 21000:PRINT "DO YOU WISH TO DELETE A FILE? ";
6020 CH= CALL (2):PRINT CHR$ (CH):IF CH< > 89THEN 1000
6030 GOSUB 21000:INPUT "WHICH FILE NUMBER DO YOU WISH TO DELETE? ";A$
6040 RN= VAL (A$):LR= I- 1:IF RN< 1OR RN> LRTHEN GOSUB 21000:PRINT "INPUT ERROR":GOTO 6030
6050 GOSUB 21000:PRINT "ARE YOU QUITE SURE ABOUT THAT?  ";
6060 CH= CALL (2):PRINT CHR$ (CH):IF CH< > 89THEN 1000
6070 GOSUB 21000:PRINT "OK, THIS MAY TAKE A WHILE...."
6080 GET 1,RN;WL$[28],FI$[4]
6090 FOR I= RNTO LR
6100 GET 1,I+ 1;WL$[28]:PUT 1,I;WL$[28]:NEXT I:FILE "C",1
6110 GOSUB 21000:PRINT "HERE COME THE NICE PATTERNS...."
6120 IF RIGHT$ (FI$,1)= " "THEN FI$= LEFT$ (FI$,3)
6130 PLOT 27,4:PRINT "DEL "FI$".RND;1":PLOT 27,24
6140 IF RN= LRTHEN 6200
6150 PLOT 12:PRINT "JUST A LITTLE LONGER...."
6160 FOR I= RN+ 1TO LR
6170 V$= STR$ (I):SR$= "WL"+ RIGHT$ (V$,LEN (V$)- 1)
6180 V$= STR$ (I- 1):DE$= "WL"+ RIGHT$ (V$,LEN (V$)- 1)
6190 PLOT 27,4:PRINT "REN "SR$".RND;1 TO "DE$".RND;1":NEXT I:PLOT 27,24
6200 GOTO 1000
7000 REM 
	DISPLAY PUZZLE

7010 PLOT 15:X= 15:Y= 23:H= 3:W= 49:C= 1:LI= Y- 1:GOSUB 20000
7020 REM PUT WORDS IN ARRAY
7030 DIM PU$(24,24):DIM AD(NW,3)
7040 PLOT 3,15,23:PRINT "PUTTING WORDS IN PUZZLE!":PLOT 3,15,26
7050 FOR I= 1TO NW:PLOT 28,11:PRINT TAB( 14)""NW- I+ 1" WORDS TO GO"
7060 X= INT (RND (1)* 24)+ 1:Y= INT (RND (1)* 24)+ 1:X0= X:Y0= Y
7070 XX= INT (RND (1)* 3)- 1:YY= INT (RND (1)* 3)- 1:IF XX= 0AND YY= 0THEN 7070
7080 FOR J= 1TO LEN (WL$(I))
7090 IF X0> 24OR X0< 1OR Y0> 24OR Y0< 1THEN 7060
7100 IF PU$(X0,Y0)< > ""THEN 7060
7110 X0= X0+ XX:Y0= Y0+ YY:NEXT J
7120 AD(I,0)= X:AD(I,1)= Y:AD(I,2)= XX:AD(I,3)= YY
7130 FOR J= 1TO LEN (WL$(I))
7140 PU$(X,Y)= MID$ (WL$(I),J,1)
7150 X= X+ XX:Y= Y+ YY:NEXT J
7160 NEXT I
7170 REM DISPLAY PUZZLE
7180 T= PEEK (33209):IF T= 0THEN 7180
7190 RN= RND (- T)
7200 PLOT 6,3,12,14,3,24- (LEN (WL$)/ 2),1
7210 FOR I= 1TO LEN (WL$):PRINT MID$ (WL$,I,1)"
e";:NEXT I:PRINT ""
7220 PLOT 6,6:FOR Y= 1TO 24:FOR X= 1TO 24
7230 PLOT 3,X* 2- 2,Y+ 2
7240 IF PU$(X,Y)= ""THEN PRINT CHR$ (INT (RND (1)* 26)+ 65)" ":GOTO 7260
7250 PRINT PU$(X,Y)" "
7260 NEXT X:NEXT Y
7270 PLOT 6,4,2,0,19,242,95,19,95,127,255
7280 PLOT 6,3,3,48,0:PRINT "FIND THESE":PLOT 3,48,1:PRINT "WORDS:-"
7290 FOR I= 1TO NW:PLOT 3,48,I+ 2
7300 PRINT WL$(I):NEXT I
7310 X= 0:Y= 28:H= 4:W= 64:C= 1:LI= Y- 1:GOSUB 20000
7320 GOSUB 21000:PRINT "DO YOU WISH TO PLAY THE GAME? ";
7330 CH= CALL (2):IF CH< > 89THEN 7360
7340 PRINT "Y":GOSUB 21000:PRINT "JUST LET ME THINK ABOUT THIS..."
7350 FX= FRE (X$):PLOT 28,11,28,11:GOTO 9000
7360 IF CH= 27THEN 23000
7370 PRINT ""CHR$ (CH)
7380 GOSUB 21000:PRINT "WOULD YOU LIKE A PRINT OUT OF THIS PUZZLE? ";
7390 CH= CALL (2):IF CH< > 89THEN PRINT :GOTO 1000
8000 REM 
	PRINT PUZZLE

8010 PRINT "Y"
8020 GOSUB 21000:PRINT "ENTER BAUD RATE CODE...";
8030 CH= CALL (2):IF CH< 49OR CH> 55THEN 8020
8040 BR= CH- 48:PRINT BR
8050 GOSUB 21000:PRINT "TURN PRINTER ON AND HIT RETURN"
8060 GOSUB 21000:CH= CALL (2):GOSUB 8120
8070 GOSUB 21000:PRINT "WOULD YOU LIKE THE SOLUTION PRINTED? ";
8080 CH= CALL (2):IF CH< > 89THEN PRINT :GOTO 8110
8090 PRINT "Y":GOSUB 21000:PRINT "HIT RETURN TO COMMENCE PRINT OUT"
8100 CH= CALL (2):SL= 1:GOSUB 8120
8110 GOSUB 21000:PRINT "TURN PRINTER OFF AND HIT RETURN":CH= CALL (2):GOTO 1000
8120 OF= PEEK (33265):POKE 33289,80:PLOT 27,11,27,18,BR,27,13,31
8130 RN= RND (- T)
8140 TA= (40- LEN (WL$))/ 2:PRINT SPC( TA);WL$:PRINT
8150 FOR Y= 1TO 24:PRINT SPC( 8);
8160 FOR X= 1TO 24
8170 IF PU$(X,Y)= ""AND SL= 0THEN PRINT CHR$ (INT (RND (1)* 26)+ 65);:GOTO 8200
8180 IF PU$(X,Y)= ""AND SL= 1THEN PRINT ".";:GOTO 8200
8190 PRINT PU$(X,Y);
8200 NEXT X:PRINT ""
8210 FOR I= 1TO 500:NEXT I
8220 NEXT Y:PRINT
8230 PLOT 30:PRINT TAB( 6)"FIND THESE WORDS >":PRINT
8240 FOR I= 1TO NWSTEP 4:PRINT TAB( 6)WL$(I)TAB( 23)WL$(I+ 1);
8250 PRINT TAB( 40)WL$(I+ 2)TAB( 57)WL$(I+ 3)
8260 NEXT I:PRINT :PRINT
8270 POKE 33265,OF:PLOT 27,24
8280 RETURN
9000 REM 
	PLAY GAME

9010 PLOT 3,0,31
9020 PRINT "'1'-'9' TO MOVE"TAB( 20)"'0' FOR SCAN"TAB( 40)"'ESC' TO QUIT"
9030 CO= 29057:CN= CO
9040 ZZ= PEEK (CN):POKE CN,67
9050 IF PEEK (CN- 1)= 32THEN POKE CN,91
9060 IF PP= 1THEN W$= W$+ CHR$ (PEEK (CN- 1))
9070 CO= CN:PLOT 3,64,0,6,0:POKE 33252,0:CH= CALL (2):SO= CALL (0)
9080 IF CH= 48THEN 9290
9090 IF CH= 49THEN CN= CN+ 124
9100 IF CH= 50THEN CN= CN+ 128
9110 IF CH= 51THEN CN= CN+ 132
9120 IF CH= 52THEN CN= CN- 4
9130 IF CH= 53THEN CN= 29057
9140 IF CH= 54THEN CN= CN+ 4
9150 IF CH= 55THEN CN= CN- 132
9160 IF CH= 56THEN CN= CN- 128
9170 IF CH= 57THEN CN= CN- 124
9180 IF CH= 27THEN 9210
9190 IF CN< 29057OR CN> 32095THEN CN= 29057
9200 POKE CO,ZZ:GOTO 9040
9210 PLOT 3,0,29,14:PRINT "WOULD YOU LIKE TO SEE THE SOLUTION? ";
9220 CH= CALL (2):IF CH< > 89THEN PRINT "":GOTO 1000
9230 PRINT "Y":POKE CO,ZZ
9240 FOR X= 1TO 24:FOR Y= 1TO 24
9250 IF PU$(X,Y)< > ""THEN PLOT 3,X* 2- 2,Y+ 2:PRINT PU$(X,Y)
9260 NEXT Y:NEXT X
9270 PLOT 3,0,29,14,11:PRINT "HIT RETURN TO CONTINUE"
9280 CH= CALL (2):GOTO 1000
9290 REM WORD SCAN
9300 IF PP= 1THEN 9330
9310 PP= 1:PLOT 3,0,29,14,11:PRINT "WORD-SCAN IN PROGRESS"
9320 W$= "":GOTO 9060
9330 FOR I= 1TO NW
9340 IF W$= WL$(I)THEN 9380
9350 NEXT I
9360 PLOT 3,0,29,14,11:PRINT "NO MATCH!"
9370 PP= 0:GOTO 9200
9380 PLOT 3,0,29,14,11,31:PRINT "ATTEMPTING TO MATCH..."
9390 FX= FRE (X$):PLOT 3,0,29,14,11:PRINT "YOU HAVE A MATCH!"
9400 PLOT 6,1,3,48,I+ 2:PRINT WL$(I)
9410 X= AD(I,0):Y= AD(I,1):XX= AD(I,2):YY= AD(I,3)
9420 FOR J= 1TO LEN (W$)
9430 PLOT 3,X* 2- 2,Y+ 2:PRINT MID$ (W$,J,1)
9440 X= X+ XX:Y= Y+ YY:NEXT J
9450 PP= 0:ZZ= 1:FW= FW+ 1:IF FW= NWTHEN 9470
9460 PLOT 8:GOTO 9200
9470 PLOT 3,0,29,14,11,15:GOSUB 21000:PRINT "WELL DONE!!!"
9480 GOSUB 21000:PRINT "YOU HAVE FOUND ALL THE WORDS"
9490 GOSUB 21000:PRINT "HIT RETURN TO CONTINUE..."
9500 CH= CALL (2):GOTO 1000
9510 END
10000 REM 
	TITLE PAGE

10010 PLOT 27,24,6,7,12,14
10020 PLOT 3,12,3:PRINT "a b teu {jd neu     {jd a b ez ez a   {je"
10030 PLOT 3,12,5:PRINT "res vw a | lw     a   vw y y l l"
10040 PLOT 29,6,2,15,3,0,8
10050 PRINT TAB( 10)"THIS IS A GAME WHERE YOU HAVE TO FIND WORDS"
10060 PRINT TAB( 10)"THAT I HAVE HIDDEN IN A PUZZLE. YOU CAN ENTER"
10070 PRINT TAB( 10)"YOUR OWN WORDS OR YOU CAN USE THE WORDS THAT"
10080 PRINT TAB( 10)"I ALREADY KNOW. WHEN YOU HAVE MADE A WORD"
10090 PRINT TAB( 10)"PUZZLE, YOU WILL HAVE A CHOICE OF PLAYING THE"
10100 PRINT TAB( 10)"GAME OR GETTING A PRINT OUT OF THE PUZZLE.":PRINT
10110 PRINT TAB( 10)"IF YOU CHOOSE TO PLAY THE GAME, YOU WILL SEE A"
10120 PRINT TAB( 10)"YELLOW CURSOR WHICH YOU CAN MOVE AROUND THE"
10130 PRINT TAB( 10)"PUZZLE BY USING THE NUMBER KEYS FROM '1' TO '9'"
10140 PRINT TAB( 10)"WHEN YOU HAVE FOUND ONE OF THE WORDS, PUT THE"
10150 PRINT TAB( 10)"CURSOR ON THE FIRST LETTER OF IT. PRESS THE '0'"
10160 PRINT TAB( 10)"KEY AND YOU WILL SEE THE MESSAGE 'WORD SCAN"
10170 PRINT TAB( 10)"IN PROGRESS'. THEN MOVE THE CURSOR OVER THE"
10180 PRINT TAB( 10)"WORD TO THE LAST LETTER AND PRESS THE '0' KEY"
10190 PRINT TAB( 10)"AGAIN. I WILL THEN CONFIRN WHETHER IT WAS ONE"
10200 PRINT TAB( 10)"OF THE WORDS YOU WERE LOOKING FOR. IF YOU CAN'T"
10210 PRINT TAB( 10)"FIND ALL THE WORDS, PRESS THE 'ESC' KEY. I WILL"
10220 PRINT TAB( 10)"THEN SHOW YOU WHERE THEY WERE HIDING."
10230 PRINT :PRINT TAB( 20)"HIT RETURN TO BEGIN":CH= CALL (2)
10240 RETURN
20000 REM 
	SCROLL POKER

20010 DA= 28672+ 128* Y+ X+ X:AD= TM+ 126:GOSUB 20050
20020 DA= 128- W- W:AD= TM+ 149:GOSUB 20050
20030 POKE TM+ 129,H- 1:POKE TM+ 131,W* (C+ 1)
20040 POKE TM+ 143,35* (1- C):X1= X:Y1= LI+ H:RETURN
20050 Z1= INT (DA/ 256):Z2= DA- Z1* 256
20060 POKE AD,Z2:POKE AD+ 1,Z1:RETURN
21000 REM 
	DO SCROLL

21010 LI= LI+ 1:IF LI> Y1THEN SC= CALL (1):LI= Y1
21020 PLOT 3,0,LI,11
21030 PLOT 3,X1,LI:RETURN
22000 REM 
	FILE ERRORS

22010 GOSUB 21000:PRINT "FILE ERROR!":FILE "E",FL,EN,LN
22020 IF EN= 8OR EN= 10OR EN= 12THEN GOSUB 21000:PRINT "FILE FULL"
22030 IF EN= 14AND (LN= 3030OR LN= 4040)THEN 22050
22040 FOR I= 0TO 1000:NEXT I:GOTO 1000
22050 GOSUB 21000:PRINT "CAN'T FIND 'INDEX' FILE"
22060 GOSUB 21000:PRINT "WILL I CREATE A NEW ONE? ";
22070 CH= CALL (2):IF CH< > 89THEN PRINT :GOTO 1000
22080 PRINT CHR$ (CH):GOSUB 21000:PRINT "THIS WILL TAKE A FEW MOMENTS...."
22090 FILE "T",22000:FILE "N","INDEX",32,32,16
22100 FILE "R",1,"INDEX",2:FOR I= 1TO 32
22110 PUT 1;"                                "[32]
22120 NEXT I:FILE "C",1:GOTO 3030
23000 REM 
ESCAPE

23010 PLOT 6,3,14,3,0,31:PRINT "DO YOU WISH TO FINISH? "
23020 CH= CALL (2):IF CH< > 89THEN 1000
23030 PLOT 6,2,15,12,27,4:PRINT "DIR":PLOT 27,11
23040 END