Home » Personal collection » Acorn tapes » Commercial_Releases » boxed_acornsoft_tape10a_acorn_introductory_cassette.wav » RIVERGAME
RIVERGAME
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
| Tape/disk: | Home » Personal collection » Acorn tapes » Commercial_Releases » boxed_acornsoft_tape10a_acorn_introductory_cassette.wav |
| Filename: | RIVERGAME |
| Read OK: | ✔ |
| File size: | 2ED2 bytes |
| Load address: | FFFF0E00 |
| Exec address: | FFFF8023 |
Duplicates
There is 1 duplicate copy of this file in the archive:
- AEW website » acornsoft » acornsoft_tapes_Introductory-Cassette_Intro_E.uef » RIVERGAME
- Personal collection » Acorn tapes » Commercial_Releases » boxed_acornsoft_tape10a_acorn_introductory_cassette.wav » RIVERGAME
File contents
5MODE 4
6M%=LOMEM
7LOMEM=LOMEM+&810
8MEM=M%+2
9REM Make space for data.
10DIMSIZE(4),WHERE(4),W$(4)
20REM Single file RIVGAME
40CLS
50PRINT ''''"You are a man with a boat"
60PRINT "and with a chicken, a fox and some"
70PRINT "grain, which you must get to the other"
80PRINT "side of a river, using your little"
90PRINT "boat. "
100PRINT
110PRINT "Each object, including yourself,may be"
120PRINT " at the right bank (RB)"
130PRINT " at the left bank (LB)"
140PRINT " or in the boat (B)"
150PRINT "and you can move them around as you"
160PRINT "wish. You must remember that the FOX"
170PRINT "will eat the CHICKEN if you are"
180PRINT "not there to keep the peace; and the"
190PRINT "CHICKEN will eat the GRAIN if left"
200PRINT "alone with it."
210PRINT
220PROCSTARTOFF
230PROCWHATNOW
240END
250
260DEF PROCSTARTOFF
270RESTORE 320
280COLOUR 3:PRINT "PROCSTARTOFF"'
290FOR I=0 TO 4
300READ W$(I),SIZE(I):WHERE(I)=1
310NEXT I
320DATA BOAT,1.5,FOX,0.4,CHICKEN,0.3,GRAIN,1.5,MAN,1
330COLOUR 3
340PRINT "Press any key to go on."
350IF GET$="" THEN 350
355REM CHANGE MODE TO MODE 5
360VDU 22,5,24,1;350;1279;700;
370VDU 28,0,8,19,0,31,0,8,19,2,2,0,0,0
375VDU19,2,4;0;
380ENDPROC
390
400DEFPROCSHOWIT
410CLG
420COLOUR 2:PRINT "PROCSHOWIT"
430PROCPIC("RIVER",1,2,-350,-200,1,"")
440FOR I=0 TO 4
450W=WHERE(I)*400-100*I
460IF WHERE(I)=2 OR I=0 THEN W=300+100*WHERE(0):IF I=2 OR I=3 THEN W=W+104
463IF WHERE(I)=2 AND I=1 THEN W=W+52
465IF I=2 THEN H=20 ELSE IF I=1 THEN H=8 ELSE H=0
470PROCPIC(W$(I),SIZE(I),3,W,500+H,1,"")
480NEXT I
490ENDPROC
500
510DEF PROCWHATNOW
520COLOUR 2:PRINT "PROCWHATNOW"
530IF WHERE(0)+WHERE(1)+WHERE(2)+WHERE(3)+WHERE(4)=15 THEN COLOUR 3:PRINT'"You have done it! Congratulations!"':PROCSHOWIT:COLOUR3:END
540PROCSHOWIT
550VDU 28,0,31,19,23,31,0,31
555COLOUR3
560INPUT "What shall I move? (G,F,C,M,B) " THING$
570IF THING$="" THEN 550
580INPUT "Where to? (LB,B,RB) " PLACE$
590IF PLACE$="" THEN 580
600CLS
610VDU 28,0,8,19,0,31,0,8
620PROCMOVE(THING$,PLACE$)
630PROCWHATNOW
640ENDPROC
650
660DEF PROCMOVE(WHAT$,WHERE$)
670COLOUR 2:PRINT "PROCMOVE"
680PROCILLEGALMOVE(WHAT$,WHERE$)
690FOR LOOP=0 TO 4
700IF LEFT$(W$(LOOP),1)=WHAT$ THEN PROCPUTIN(WHAT$,WHERE$)
710NEXT LOOP
720PROCDISASTROUSMOVE(WHAT$,WHERE$)
730ENDPROC
740
750DEF PROCILLEGALMOVE(WHAT$,WHERE$)
760COLOUR 2:PRINT "PROCILLEGALMOVE"
770WRONGPLACE=TRUE
780WRONGTHING=TRUE
790WRONGSIDE=FALSE
800HELPLESSBOAT=FALSE
810MANABSENT=FALSE
820BOATLESS=FALSE
830WH=0
840IF WHERE$="LB" THEN WH=1
850IF WHERE$="B" THEN WH=2
860IF WHERE$="RB" THEN WH=3
870IF WH<>0 THEN WRONGPLACE=FALSE
880FOR LOOP=0 TO 4
890IF LEFT$(W$(LOOP),1)=WHAT$ AND LOOP<>0 AND WHERE(LOOP)=4-WH THEN BOATLESS=TRUE
900IF LEFT$(W$(LOOP),1)=WHAT$ AND WHERE(4)<>WHERE(LOOP) AND LOOP<>0 AND WHERE(4)<>WH THEN MANABSENT=TRUE
910IF LEFT$(W$(LOOP),1)=WHAT$ AND WHERE(LOOP)=WH THEN PROCALREADYTHERE(WHAT$,WHERE$):PROCWHATNOW
920IF LEFT$(W$(LOOP),1)=WHAT$ THEN WRONGTHING=FALSE
930NEXT LOOP
940IF WHAT$="B" AND WH<>4-WHERE(0) THEN WRONGSIDE=TRUE
950IF WHAT$="B" AND WHERE(4)<>2 THEN HELPLESSBOAT=TRUE
960IF WRONGPLACE THEN COLOUR 1:PRINT "I don't recognise "'WHERE$:PROCWHATNOW
970IF BOATLESS THEN COLOUR 1:PRINT "Illegal attempt to cross without boat! ":PROCWHATNOW
980IF WRONGTHING THEN COLOUR 1:PRINT "I don't know what a "'WHAT$;" is.":PROCWHATNOW
990IF HELPLESSBOAT THEN COLOUR 1:PRINT "Boat needs somebody to row her!":PROCWHATNOW
1000IF WRONGSIDE THEN COLOUR 1:PRINT "Boat is at the wrongside; cannot do it!":PROCWHATNOW
1010IF MANABSENT THEN COLOUR 1:PRINT "Man is not here!"'"Can not do the"'"moving!":PROCWHATNOW
1020ENDPROC
1030
1040DEF PROCALREADYTHERE(WHAT$,WHERE$)
1050COLOUR 2:PRINT "PROCALREADYTHERE"
1060LOCAL T1$,T2$
1070T1$=FNTRANSLATE(WHAT$)
1080T2$=FNTRANSLATE(WHERE$)
1090COLOUR 1:PRINT T1$;" is already at "'T2$
1100ENDPROC
1110
1120DEF FNTRANSLATE(WORD$)
1130RESULT$="":COUNTER=0
1140RESTORE 1200
1150REPEAT
1160COUNTER=COUNTER+1
1170READ TEST$
1180IF LEFT$(TEST$,1)=LEFT$(WORD$,1) THEN RESULT$=TEST$
1190UNTIL COUNTER=7 OR RESULT$<>""
1200DATA MAN,CHICKEN,FOX,GRAIN,BOAT,LBANK,RBANK
1210=RESULT$
1220
1230DEFPROCPUTIN(WHAT$,WHERE$)
1240IF WHERE$="LB" THEN WH=1
1250IF WHERE$="B" THEN WH=2
1260IF WHERE$="RB" THEN WH=3
1270FOR I=0 TO 4
1280IF LEFT$(W$(I),1)=WHAT$ THEN WHERE(I)=WH
1290NEXT
1300ENDPROC
1310
1320DEF PROCDISASTROUSMOVE(WHAT$,WHERE$)
1330COLOUR 2:PRINT "PROCDISASTROUSMOVE"
1340INBOAT=0
1350FOR I=1 TO 4
1360IF WHERE(I)=2 THEN INBOAT=INBOAT+1
1370NEXT I
1380IF INBOAT>2 THEN COLOUR 1:PRINT "The boat has sunk I'mafraid. Only two"'"people allowed!":PROCSHOWIT:PROCSTARTOFF
1390IF FNSUPPER("F","C")=FALSE AND FNSUPPER("C","G")=FALSE THEN ENDPROC
1400ENDPROC
1410
1420DEF FNSUPPER(ACTIVE$,PASSIVE$)
1430COLOUR 2:PRINT "FNSUPPER"
1440FOR I=0 TO 4
1450IF LEFT$(W$(I),1)=ACTIVE$ THEN A=I
1460IF LEFT$(W$(I),1)=PASSIVE$ THEN P=I
1470NEXT I
1480IF (WHERE(A)=WHERE(P)) AND (WHERE(A)<>WHERE(4)) THEN COLOUR 1:PRINT "THE ";FNTRANSLATE(PASSIVE$)" HAS BEEN"'"EATEN BY THE ";FNTRANSLATE(ACTIVE$):PROCSHOWIT:PROCSTARTOFF
1490=((WHERE(A)=WHERE(P)) AND (WHERE(A)<>WHERE(4)))
1500
1510DEFPROCPIC(name$,size,colour,posx,posy,on,comment$)
1520GCOL 0,colour
1530VDU 5
1540MOVE posx,posy-48
1550PRINT comment$
1560VDU 4
1570LOCAL place,col%,plot%,x,y,mag,len,i%,j
1580place=MEM+4
1590IF $(place)=name$ THEN 1640
1600REPEAT
1610place=place+!(place-4)
1620UNTIL $(place)="" OR $(place)=name$
1630IF $(place)="" THEN ENDPROC
1640len=!(place-4)
1650place=place+LEN(name$)+1
1660MOVE posx,posy
1670FOR i%=0 TO len-LEN(name$)-15 STEP 10
1680plot%=?(place+i%)
1690col%=?(place+i%+1)
1700IF col%=3 THEN col%=colour
1710x=!(place+i%+2)*size
1720y=!(place+i%+6)*size
1730GCOL 0,col%*on
1740IF plot%<>72 AND plot%<>73 THEN PLOT plot%,x,y : GOTO 1850
1750IF x<4 THEN 1850
1760PLOT 0,0,x : PLOT 65,0,0
1770FOR j=x-4 TO -x+4 STEP -4
1780PLOT 0,0,-4
1790y=SQR(x*x-j*j)
1800PLOT 0,-y,0:PLOT 65,0,0
1810IF plot%=73 THEN PLOT1,2*y,0 ELSE PLOT0,2*y,0
1820PLOT 65,0,0:PLOT 0,-y,0
1830NEXT j
1840PLOT 0,0,-4:PLOT 65,0,0
1850NEXT i%
1860MOVE 0,0
1870ENDPROC
� 4
M%=�
�=�+&810
MEM=M%+2
� Make space for data.
�SIZE(4),WHERE(4),W$(4)
� Single file RIVGAME
(�
2%� ''''"You are a man with a boat"
<*� "and with a chicken, a fox and some"
F.� "grain, which you must get to the other"
P*� "side of a river, using your little"
Z� "boat. "
d�
n.� "Each object, including yourself,may be"
x$� " at the right bank (RB)"
�#� " at the left bank (LB)"
� � " or in the boat (B)"
�+� "and you can move them around as you"
�,� "wish. You must remember that the FOX"
�'� "will eat the CHICKEN if you are"
�,� "not there to keep the peace; and the"
�*� "CHICKEN will eat the GRAIN if left"
�� "alone with it."
��
�
�STARTOFF
��WHATNOW
��
�
� �STARTOFF
� �D@A
� 3:� "PROCSTARTOFF"'
"
� I=0 � 4
,� W$(I),SIZE(I):WHERE(I)=1
6� I
@2� BOAT,1.5,FOX,0.4,CHICKEN,0.3,GRAIN,1.5,MAN,1
J� 3
T� "Press any key to go on."
^� �="" � �D^A
c� CHANGE MODE TO MODE 5
h� 22,5,24,1;350;1279;700;
r%� 28,0,8,19,0,31,0,8,19,2,2,0,0,0
w�19,2,4;0;
|�
�
���SHOWIT
��
�� 2:� "PROCSHOWIT"
�$�PIC("RIVER",1,2,-350,-200,1,"")
�
� I=0 � 4
�W=WHERE(I)*400-100*I
�A� WHERE(I)=2 � I=0 � W=300+100*WHERE(0):� I=2 � I=3 � W=W+104
�� WHERE(I)=2 � I=1 � W=W+52
�$� I=2 � H=20 � � I=1 � H=8 � H=0
�&�PIC(W$(I),SIZE(I),3,W,500+H,1,"")
�� I
��
�
�� �WHATNOW
� 2:� "PROCWHATNOW"
r� WHERE(0)+WHERE(1)+WHERE(2)+WHERE(3)+WHERE(4)=15 � � 3:�'"You have done it! Congratulations!"':�SHOWIT:�3:�
�SHOWIT
&� 28,0,31,19,23,31,0,31
+�3
0/� "What shall I move? (G,F,C,M,B) " THING$
:� THING$="" � �TfB
D#� "Where to? (LB,B,RB) " PLACE$
N� PLACE$="" � �DDB
X�
b� 28,0,8,19,0,31,0,8
l�MOVE(THING$,PLACE$)
v�WHATNOW
��
�
�� �MOVE(WHAT$,WHERE$)
�� 2:� "PROCMOVE"
��ILLEGALMOVE(WHAT$,WHERE$)
�� LOOP=0 � 4
�/� �W$(LOOP),1)=WHAT$ � �PUTIN(WHAT$,WHERE$)
�
� LOOP
�!�DISASTROUSMOVE(WHAT$,WHERE$)
��
�
� � �ILLEGALMOVE(WHAT$,WHERE$)
�� 2:� "PROCILLEGALMOVE"
WRONGPLACE=�
WRONGTHING=�
WRONGSIDE=�
HELPLESSBOAT=�
*MANABSENT=�
4BOATLESS=�
>WH=0
H� WHERE$="LB" � WH=1
R� WHERE$="B" � WH=2
\� WHERE$="RB" � WH=3
f� WH<>0 � WRONGPLACE=�
p� LOOP=0 � 4
zC� �W$(LOOP),1)=WHAT$ � LOOP<>0 � WHERE(LOOP)=4-WH � BOATLESS=�
�W� �W$(LOOP),1)=WHAT$ � WHERE(4)<>WHERE(LOOP) � LOOP<>0 � WHERE(4)<>WH � MANABSENT=�
�P� �W$(LOOP),1)=WHAT$ � WHERE(LOOP)=WH � �ALREADYTHERE(WHAT$,WHERE$):�WHATNOW
�'� �W$(LOOP),1)=WHAT$ � WRONGTHING=�
�
� LOOP
�.� WHAT$="B" � WH<>4-WHERE(0) � WRONGSIDE=�
�.� WHAT$="B" � WHERE(4)<>2 � HELPLESSBOAT=�
�=� WRONGPLACE � � 1:� "I don't recognise "'WHERE$:�WHATNOW
�J� BOATLESS � � 1:� "Illegal attempt to cross without boat! ":�WHATNOW
�E� WRONGTHING � � 1:� "I don't know what a "'WHAT$;" is.":�WHATNOW
�E� HELPLESSBOAT � � 1:� "Boat needs somebody to row her!":�WHATNOW
�J� WRONGSIDE � � 1:� "Boat is at the wrongside; cannot do it!":�WHATNOW
�N� MANABSENT � � 1:� "Man is not here!"'"Can not do the"'"moving!":�WHATNOW
��
!� �ALREADYTHERE(WHAT$,WHERE$)
� 2:� "PROCALREADYTHERE"
$
� T1$,T2$
.T1$=�TRANSLATE(WHAT$)
8T2$=�TRANSLATE(WHERE$)
B#� 1:� T1$;" is already at "'T2$
L�
V
`� �TRANSLATE(WORD$)
jRESULT$="":COUNTER=0
t
� �tpD
~�
�COUNTER=COUNTER+1
�� TEST$
�)� �TEST$,1)=�WORD$,1) � RESULT$=TEST$
�� COUNTER=7 � RESULT$<>""
�,� MAN,CHICKEN,FOX,GRAIN,BOAT,LBANK,RBANK
�=RESULT$
�
���PUTIN(WHAT$,WHERE$)
�� WHERE$="LB" � WH=1
�� WHERE$="B" � WH=2
�� WHERE$="RB" � WH=3
�
� I=0 � 4
#� �W$(I),1)=WHAT$ � WHERE(I)=WH
�
�
(#� �DISASTROUSMOVE(WHAT$,WHERE$)
2� 2:� "PROCDISASTROUSMOVE"
<INBOAT=0
F
� I=1 � 4
P"� WHERE(I)=2 � INBOAT=INBOAT+1
Z� I
db� INBOAT>2 � � 1:� "The boat has sunk I'mafraid. Only two"'"people allowed!":�SHOWIT:�STARTOFF
n1� �SUPPER("F","C")=� � �SUPPER("C","G")=� � �
x�
�
�� �SUPPER(ACTIVE$,PASSIVE$)
�� 2:� "FNSUPPER"
�
� I=0 � 4
�� �W$(I),1)=ACTIVE$ � A=I
�� �W$(I),1)=PASSIVE$ � P=I
�� I
ȕ� (WHERE(A)=WHERE(P)) � (WHERE(A)<>WHERE(4)) � � 1:� "THE ";�TRANSLATE(PASSIVE$)" HAS BEEN"'"EATEN BY THE ";�TRANSLATE(ACTIVE$):�SHOWIT:�STARTOFF
�1=((WHERE(A)=WHERE(P)) � (WHERE(A)<>WHERE(4)))
�
�2��PIC(name$,size,colour,posx,posy,on,comment$)
�� 0,colour
�� 5
� posx,posy-48
� comment$
� 4
"'� place,col%,plot%,x,y,mag,len,i%,j
,place=MEM+4
6� $(place)=name$ � �DhF
@�
Jplace=place+!(place-4)
T"� $(place)="" � $(place)=name$
^� $(place)="" � �
hlen=!(place-4)
rplace=place+�(name$)+1
|� posx,posy
�!� i%=0 � len-�(name$)-15 � 10
�plot%=?(place+i%)
�col%=?(place+i%+1)
�� col%=3 � col%=colour
�x=!(place+i%+2)*size
�y=!(place+i%+6)*size
�� 0,col%*on
�2� plot%<>72 � plot%<>73 � � plot%,x,y : � �TzG
�� x<4 � �TzG
�� 0,0,x : � 65,0,0
�� j=x-4 � -x+4 � -4
�� 0,0,-4
�y=�(x*x-j*j)
� 0,-y,0:� 65,0,0
$� plot%=73 � �1,2*y,0 � �0,2*y,0
� 65,0,0:� 0,-y,0
&� j
0� 0,0,-4:� 65,0,0
:� i%
D � 0,0
N�
�O HOUSE
F Qd ����Q F
�� Q������Q ��� Q ��Q <