ZX81 Listing for wgc.p


ZX81 program listing for THE WOLF, THE GOAT AND THE CABBAGE

THE WOLF, THE GOAT AND THE CABBAGE (wgc.p)

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.’


SYSTEM VARIABLES

PROG  : 16509
D-FILE: 18687
VARS  : 19480
E-LINE: 19481
STKBOT: 19481
STKEND: 19481


LEGEND

9999 means line number
PRINT means treat as KEYWORD P


PROGRAM LISTING

   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