Kartik

Products: KARTIK
Date: 1984
Type: Program
Platform(s): TS 1000
Tags: Game

KARTIK is a computerised referee and scorekeeper for a two-to-eight-player crossword board game. The program manages a 6×6 board stored in a two-dimensional array, a 60-card letter deck with fractional encoding to carry both letter identity and point value in a single floating-point number, and per-player hand tracking. Word scoring validates up to four directions (across, diagonal-up, diagonal-down, and straight down) by mapping each entered word back onto the board coordinates relative to the card just played. A special “Star” wildcard card is tracked separately, requiring the player to nominate a letter each turn, with its board representation updated accordingly.


Program Structure

The code is organised as a main loop with numbered subroutine blocks:

  1. Lines 10–99: Constants, array declarations
  2. Lines 100–465: Main game loop — setup, play, end-of-game detection, rematch
  3. Lines 1000–1099: Title/splash screen
  4. Lines 1100–1199: Rules display (paged)
  5. Lines 1300–1499: Options, name entry, card dealing
  6. Lines 1500–1599: Card placement input handler
  7. Lines 1600–1699: Full board redraw
  8. Lines 1700–1865: Star-card letter assignment and validation
  9. Lines 1900–1949: Single-cell display routine
  10. Lines 2000–2099: Board frame draw
  11. Lines 2100–2299: Per-turn display and card reveal
  12. Lines 2300–2499: Word entry and challenge loop
  13. Lines 2500–2738: Word scoring and board-match validation
  14. Lines 2800–2899: Winner determination
  15. Lines 2900–2958: Display helpers
  16. Lines 3000–3099: End-of-game score table
  17. Lines 5000–5010: SAVE and restart

Symbolic Constant Initialisation

Because the ZX81/TS1000 has no named constants, lines 30–56 build all frequently used integer values arithmetically from O=0 and V=NOT O (i.e. 1). This avoids embedding raw literals that would each cost extra memory and makes the intent self-documenting to an extent:

VariableValueDerivation
O0explicit
V1NOT 0
T2V+V
U3T+V
F4T+T
G6U+U
N9G+U
E15G+N
A14E-V
R16E+V
Z20R+F
M60U*Z
Q64M+F
H128Q+Q

M=60 is the deck size; Q=64 and H=128 are ASCII/character-code thresholds used to distinguish card colours (red vs. black) via the fractional encoding scheme.

Card Encoding Scheme

Each of the 60 cards is stored as a single floating-point number in the D() array. The integer part encodes the letter (as its character code, optionally offset by 128 for red cards), and the fractional part encodes the point score. Specifically, line 1434 sets D(J)=S+VAL P$(K)/R where S is the character code and R=16, so scores 1–4 map to fractions 0.0625, 0.125, 0.1875, 0.25. The score is later recovered at line 2170: LET S=R*(D(K)-INT D(K)). Red cards have character codes above Q (64); the star card is detected specially.

The same encoding is used in the board array B(), allowing a single cell to carry colour, letter, and score simultaneously.

Board Display

Subroutine 1900 displays a single cell using PRINT AT with the formula AT U*X-T, U*Y+N+T (where U=3), giving each cell a 3-column-wide slot. Red cards print an inverse-video prefix character (character code T*F*C = 2*4*C = 8*C, selecting the inverse space when C=1). The board frame is drawn once at line 2000 using embedded block-graphics characters and row/column labels.

Word Scoring and Validation (lines 2500–2738)

The scoring subroutine checks whether a player-typed word matches the board in one of four directions (encoded in W: 1=across, 2=diag-up, 3=diag-down, 4=down). It first scans the word string for the character matching the current card (B(X,Y)), establishing the card’s position K within the word. It then walks backward from K and forward to L verifying each character against B() at the appropriate board coordinates. The direction offset logic uses the idiom (W=T)-(W=U) (i.e. +1 for diagonal-up, -1 for diagonal-down) to compute the row delta per column step.

Hand and Deck Management

The two-dimensional array S(player, column) tracks per-player state:

  • S(I,1): cards remaining in hand
  • S(I,2): score for current game
  • S(I,3): (unused directly in display; reserved)
  • S(I,4): card currently placed (substitution candidate)

Cards in each player’s hand occupy a contiguous segment of D(): player I‘s top card is at index PX*I - S(I,1) + 1 (line 2155). When a substitution is made, the displaced card is appended to the bottom of the hand or discarded depending on colour (lines 325–340).

