ZX81 Programs


Read about, play, run, or list games, animations, and more. These are my programs from the ’80s to today.

ZX81 Program Listing

wgc (wgc.p)


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