This is the old Wolf, Goat, Cabbage puzzle for the ZX81. The major update was removing the INPUT
commands to make it more interactive and to start over if failed or done.
This program was originally published in 1982 in the book “Computer Puzzles: For Spectrum & ZX81.’
PROG : 16509
D-FILE: 18687
VARS : 19480
E-LINE: 19481
STKBOT: 19481
STKEND: 19481
9999 means line number
PRINT means treat as KEYWORD P
5 REM THE WOLF, THE GOAT AND
THE CABBAGE
6 REM COMPUTER PUZZLES: FOR
SPECTRUM AND ZX81
7 REM BY IAN STEWART AND
ROBIN JONES, (C) 1982
8 REM UPDATED BY STEVEN REID,
(C) 2024
10 LET B$=" ´ººº÷ "
20 LET BC=0
30 LET QUERY=500
40 LET CHECK=1000
50 LET BOAT=2000
60 LET BK=1
70 LET OUT=2500
80 LET IN=3000
82 LET ERROR=5000
85 LET EAT=4000
86 LET DONE=5030
87 LET KEY=5500
90 LET C$=" "
93 DIM D$(2,3)
95 LET D$(1)="WGC"
100 PRINT AT 15,0;" ³³³
³³³"
110 PRINT AT 16,0;" úúúúúúú
úúúúúúúúúúúúúúú "
120 PRINT AT 14,2;D$(1)
130 PRINT AT 15,5;B$
200 REM MOVE
210 GOSUB QUERY
220 GOSUB BOAT
230 GOTO 200
400 REM QUERY
505 IF BC=0 THEN GOTO 540
510 PRINT AT 2,0;"TAKE OUT OF B
OAT?"
520 GOSUB KEY
525 LET O$=K$
530 GOSUB OUT
535 IF D$(BK)=" " THEN GOTO 5
70
540 PRINT AT 2,0;"PUT INTO BOAT
? "
550 GOSUB KEY
555 LET I$=K$
560 GOSUB IN
570 RETURN
1000 REM CHECK
1010 IF D$(2)="WGC" THEN PRINT
AT 2,0;" WELL DONE "
1020 IF D$(2)="WGC" THEN GOTO DO
NE
1030 RETURN
2000 REM BOAT
2010 FOR T=5*(BK=1)+20*(BK<>1)
TO 20*(BK=1)+5*(BK<>1) STEP 1-2
*(BK<>1)
2020 PRINT AT 15,T;B$
2025 PRINT AT 14,T;C$
2030 NEXT T
2035 GOSUB EAT
2040 LET BK=3-BK
2050 RETURN
2500 REM OUT
2505 IF O$="" THEN RETURN
2510 FOR F=3 TO 5
2520 IF C$(F)=O$ THEN GOTO 2540
2530 NEXT F
2535 RETURN
2540 LET C$(F)=" "
2550 LET D$(BK,F-2)=O$
2560 PRINT AT 14,2*(BK=1)+27*(BK
<>1);D$(BK)
2570 PRINT AT 14,5*(BK=1)+20*(BK
<>1);C$
2580 LET BC=BC-1
2590 GOSUB CHECK
2600 RETURN
3000 REM IN
3005 IF I$="" THEN RETURN
3010 FOR F=1 TO 3
3020 IF D$(BK,F)=I$ THEN GOTO 30
40
3030 NEXT F
3035 RETURN
3040 LET D$(BK,F)=" "
3050 LET C$(F+2)=I$
3060 PRINT AT 14,2*(BK=1)+27*(BK
<>1);D$(BK)
3070 PRINT AT 14,5*(BK=1)+20*(BK
<>1);C$
3080 LET BC=BC+1
3085 IF BC=2 THEN GOTO ERROR
3090 GOSUB CHECK
4000 REM EAT
4010 LET X$=D$(BK)
4020 IF X$="WG " OR X$=" GC"
THEN GOTO 4040
4030 RETURN
4040 PRINT AT 2,0;" WOOPS..
.EATEN "
4050 GOTO DONE
5000 REM ERROR
5010 PRINT AT 2,0;"SORRY, TOO MA
NY IN BOAT. TRY"
5020 PRINT "AGAIN"
5030 PRINT AT 20,0;"PRESS A KEY
TO CONTINUE..."
5040 IF INKEY$="" THEN GOTO 5040
5050 CLS
5060 RUN
5500 REM KEY
5510 LET K$=INKEY$
5520 IF K$="" THEN GOTO 5510
5530 RETURN
6000 SAVE "WGC"
6010 RUN