P704 CEEFAX 704 Sat 16 Apr 17:20/37  ANIMAL Age: 7+ "Animal" is unusual in that it may bj used at various levels; as a simple game ot as a serious educational piece of software. The program aims to develop the ability to classify objects (animals) using YES/NO questions, and an understanding of logical information processing using a "tree" structure. Instructions for use are included in the program, and presented in "menu" form. Information may be saved to disc or cassette tape, and may be recalled and modified at a later date. Program follows
P704 CEEFAX 704 Sat 16 Apr 17:16/17 |B211 F|a 6AN MAL 0825 03/83|i 4BBBC316k |p|s÷#1÷e|s÷Z0 1 R ANI A / hj animal g m 2 R M Mi roil ct onics Education Programme 30REM MICROP MET Softwar Pack 1 4 REM (c) CE T 1982 / ISBN x xxxxx xxx 50REM De one / Programm t: Adrian R.M.Jon s 60REM E ditor: Bob Coates 7 REM Ve sign 1.0 / 9 Nov m er 1982 80RE Works with BBC Micro (48pZ and SP C UM v rsions also av ailabl 9 R M(************************* ****) 1 0ONERR.G.210 110MO.7:PROCcolour 120PROCOFF 13 PROCc nt (C R$C +"Th ",9 :PROCc ntr (CHR$C +"Animal Gam ",11):PR OCspac 21 140MO.5 1 0 NE .G.220 16 P OCthe#anim l 170PROCinitialis 180PROCma in 190MO.7 200END 210 FER < 17TH.R PO.:P ." at l n ";ESL:ENDEL.CL.:G.110 220IFER R<>17TH.R PO.:P." at line "; RL:ENDEL.CL .:G.170 230R M(************************* ****) 240DEFPROCmain:REM(*Main control *) 250ONERR.G.3660 260REP. 270 nd=FA. 28 P OCm nu 290IFchoice =1 ROClist EL.I|c0
P704 CEEFAX 704 Sat 16 Apr 17:21/29 |B2121F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 Fchoice =2PROCguess EL.IFchoice =3PROCsa ve EL.IFchoice =4PROCretrieve#data EL.IF choice=5PROCdelete EL.PROCend 300U.end 3 10E. 320REM(**************************** *) 330DEFPROCmenu 34pV.26,12 350PROCOFF 360PROCcentre(CHR$C%+"ANIMAL",1) 370ONER R.G.3660 380PROCDBL("You can:",2,3) 390P ROCDBL("1. List the animals",7,5) 400PRO CDBL("2. Let mj guess your animal",7,8) 41pPROCDBL("3. Save the animals",7,11) 4 2pPROCDBLX"4. Load data",7,14) 430PROCDB L("5. Delete last animal",7,17) 440PROCD BL("6. End the program",7,20) 450PROCDBL (CHR$C%+"Enter your choice (1-6) ",5,2 3):V.8,8 4vp*FX25 47pPROCGPI(1,1) 480cho ice=VAL(A$) 490E. 50pREM(*************** **************) 510DEFPROCinitialisj 52 0*KEY1p"OLD|M RUN|M" 530*FX4,1 540*FX11 550ONERR.G.3660 560V.22,7 570file=FA.:fn d=FA. 580DIManimal$(200):REM number of a nimals+questions (see also line 1610)|c0
P704 CJEFAX 704 Sat 16 Apr 17:21/46 |B2131F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 590D."4","/QDoes it live in water/Y4/N3 /","/agoldfish","/ablackbird" 600F.I%=0T O3 610READanimal$(I%) 620N.I% 630E. 640R EM(*****************************) 650DEF PROCthe#animal:REM (*Draw animal at star t*) v60PROCOFF 670V.18,0,1,18,0,130,16 6 80PROCELLIPSE(300,500,90,40,650,500,TRUE * 690V.18,0,0 7p0PROCELLIPSE(150,250,90, 20,650,400,TRUE) 71pV.18,2,1 720PROCELLI PSI(200,175,100,20,300,700,TRUEI 730PROC ELLIPSEX2p0,175,80,20,1000,700,TRUE) 740 V.18,0,3 750PROCELLIPSE(100,50,90,20,500 ,650,TRUE) 760PROCELLIPSE(100,50,90,20,8 00,650,TRUE) 770V.18,0,0 780PROCELLIPSE( u0,24,90,2p,48p,630,TRUE) 790PROCELLIPSE (5p,24,90,20,780,630,TRUE) 8ppV.17,130:V .17,0 810P.TAB(3,28)"Press SPACE bar" 82 0*FX15 830REP.U.GE.=" " 840E. 850REM(*** **************************) 860DEFPROCEL LJPSE(A,B,INC,N%,X,Y,FILL* 870LOC.P,C1,C 2,C3,S1,S4,S3,M%,T1,Z%,X2,Y1 880P=2*P|c0
P704 CEEFAX 704 Sat 16 Apr 17:17/04 |B2141F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 I/XN%-1):INC=INC*PI/180 890C1=COS(INC):S 1=SIN(INC) 900C2=COS(P):S2=SIN(P) 910C3= 1:S3=0 920V.29,X;Y; 930F.M%=0TON% 940IFM %=0TH.Z%=4EL.Z%=5 950IFFILL TH.Z%=Z%+80: MOVE0,0 960X1>A*C3:Y1=B*S3 970PL.Z%,(X1* C1-Y1*S1),(X1*S1+Y1*C1) 980T1=C3*C2-S3*S 2 990S3=S3*C2+C3*S2 1000C3=T1 1010N.M% 1 p20E. 103pREMX************************** ***) 104pDEFPROCend 1050V.26,12 1060PROC centre(CHR$C%+"End",1) 1070PROCcentre("A re you sure?",9) 1080PROCqujstion(19) 10 90IFLE.A$,1)="N"TH.end=FA.:E. 1100*FX 4, 0 111p*FX 11,50 112pV.12 1130end=TRUE 11 40E. 1150REM(*************************** **) 1160DEFPROCqujstion(Y%) 1170PROCDBL( CHR$C%+"Please answer Yes or No",2,Y%) 1 18phor=POT+1:vest=Y%-1 1190PROCBOX(" " ,hot,vest) 1200PROCGPI(6,3) 1210E. 1220R EM(******************************) 1230D EFPROCguess 1240V.26,12 1250PROCcentre(C HR$C*+"Guess",1) 1260IFfili X$=CHR$D%|c0
P704 CEEFAX 704 Sat 16 Apr 17:22/11 |B2151F|a36ANIMAL10825:03/83|i44BBBC316k |p|s÷#1÷e|s÷Z0 +"Data file:"+CHR$E%+filename$:P.TAB(39- LEN(X$)+(ARC(LE.X$,1))>127),3)X$ 1270V.2 8,p,24,39,3 1280PROCDBL(CHR$F%+"Think of an animal ",9,8) 1290P.TAB(4,20)CHR$C%+ "Prius ESCAPE for choice page":PROCspace (19) 1300count%=1 1310REP. 1320PROCintet rogate(count%) 1330count%=VAL(M.quest$,y es%+2,no%-yes%-2)) 1340queut$=animal$(co tnt%) 1350U.LE.quest$,2)<>"/Q" 1360PROCw hich#article(RI.quest$,LEN(quest$)-2)) 1 37pV.12 1380PROCcintreX"Is it"+article$+ RI.quest$,LEN(quest$)-2)+"?",6) 1390PROC question(16) 1400IFLE.A$,1)="Y"TH.1660 1 410V.12,7,7:PROCDBL("I give up!",3,3) 14 20PROCDBL("Please tell mj your animal.", 3,6) 1430PROCDBL("a/an ",3,9):PROCGPI(7, 22) 1440new#animal$=A$ 1450PROCwhich#art icle(new#animal$) 1460V.12 1470PROCcentr e(bPlease type in a question that would ",4) 1480PROCcentriX"distinguish"+articl e$+CHR$127+CHR$D%+new#animal$,6) 1490|c0
P704 CEEFAX 704 Sat 16 Apr 17:22/34 |B2161F| 6ANIMAL1 82 :03/83|i 4BBBC316k |p|s÷#1÷e|s÷Z0 PROCwhich#articl (RJ.quest$,LENqu t$-2) 1500PROCcentri("from"+article$+CHR$127 +CHR$D%+R .quest$,L Nquest$-2)+".",8) 15 2pPROCDBL b ",1,11) 152pPROCGPI(2,68 15 30new#question$=A$ 1540PROCwhich#article (new#animal$) 1550V.12 1560PROCcentt ("F or"+article$+CHR$127+CHR$D%+new#animal$+ CHR$E%+"the ,6) 1570PROCcent e "answ w ould bj? ",8) 1580PROCquestion(16) 1590 IFLJ.A ,1)="Y"TH.reply$="N"EL.reply$="Y" 1600numbe %=VAL(animal$(0)) 1610IFn mbe r%+2>200V.12,7:PROCcentri("Sorry thjte's no room lift.",8):PROCspaci(21):E. 1620 animal (0)=STU$(number%+2) 1630animal$(n umber%)=animal$(count%) 1640animal$(numb e +1)="/a"+new#animal$ 1650animal$(corn t ="/Q"+new#question$+"/"+LJ.A$,1)+STU$ (number +1)+"/"+reply$+STU$(number%)+"/" 1660G.1240 1670E. 1680REM(************* *****************) 1690DEFPROCint trogat e(count ) 1700LOC.I%,miss$ 171 V.28,0|c0
P704 CEEFAX 704 Sat 16 Apr 17:22/56 |B2171F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 ,24,39,5 1720quest$=animal$(count%) 1730 mess$="" 1740I%=3 1750REP. 1760mess$=mes s$+M.quest$,I%,1) 1770I%=I%+1 1780U.M.qu est$,I%,1)="/" 1790V.12 1800mess$=mess$+ "?" 1810PROCquestprint(mess$,6) 1820PROC question(16) 1830yeu%=2 1840REP. 1850yes *=yes*+1 1860U.M.quest$,yes%,2)="/"+LE.A $,1) 1870no)=yes% 1880REP. 189pno)=no)+1 1900U.M.quest$,no%,1)="/" 1910E. 1920RJ M(******************************) 1930DE FPROClist 1940V.26,12 1950PROCcentri(CHR $C*+"Animals I know",1) 1960IFfile X$=CH R$D%+bData file:"+CHR$E*+filenamed:P.TAB (39-LEN(X$)+(ARC(LE.X$,1))>127),3)X$ 197 0V.28,0,24,39,5 1980Ywhere%=1:Xwheri%=8 1990I%=1 2000REP. 2010IFYwhjre%>13PROCsp ace(21):V.28,0,24,39,5,12:Xwhere%=8:Ywhj re%=1 2020IFLE.animal$(I%),2)="/a"TH.PRO Cprint#animal(0):PROCDBL(letter$,Xwhere% ,Ywhjte%):Ywhere%=Ywhete%+2 2030I%=I%+1 2p40U.animal$(I%)="" 2050PROCspace(21|c0
P704 CJJFAX 704 Sat 16 Apr 17:28/19 |B2181F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷i|s÷Z0 ):PROCcintri(CHR$C%+"Questions I know",1 ):V.28,0,24,39,5,12:Xwhere%=8:Ywherj%=1 2p60Ywhere%=1:Xwhjre%=1:I%=1 2070REP. 20 80IFLE.animal$(I%),2)="/Q"PROCprint#anim al(1):PROCquestprint(letter$,Ywheri%):Yw hjreI=YwPjre)+inc 2090I%= %+1 2100U.anim ald(I%)="" 2110PROCspaci(21) 2120E. 2130 REM(******************************) 2140 DEFPROCprint#animal(X%) 2150lettet$="" 2 160IFX*=1G.2210 2178F.count%=3TOLEN(anim al$(I%)) 2180lettit$=letter$+M.animal$(I *),count%,1) 2190N.count% 2200IFX*=0E. 2 210IFYwheti)>=13PROCspace(21):V.28,0,24, 39,5,12:Xwhjre)=1:Ywhete%=1 2220count%=3 2230REP. 2240lettet$=letter$+M.animal$( I%),count%,1):count%=count%+1 2250U.M.an imal$(I%),count%,1)="/" 2260letter$=lest er$+"?":IFLEN(litter$)<=32littet$=letter $+STRJ.33-LEN(litter$)," ") 2270E. 2280D EF0ROCtest(K%) 2290LOC.t$,t1$ 2300t$="/Y "+animal$(0):t1$="/N"+animal$(0) 2310|c0
P704 CEEFAX 704 Sat 16 Apr 17:18/20 |B2191F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 IFINS.animal$(K%),t$)<>0G.2330 2320IFINS .animal$(K%),t1$)=pfnd=FA.:E. 2330animal $(K%)=animal$(number%):fnd=TRUE 2340E. 2 350DEFPROCcentri(X$,Y%) 2360PROCDBL(X$,2 0-.5*LEN(X$)+(ARC(LE.X$,1))>127),Y%) 237 0E. 2380REM(**************************** *) 2390DEFPROCDBL(X$,X2%,Y1%) 2400P.TAB( X1%-1,Y1%)CHR$&8D;X$;TAB(X1%-1,Y1%+1)CHR $&8D;X$;:V.11 2410E. 2420REM(*********** ******************) 2430DEFPROCspace(Y% ) 2450V.26 2460PROCcentre(CHR$C%+"Prius "+CHR$F%+"SPACE "+CHR$C%+"bar",Y%) 2480R EP.U.GET=32 2490E. 2520REM(************* ****************) 2530DEFPROCOFF:V.23;11 ,0;0;0;0:E. 2540DEFPROCON:V.23;11,255;0; 0;p:E. 2550REM(************************* ****) 2u6pDEFPROCGPIXF2,L*) 2570LOC.B%,H % 2580IFF2<>6A.L%<34PROCON 2590*FX15 260 0P%=POT 2610A$="":C$=b":IFF2<>6A.L%<34PR OCDBL(CHR$F%+STRI.L%,".")+STRI.L%,CHR$8) ,P%,VP.) 2620IFF2<>6A.L%>34PROCDBL(CH|c0
P704 CEEFAX 704 Sat 16 Apr 17:18/48 |B21A1F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 RdF*+STRJ.34,"."),P%,VP.):PROCDBL(CHR$F% +STRI.L%-34,".")+STRI.L%-34,CHR$8),P%,VP .+2):V.11,11 2630B%=GET:H%=LEN(A$) 2640I FXBI=32)A.(HI>0)TH.279p EL.IF(B%=32)A.(H %=0)TH.2630 2650IF(B%=13)A.(H%>0)TH.2850 2vv0IF(B%=127)A.(H)>0)A.F2=6A$=LE.A$,H) -1):PROCBOX(A$+STRI.3-LEN(A$)," "),hot,v est):G.2630 2670IF(B%=127)A.(H%>0A.H%<35 RA.F2<>6A$=LE.A$,H%-1):PROCDBL(CHR$E*+A$ +b.",P%,VP.):V.8:G.2630 2680IFXB%=127)A. (H%>0A.H%>=35)A.F2<>6A$=LE.A$,H%-1):C$=L E.C$,LEN(C$)-1):PROCDBL(CHR$F%+C$+".",P% ,VP.+2):V.11,11,8:G.2630 2690IFF2=1A.(B% >=49A.B%<=54)TH.2790 2700IFF2=2A.((B%>=6 5A.B%<=90)OR(B%>=97A.B%<=122)OR(B%=46)OR (B%=63))TH.2790 2710IFF2=3A.((B%>=65A.B% <=90)OR(B%>=48A.B%<=57)OR(B%>=97A.B%<=12 2))TH.2790 2720IFF2=4A.B%<>13TH.2790 27 30IFF2=5A.((B%>=65A.B%<=90)ORXB%>=97A.B% <=122)OR(B%=45)OR(B%=44)OR(B%=39)OR(B%=3 8))TH.2790 2740IFH%=0A.B%>97B%=B%-32|c0
P704 CEEFAX 704 Sat 16 Apr 17:29/01 |B21B1F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 EL.IFH)>0A.B%<91B%=B%+32 2750B$=CHR$(B%) 27v0IFF2>6A.XB$="Y"ORB$="N"ORB$="i"ORB$ ="s"ORB$="o")TH.2790 2770IFF2=7A.((B%>=6 5A.B)<=90)OR(B)>=97A.B)<=122)OR(B%=46))T H.2790 278pV.7:G.2630 2790IFH%=0A.B%>90B %=B%-32EL.IFH%>0A.B%>64A.B%<91B%=B%+32 2 800IFH)=0A.F2>7B%=B%+32 2810IF(H%<L%)A.H *<34A.F2<>6A$=A$+CHR$(B%):PROCDBL(CHR$F% +A$,P%,VP.):G.2630 2820IF(H%<L*)A.H%>33A .E2<>6A$=A$+CHR$(B%):C$=C$+CHR$(B%):PROC DBL(CHR$F%+C$,P%,VP.+2):V.11,11:G.2630 2 830IF(H)<LJ)A.F2=6A$=A$+CHR$(B)):PROCBOX (A$+STRJ.3-LEN(A$)," "),hot,vest):G.2630 2840IFH%=L*V.7:G.2630 2850IF(RI.A$,1)=" ")OR(RJ.A$,1)=".")OR(RI.A$,1)="?")A$=LE .A$,LENA$-1):G.2850 2860PROCOFF 2870E. 2 880REM(*****************************) 28 9pDEFPROCritrievj#data 2900LOC.file#mum ,index% 291pV.26,12 2920PROCtape("Load") 2930V.28,0,24,39,3,12 2950PROCspace(21) 2960ONERR.G.3100 2970V.28,0,24,39,3,|c0
P704 CEEFAX 704 Sat 16 Apr 17:29/18 |B21C1F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 12 2980PROCcentre("Please wait",9) 2990f ile#mum =OP.filename$ 3000PROCcentre("Lo ading data",:) 3010I.£file#mum,animal$(0 R 302pF.index%=1TOVAL(animal$(0)) 3030I. £file#mum,animal$(index%) 3040N.index) 3 050CLO.£0 3060PROCcentri("Data recovered ",9) 307pPROCspace(21) 3080file=TRUE 309 0E. 3100IFERR<>17PROCcentre(" Read et rot. ",9):PROCspace(21):G.180EL.180 3 110DEFPROCsave 3120LOC.file#mum,index% 3 130V.26,12 3140PROCtape("Save") 3150V.21 316pfile#mum =OPING.filename$ 3170V.6,1 2 318pPROCcentriX"Saving data",9) 3190ON ERR.G.3100 3200P.£file#mum,animal$(0) 32 10F.index%=1TOVAL(animal$(0)) 3220P.£fil e#mum,animal$(index%) 3230N.index% 3240C LO.£0 3250PROCcentre(" Finished ",9) 3 26pPROCspace(21) 3270E. 3280REM(******** *********************) 3290DEFPROCtapj(p rocess$) 3300PROCcentre(CHR$C%+process$, 1) 3310PROCcentte("Please type in the|c0
P704 CEEFAX 704 Sat 16 Apr 17:29/45 |B21D1F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 name",10) 3320PROCDBL("of the file. ",8 ,12):PROCGPI(4,10) 3330filuname$=A$ 3340 IFprocess$="Save"TH.V.28,0,24,39,3,12:PR OCDBL(" Prius"+CHR$F%+"RETURN"+CHR $E%+"to record"+CHR$13+" ",2,10) 3345REP .U.GET=13 3350E. 3360DEFPROCdelete 3370L OC.number% 3380number%=VAL(animal$(0))-2 3390IFnumbjr%+2<5E. 3400V.26,12:PROCcen tri(CHR$C%+"Delete ",1):V.28,0,24,39,3,1 2:PROCcintre("Are you szre you want to d elite the",7):PROCcentri(RI.animal$(numb er)+1),LEN(animal$(numbjt%+1))-2)+"?",9) :PROCqujstion(17) 3410IFLE.A$,1)="N"E. 3 420V.28,0,24,39,3,12:PROCcentre(CHR$C*+" Please wait ",9) 3430animal$(0)=STU$(mum bjrI) 3440IJ=1:REP.IFLJ.animal$(I%),2)=" OQ"PROCtest(I*) 3450I*=I%+1:U.fnd 3460PR OCspaciX21) 3470V.28,0,24,39,3,12:PROCce ntri(RJ.animald(number%+1),LEN(animal$(n umbjt%+1))-2),7):PROCcentre(CHR$F%+"has been deleted",9):PROCspace(21) 3480an|c0
P704 CEEFAX 704 Sat 16 Apr 17:20/53 |B21E1F|a36ANIMAL10825:03/83|i24BBBC316k |p|s÷#1÷e|s÷Z0 imal$(number))="":animal$(number%+1)="" 3490E. 3500DEFPROCquestprint(Z$,L%) 3510 inc=2 3520IFLJN(Z$)<34PROCcintre(Z$,L*): E.:EL.IF(M.Z$,34,1)<>" "A.M.Z$,35,1)<>" ")PROCcintte(LE.Z$,34)+"-",L%)EL.PROCcen rte(LE.Z$,34),L%) 3530PROCDBL(RI.Z$,LEN( Z$)-34),2,L%+2):inc=4 3540E. 3550DEFPROC which#article(which$) 3560LOC.a$ 3570a$= LE.which$,1) 3580IFa$="a"ORa$="i"ORa$="i "ORa$="o"TH.article$=" an "EL.article$=" a " 3590E. 360pREM(******************** *********) 3610DEFPROCBOX(X$,X*,Y%) 362 0a$=CHR$150+CHR$104+STRJ.5,CHR$44)+CHR$5 2+CHR$135:b$=CHR$150+CHR$106+CHR$135+X$+ CHR$150+CHR$53+CHR$135:c$=CHR$150+CHR$42 +STRJ.5,CHR$44)+CHR$37+CHR$135 3630P.TAB XX*,Y%)a$ s640PROCDBLTb$,X*,Y%+1):P.TaB( X*,Y%+3)c$ 3650E. 3660IFERR<>17TH.MO.7:R EPO.:P." at line ";ESL:END:EL.180 3670RE M(*****************************) 3680DEF PROCcolours 3690C%=129:REM RED 3691D%|c0
P704 CEEFAX 7p4 Sat 16 Apr 17:40/10 |B21F1F|a36ANIMAL1p825:03/83|j44BBBC316k |p|s÷#1÷e|s÷Z0 =130:REM GREEN 3692E%=135:REM WHITE 3693 F%=131:REM YELLOW 3700E. |c0