Star Card Handling

The star card (C$="*") requires the player to nominate a letter each time it is played or lands in a new word. Subroutine 1700 handles both the initial placement case and subsequent turns where the star is already on the board (lines 1785–1799). A second flag SF tracks whether the star is currently on the board. The star’s board value is stored as CODE X$ + V/R, a non-integer that distinguishes it from ordinary cards while its display character (uppercase letter + 128 for red) is shown in inverse video.

Dealing Algorithm

Lines 1415–1435 implement a rejection-sampling shuffle: for each of the 60 positions in the deck string D$, a random index J is chosen uniformly and retried until an empty slot is found. This is a classic occupancy shuffle, O(n log n) average, appropriate for small n=60.

Notable Idioms and Techniques

  • SLOW/FAST used deliberately: slow mode for text I/O, fast mode for computation-heavy sections like dealing and board drawing.
  • FOR I=V TO LEN X$ loops scanning strings, with LET I=LEN X$ as a break idiom.
  • PRINT AT Z+V,O;" ... " followed by PRINT AT Z+V,O; is used to clear a status line before redisplaying, rather than CLS.
  • The block-graphic characters in the title screen (line 1010–1030) spell out “KARTIK” in large pixel-font style using Spectrum block graphics.
  • Line 1330 computes PX (cards per player) with special-case corrections for 5 and 7 players: PX=(Q-R+T*(P=F+V)+(P=G+V))/P = (48 + 2*(P=5) + 1*(P=7))/P, giving 10/9/8/7/10/7/7 for 2–8 players respectively, matching the rules text.

Content

Appears On

One individual’s cassette containing a number of programs.

Related Products

A crossword card game for 2-8 players. Words scored across, down or diagonally.

Related Articles

Related Content

Image Gallery

Kartik

Source Code

  10 REM ***** KARTIK (TM) *****
  12 REM *** A WORD GAME FOR ***
  14 REM *** 2 TO 8 PLAYERS ****
  16 REM ** PROGRAM COPYRIGHT **
  18 REM ***** (C) 1984 BY *****
  20 REM * WILLCOCKS RESEARCH **
  22 REM ***** CONSULTANTS *****
  25 REM *VERSION 1.02 12/05/84*
  30 LET O=0
  32 LET V=NOT O
  34 LET T=V+V
  36 LET U=T+V
  38 LET F=T+T
  40 LET G=U+U
  42 LET N=G+U
  44 LET E=G+N
  46 LET A=E-V
  48 LET R=E+V
  50 LET Z=R+F
  52 LET M=U*Z
  54 LET Q=M+F
  56 LET H=Q+Q
  60 DIM Y$(V)
  65 DIM B(G,G)
  70 DIM D(M)
  75 DIM S(G+T,F)
  85 DIM W$(F,F+G)
  90 DIM W(F)
  95 DIM N$(G+T,N+V)
 100 RAND 
 110 LET CP=V
 120 LET EF=O
 130 LET D$="AAA%ABB%BCC%CDDEEE%EFFGGHHII%IJKKLL%LMMNN%NOO%OPPQRR%RSS%STTU%UVWWXYYZ%*"
 140 LET P$="122213231433231252121434351"
 150 GOSUB 1000
 160 IF Y$<>"Y" THEN GOTO 180
 170 GOSUB 1100
 180 GOSUB 1300
 190 GOSUB 2000
 195 GOSUB 1600
 200 GOSUB 2100
 210 GOSUB 1500
 220 IF C$="*" OR SF THEN GOSUB 1700
 230 GOSUB 2300
 240 IF EF THEN GOTO 210
 250 LET S(CP,T)=S(CP,T)+S
 300 IF NOT S(CP,F) THEN LET B=B+V
 305 IF NOT S(CP,V) THEN LET D=D-V
 310 IF S(CP,F) THEN LET DC=DC+V-C
 315 IF S(CP,V) THEN LET S(CP,V)=S(CP,V)-V+C*(S(CP,F)>O)
 320 IF NOT C OR NOT S(CP,F) THEN GOTO 400
 322 IF S(CP,V)=V THEN GOTO 340
 325 FOR I=PX*CP+T-S(CP,V) TO PX*CP
 330 LET D(I-V)=D(I)
 335 NEXT I
 340 LET D(PX*CP)=S(CP,F)
 400 LET CP=CP+V
 405 IF CP>P THEN LET CP=V
 410 LET S=S(CP,V)
 415 IF B+DC<M AND B<Z+R AND (S OR D) THEN GOTO 200
 420 LET K=T
 425 GOSUB 2800
 430 GOSUB 3000
 435 PRINT AT R,O;"ANOTHER GAME - Y/N? ";
 440 INPUT Y$
 445 PRINT AT R,Z;Y$
 450 IF Y$="N" THEN GOTO 500
 455 IF Y$<>"Y" THEN GOTO 440
 460 GOSUB 1380
 465 GOTO 190
 500 LET K=U
 510 GOSUB 2800
 520 PRINT AT O,O;"FINAL SCORES:           "
 530 PRINT AT A,O;"MATCH WAS ";
 540 GOSUB 3035
 999 STOP 
 1000 PRINT AT V,O;"********************************"
 1010 PRINT AT U,U;"N  :  .' .'''. :'''. '':''  : :  .' TM   P"
 1020 PRINT TAB T;"U   :.:  :...: :'':  :   : :.:      E"
 1030 PRINT TAB V;"F    :  '. :  : :  :  :   : :  '.    P"
 1035 PRINT AT G+V,G;"OR CROSSWORD TANGO"
 1040 PRINT AT N,O;"A WORD GAME FOR 2 TO 8 PLAYERS"
 1050 PRINT AT N+T,O;"U. K. PATENT NO. 449,879 (1936) COPYRIGHT (C) 1935 BY","E. W. WILLCOCKS.","PROGRAM COPYRIGHT (C) 1984 BY   WILLCOCKS RESEARCH CONSULTANTS."
 1055 PRINT AT A+U,O;"KARTIK IS A TRADE MARK OF","WILLCOCKS RESEARCH CONSULTANTS."
 1060 PRINT AT Z,O;"********************************"
 1070 PRINT "DO YOU WANT INSTRUCTIONS-Y/N?";
 1075 SLOW 
 1080 INPUT Y$
 1085 IF Y$<>"Y" AND Y$<>"N" THEN GOTO 1080
 1090 PRINT Y$
 1099 RETURN 
 1100 CLS 
 1101 FAST 
 1102 PRINT TAB N-V;"RULES OF KARTIK"
 1105 PRINT AT T,T;"KARTIK IS A CROSSWORD GAME FOR2 TO 8 PLAYERS.  IT IS PLAYED ONA 6X6 SQUARE BOARD WITH A DECK  OF 60 LETTER CARDS."
 1110 PRINT AT G+V,T;"48 CARDS (49 FOR 7 PLAYERS OR 50 FOR 5) ARE DEALT FACE DOWN TOTHE PLAYERS. THE REMAINING CARDSARE THE DECK, LEFT FACE DOWN."
 1115 PRINT AT N+U,T;"ON HIS TURN, EACH PLAYER TAKESTHE TOP CARD FROM HIS HAND,","LOOKS AT IT AND PLACES IT ON THEBOARD, TRYING TO MAKE WORDS OF  2 TO 6 LETTERS. WORDS MAY READ  ACROSS, DIAGONALLY UP OR DIAGON-ALLY DOWN, FROM LEFT TO RIGHT,  OR STRAIGHT DOWN."
 1120 GOSUB 1185
 1130 CLS 
 1135 PRINT AT V,T;"EACH LETTER HAS A POINT SCORE.THESE ARE TOTALLED FOR EACH NEW WORD FORMED, NO MORE THAN ONE INEACH ALLOWED DIRECTION, AND ALL MUST INCLUDE THE CARD PLAYED."
 1140 PRINT AT G+V,T;"AFTER SIX CARDS ARE PLAYED, ASLONG AS AT LEAST 6 EMPTY SQUARESARE LEFT, THE PLAYER MAY SUBSTI-TUTE HIS CARD FOR ANY BLACK","LETTER ON THE BOARD. IF HIS CARDIS RED, HE ADDS THE OLD CARD TO THE BOTTOM OF HIS HAND; IF IT ISBLACK, IT IS DISCARDED. HE MAY  NOT SUBSTITUTE FOR A RED CARD." 
 1145 PRINT AT Z-U,T;"THE RED STAR CARD MAY BE","CHANGED TO REPRESENT ANY LETTER AT EACH TURN, WHEN A NEW WORD   WHICH USES IT IS COMPLETED."
 1150 GOSUB 1185
 1160 CLS 
 1165 PRINT AT V,O;"THE STAR ALWAYS SCORES 1 POINT. NEW WORDS FORMED BY CHANGING","THE LETTER IT REPRESENTS ARE NOTCOUNTED UNLESS THEY CONTAIN THE CARD JUST PLAYED."
 1170 PRINT AT G+V,T;"WHEN A PLAYER HAS NO CARDS","LEFT, HE USES THE TOP CARD FROM THE DECK. HE MAY NOT SUBSTITUTE." 
 1175 PRINT AT A-U,T;"THE GAME ENDS WHEN THE BOARD  IS FILLED, ALL CARDS HAVE BEEN  USED, OR A PLAYER HAS NO CARDS  AND THE DECK IS USED UP.  THE   PLAYER WITH THE HIGHEST TOTAL ISTHE WINNER."
 1180 PRINT AT Z-T,T;"THE WINNER DEALS FOR THE NEXT GAME, THE PLAYER TO HIS LEFT IS THE FIRST TO PLAY."
 1185 PRINT AT V+Z,G;"PRESS ""ENTER"" TO CONTINUE"
 1190 INPUT Y$
 1199 RETURN 
 1300 CLS 
 1305 FAST 
 1310 PRINT TAB G;"KARTIK OPTIONS",,,"HOW MANY PLAYERS? ";
 1315 INPUT P
 1320 IF P<T OR P>G+T THEN GOTO 1315
 1325 PRINT P
 1330 LET PX=(Q-R+T*(P=F+V)+(P=G+V))/P
 1335 LET D=M-P*PX
 1340 PRINT AT F,O;"EACH PLAYER WILL BE DEALT ";PX,"LETTER CARDS, FACE DOWN.  THE   REMAINING ";D;" CARDS WILL BE THE  DECK.  PLAYERS DRAW FROM THE","DECK WHEN THEY HAVE NO MORE","CARDS IN THEIR HANDS."
 1350 PRINT AT A-U,O;"ENTER NAMES OF THE PLAYERS:"
 1360 FOR I=V TO P
 1365 INPUT N$(I)
 1370 PRINT I;TAB U;N$(I)
 1375 NEXT I
 1380 PRINT AT Z,O;"DEALING THE CARDS ... ";
 1390 SLOW 
 1400 FOR I=V TO M
 1405 LET D(I)=O
 1410 NEXT I
 1412 FAST 
 1415 FOR I=V TO M
 1420 LET J=V+INT (M*RND)
 1425 IF D(J) THEN GOTO 1420
 1430 LET S=CODE D$(I)
 1432 LET K=S-H*(S>Q)+(Z+E+G)*(S=H+Z+U)-Z-E-T
 1434 LET D(J)=S+VAL P$(K)/R
 1435 NEXT I
 1440 SLOW 
 1445 PRINT "DONE."
 1450 FOR I=V TO G
 1455 FOR J=V TO G
 1460 LET B(I,J)=O
 1465 NEXT J
 1470 NEXT I
 1475 LET B=O
 1480 FOR I=V TO P
 1485 LET S(I,V)=PX
 1488 LET S(I,T)=O
 1490 NEXT I
 1492 LET D=M-P*PX
 1495 LET DC=O
 1497 LET SF=O
 1499 RETURN 
 1500 INPUT X$
 1501 LET EF=O
 1505 LET Y=O
 1510 LET X=CODE X$-Z-E-T
 1515 FOR I=V TO LEN X$
 1520 IF X$(I)>"0" AND X$(I)<"7" THEN LET Y=VAL X$(I)
 1525 NEXT I
 1530 PRINT X$(1);",";Y
 1532 SLOW 
 1535 IF X<V OR X>G THEN GOTO 2212
 1540 IF Y<V OR Y>G THEN GOTO 2218
 1545 IF NOT B(X,Y) THEN GOTO 1560
 1550 IF B<G OR B>=A+R THEN GOTO 2230
 1555 IF NOT S(CP,V) OR B(X,Y)>Q OR INT B(X,Y)=CODE C$ THEN GOTO 2238
 1560 LET S(CP,F)=B(X,Y)
 1565 LET B(X,Y)=D(K)
 1570 GOSUB 1900
 1599 RETURN 
 1600 FOR X=V TO G
 1610 FOR Y=V TO G
 1620 GOSUB 1900
 1630 NEXT Y
 1640 NEXT X
 1699 RETURN 
 1700 IF SF THEN GOTO 1785
 1705 LET X1=X
 1710 LET Y1=Y
 1720 PRINT AT E,O;"YOU MUST    ";TAB O;"CHOOSE A    ";TAB O;"LETTER FOR  ";TAB O;"THE STAR.   "
 1728 GOTO 1740
 1730 PRINT AT E,O;"PUSH ""ENTER""";TAB O;"IF NO CHANGE";TAB O;"OR ELSE TYPE";TAB O;"NEW LETTER. "
 1740 PRINT "WHAT LETTER ";TAB O;"WILL THE STAR CARD";TAB O;"NOW REPRESENT?                  "
 1745 INPUT Y$
 1750 IF (Y$="" OR Y$=CHR$ (H-N-V) OR Y$=" ") AND SF THEN RETURN 
 1752 IF Y$<"A" OR Y$>"Z" THEN GOTO 1745
 1754 IF SF OR INT S(CP,F)<>CODE Y$ THEN GOTO 1758
 1755 PRINT AT E+T,O;"DIFFERENT   ";TAB O;"LETTER.     "
 1757 GOTO 1740
 1758 LET SF=V
 1760 PRINT AT Z+V,E;Y$
 1765 LET X$=CHR$ (CODE Y$+H)
 1770 PRINT AT U*X1-V,U*Y1+A-U;X$
 1775 LET B(X1,Y1)=CODE X$+V/R
 1780 RETURN 
 1785 IF X<>X1 AND Y<>Y1 AND X+Y<>X1+Y1 AND X-Y<>X1-Y1 THEN RETURN 
 1786 LET EF=V
 1787 GOSUB 1800+50*(Y=Y1)
 1790 IF NOT EF THEN RETURN 
 1795 LET EF=O
 1798 LET Y$=""
 1799 GOTO 1730
 1800 FOR I=Y TO Y1 STEP SGN (Y1-Y)
 1805 LET J=X+(I-Y)*SGN (Y1-Y)*SGN (X1-X)
 1810 IF B(J,I)=O THEN LET EF=O
 1815 NEXT I
 1820 RETURN 
 1850 FOR I=X TO X1 STEP SGN (X1-X)
 1855 IF B(I,Y)=O THEN LET EF=O
 1860 NEXT I
 1865 RETURN 
 1900 LET Y$=CHR$ (T*F*(B(X,Y)>Q))
 1905 LET X$=CHR$ (INT B(X,Y)-H*(Y$>" "))
 1910 IF NOT SF THEN GOTO 1930
 1920 IF X=X1 AND Y=Y1 THEN LET X$=CHR$ (CODE X$+H)
 1930 PRINT AT U*X-T,U*Y+N+T;Y$;CHR$ (T*A*(B(X,Y)>O)+R*(B(X,Y)-INT B(X,Y)));TAB U*Y+N+T;X$;Y$
 1940 PRINT AT Z-V,O;
 1949 RETURN 
 2000 CLS 
 2005 FAST 
 2010 PRINT TAB N+U;"% % % % % % % % % % % % % % % % % % % % "
 2015 FOR I=O TO G-V
 2020 PRINT TAB N+U;"% :   :   :   :   :   :   % "
 2025 PRINT TAB N+U;"%A%B%C%D%E%F"(I+1);":   :   :   :   :   :   % "
 2030 PRINT TAB N+U;"% :.....:.....:.....:.....:.....:.....% "
 2035 NEXT I
 2040 PRINT TAB N+U;"% % %1% % %2% % %3% % %4% % %5% % %6% % "
 2050 PRINT TAB Z-V;"%K%A%R%T%I%K"
 2055 PRINT AT O,O;"P LEFT SCORE"
 2060 PRINT AT N,O;"PLAYER  YOUR";TAB O;"TO GO:  CARD";TAB O;"        ....... ";TAB O;"DECK:   : ####: ";TAB O;"DISCARD : ####: ";TAB O;"PILE:   :.....: "
 2099 RETURN 
 2100 FAST 
 2105 PRINT AT V,O;
 2110 FOR I=V TO P
 2115 PRINT N$(I,V TO U);TAB F-(S(I,V)>N);" ";S(I,V);TAB N+T-LEN STR$ S(I,T);S(I,T)
 2120 NEXT I
 2125 PRINT AT N+T,O;N$(CP,V TO G+T)
 2130 PRINT AT N+U,G-V;
 2135 IF D<=N THEN PRINT " ";
 2140 PRINT D
 2145 PRINT AT A,G+V-LEN STR$ DC;DC
 2150 IF NOT S(CP,V) THEN GOTO 2200
 2155 LET K=PX*CP-S(CP,V)+V
 2160 LET C=(D(K)>Q)
 2165 LET C$=CHR$ (D(K)-H*C)
 2170 LET S=R*(D(K)-INT D(K))
 2175 PRINT AT A-T,N;CHR$ (T*F*C);S;TAB N;C$;CHR$ (T*F*C)
 2180 IF NOT S(CP,V) THEN GOTO 2190
 2185 GOSUB 2910
 2190 PRINT AT Z-V,O;"WHERE DO YOU";TAB O;"WANT TO PUT YOUR   ";TAB O;"CARD - ROW, COLUMN?             "
 2195 PRINT AT Z+V,Z;
 2199 RETURN 
 2200 PRINT AT E,O;"YOUR HAND IS";TAB O;"EMPTY.  YOU ";TAB O;"DREW A CARD ";TAB O;"FROM DECK.  "
 2205 LET K=M+V-D
 2210 GOTO 2160
 2212 PRINT AT E,O;"ROW MUST BE ";TAB O;"A TO F.     "
 2216 GOTO 2222
 2218 PRINT AT E,O;"COLUMN MUST ";TAB O;"BE 1 TO 6.  "
 2222 PRINT "            "
 2224 PRINT "TRY AGAIN   "
 2226 GOSUB 2195
 2228 GOTO 1500
 2230 PRINT AT E,O;"YOU MUST PUT";TAB O;"IT ON AN    ";TAB O;"EMPTY SQUARE"
 2236 GOTO 2224
 2238 PRINT AT E,O;"YOU CANNOT  ";TAB O;"SUBSTITUTE  "
 2242 IF S(CP,V) THEN GOTO 2248
 2244 PRINT "FROM DECK.  "
 2246 GOTO 2224
 2248 IF B(X,Y)<Q THEN GOTO 2254
 2250 PRINT "A RED CARD. "
 2252 GOTO 2224
 2254 IF INT B(X,Y)<>CODE C$ THEN GOTO 1560
 2256 PRINT "SAME LETTER." 
 2258 GOTO 2224
 2260 PRINT AT E,O;"YOU HAVE TO ";TAB O;"SCORE IF YOU";TAB O;"SUBSTITUTE. ";TAB O;"TRY AGAIN.  "
 2268 LET EF=V
 2270 GOTO 2310
 2272 PRINT AT E,O;"YOUR MOVE IS";TAB O;"TAKEN BACK. ";TAB O;"YOU HAVE TO ";TAB O;"DO IT AGAIN."
 2274 IF NOT SF THEN GOTO 2280
 2276 IF X=X1 AND Y=Y1 THEN LET SF=O
 2280 LET B(X,Y)=S(CP,F)
 2282 GOSUB 1900
 2283 GOSUB 2190
 2284 RETURN 
 2300 LET S=O
 2305 GOSUB 2910
 2310 PRINT "DO YOU HAVE ";TAB O;"ANY WORDS TO SCORE "
 2313 GOSUB 2920
 2314 PRINT "- Y/N? ";
 2316 INPUT Y$
 2317 PRINT AT Z+V,G+V;Y$
 2318 IF Y$="Y" THEN GOTO 2330
 2320 IF Y$<>"N" THEN GOTO 2316
 2322 IF NOT S(CP,F) THEN RETURN 
 2324 IF EF THEN GOTO 2272
 2326 GOTO 2260
 2330 GOSUB 2950
 2331 GOSUB 2900
 2332 PRINT "ENTER WORDS ";TAB O;"IN ORDER ABOVE OR  ";TAB O;"PRESS ""ENTER"" TO SKIP DIRECTION."
 2340 FOR I=V TO F
 2341 INPUT X$
 2342 LET W$(I)=X$
 2343 LET W(I)=LEN X$
 2344 PRINT AT A+I,T;W$(I)
 2346 NEXT I
 2348 PRINT "IS ANY WORD ";TAB O;"MIS-SPELLED - Y/N? "
 2350 GOSUB 2920
 2352 INPUT Y$
 2354 PRINT AT Z,R+T;Y$
 2356 IF Y$="N" THEN GOTO 2377
 2357 IF Y$<>"Y" THEN GOTO 2352
 2358 PRINT "TYPE NUMBER AND RE-TYPE WORD."
 2359 LET EF=V
 2360 INPUT X$
 2361 LET W=O
 2362 FOR I=V TO LEN X$
 2363 IF NOT W AND (X$(I)<"1" OR X$(I)>"4") THEN GOTO 2370
 2364 IF NOT W THEN LET W=VAL X$(I)
 2365 IF X$(I)<"A" OR X$(I)>"Z" THEN GOTO 2370
 2366 LET W$(W)=X$(I TO )
 2367 LET W(W)=LEN X$-I+V
 2368 LET I=LEN X$
 2369 LET EF=O
 2370 NEXT I
 2371 IF NOT W THEN GOTO 2360
 2372 IF EF THEN LET W$(W)=""
 2373 IF EF THEN LET W(W)=0
 2374 PRINT AT A+W,T;W$(W)
 2375 PRINT AT Z-V,O;
 2376 GOTO 2348
 2377 PRINT AT Z,O;"CHALLENGED - Y/N?  "
 2378 GOSUB 2920
 2379 INPUT Y$
 2380 PRINT AT Z,Z-T;Y$
 2381 IF Y$="N" THEN GOTO 2390
 2382 IF Y$<>"Y" THEN GOTO 2377
 2383 PRINT "IS IT IN THE DICTIONARY - Y/N?  ";
 2384 INPUT Y$
 2385 PRINT AT Z+V,E+R;Y$
 2386 IF Y$="Y" THEN GOTO 2390
 2387 IF Y$<>"N" THEN GOTO 2384
 2388 PRINT AT Z+V,O;"YOU LOST YOUR SCORE FOR THE TURN"
 2389 RETURN 
 2390 GOSUB 2918
 2392 FOR W=V TO F
 2395 LET X$=""
 2397 PRINT AT Z-V,O;"WORD NO.    "
 2398 PRINT AT Z-V,N;W
 2399 IF NOT W(W) THEN GOTO 2460
 2400 FAST 
 2401 FOR I=V TO W(W)
 2402 IF W$(W,I)<"A" THEN GOTO 2406
 2404 LET X$=X$+W$(W,I)
 2406 NEXT I
 2410 IF LEN X$>V THEN GOTO 2420
 2412 PRINT "IS TOO SHORT; MUST ";TAB O;"BE AT LEAST 2 LETTERS.  RE-TYPE."
 2413 SLOW 
 2414 INPUT X$
 2415 LET W$(W)=X$
 2416 PRINT AT W+A,T;W$(W)
 2417 LET W(W)=LEN X$
 2418 GOSUB 2918
 2419 GOTO 2395
 2420 IF LEN X$<=G THEN GOTO 2430
 2422 PRINT "IS TOO LONG; CANNOT";TAB O;"BE MORE THAN 6 LETTERS. RE-TYPE."
 2426 GOTO 2413
 2430 GOSUB 2500
 2450 SLOW 
 2460 LET EF=O
 2470 NEXT W
 2475 IF S>O THEN GOTO 2490
 2480 IF S(CP,F) THEN GOTO 2260
 2490 PRINT AT Z-V,O;"TOTAL:      "
 2492 PRINT AT Z-V,N+(S<=N);S
 2496 PRINT "SCORE FOR YOUR TURN"
 2498 GOSUB 2920
 2499 RETURN 
 2500 LET EF=V
 2505 LET TS=O
 2510 LET L=LEN X$
 2515 LET K=O
 2520 FOR I=K+V TO L
 2525 IF CODE X$(I)=INT B(X,Y)-H*(B(X,Y)>Q) THEN LET EF=O
 2530 IF NOT EF THEN LET K=I
 2535 IF NOT EF THEN LET I=L
 2540 NEXT I
 2545 IF NOT K THEN GOTO 2700
 2550 IF EF THEN GOTO 2710
 2555 IF K=V THEN GOTO 2615
 2560 FOR I=K-V TO V STEP -V
 2565 IF W=F THEN GOTO 2590
 2567 IF I+Y-K<V THEN GOTO 2595
 2570 LET J=X+(K-I)*((W=T)-(W=U))
 2575 IF J<V OR J>G THEN GOTO 2595
 2580 IF INT B(J,I+Y-K)-H*(B(J,I+Y-K)>Q)<>CODE X$(I) THEN GOTO 2595
 2585 GOTO 2605
 2590 IF I+X-K<V THEN GOTO 2595
 2592 IF INT B(I+X-K,Y)-H*(B(I+X-K,Y)>Q)=CODE X$(I) THEN GOTO 2605
 2595 LET EF=V
 2600 LET I=V
 2605 NEXT I
 2610 IF EF THEN GOTO 2520
 2615 FOR I=V TO L
 2620 IF W=F THEN GOTO 2650
 2622 IF I+Y-K>G THEN GOTO 2665
 2625 LET J=X+(K-I)*((W=T)-(W=U))
 2627 IF I<=K THEN GOTO 2640
 2630 IF J<V OR J>G THEN GOTO 2665
 2635 IF INT B(J,I+Y-K)-H*(B(J,I+Y-K)>Q)<>CODE X$(I) THEN GOTO 2665
 2640 LET TS=TS+R*(B(J,I+Y-K)-INT B(J,I+Y-K))
 2645 GOTO 2680
 2650 IF I+X-K>G THEN GOTO 2665
 2652 IF INT B(I+X-K,Y)-H*(B(I+X-K,Y)>Q)<>CODE X$(I) THEN GOTO 2665
 2655 LET TS=TS+R*(B(I+X-K,Y)-INT B(I+X-K,Y))
 2660 GOTO 2680
 2665 LET EF=V
 2670 LET TS=O
 2675 LET I=L
 2680 NEXT I
 2685 IF EF THEN GOTO 2520
 2690 PRINT AT W+A,N;
 2692 IF TS<=N THEN PRINT " ";
 2694 PRINT TS
 2696 LET S=S+TS
 2699 RETURN 
 2700 PRINT AT Z,O;"MUST INCLUDE YOUR  ";TAB O;"LETTER TO COUNT.  RE-TYPE IT.   "
 2704 GOTO 2720
 2710 PRINT AT Z,O;"DOES NOT MATCH WORD";TAB O;"ON THE BOARD.  RE-TYPE IT.      "
 2720 INPUT X$
 2722 LET W$(W)=X$
 2724 LET W(W)=LEN X$
 2726 PRINT AT A+W,T;W$(W)
 2728 LET EF=O
 2729 GOSUB 2918
 2730 IF NOT W(W) THEN RETURN 
 2732 IF W(W)>V THEN GOTO 2500
 2734 PRINT AT Z,O;"IS TOO SHORT; MUST ";TAB O;"BE AT LEAST 2 LETTERS.  RE-TYPE."
 2738 GOTO 2720
 2800 LET B=O
 2805 LET J=V
 2810 FOR I=V TO P
 2815 IF K=U THEN GOTO 2825
 2820 LET S(I,U)=S(I,U)+S(I,T)
 2825 IF S(I,K)>S(J,K) THEN LET J=I
 2830 NEXT I
 2835 FOR I=V TO P
 2840 IF I=J THEN GOTO 2850
 2845 IF S(I,K)=S(J,K) THEN LET B=V
 2850 NEXT I
 2899 RETURN 
 2900 PRINT AT E,O;"1 ";W$(V);TAB O;"2 ";W$(T);TAB O;"3 ";W$(U);TAB O;"4 ";W$(F)
 2905 RETURN 
 2910 PRINT AT E,O;"            ";TAB O;"            ";TAB O;"            ";TAB O;"            "
 2915 RETURN 
 2918 PRINT AT Z,O;"SCORING YOUR WORDS "
 2920 PRINT AT Z+V,O;"                                "
 2922 PRINT AT Z+V,O;
 2924 RETURN 
 2930 SLOW 
 2932 IF INKEY$="" THEN GOTO 2932
 2935 LET Y$=INKEY$
 2937 FAST 
 2940 RETURN 
 2950 LET W$(V)="ACROSS"
 2952 LET W$(T)="DIAG. UP"
 2954 LET W$(U)="DIAG. DOWN"
 2956 LET W$(F)="DOWN"
 2958 RETURN 
 3000 CLS 
 3005 FAST 
 3010 PRINT "GAME OVER",,,,"PLAYER     SCORE     TOTAL"
 3015 FOR I=V TO P
 3020 PRINT I;" ";N$(I);TAB R-LEN STR$ S(I,T);S(I,T);TAB G+Z-LEN STR$ S(I,U);S(I,U)
 3025 NEXT I
 3030 PRINT AT A,O;"GAME WAS ";
 3035 IF B THEN PRINT "DRAWN.           "
 3040 IF NOT B THEN PRINT "WON BY ";N$(J)
 3045 LET CP=J+V
 3050 SLOW 
 3099 RETURN 
 5000 SAVE "KARTI%K"
 5010 GOTO 10

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

People

No people associated with this content.

Scroll to Top