2R||l||lLdNr`~p@p~ BD||R<||100 REM ROBOT 'FINITE STATE AUTOMATA' WRITTEN BY EMILIE BAKER, PROJECT SOLO 103 REM REWRITTEN FOR PROJECT DELTA BASIC-PLUS MARK LINTON 01/73 105 RANDOMIZE!!!!!!!!!!!!!! 110 PRINT "ROB THE ROBOT PROGRAM" 120 OPEN "$ROBOT.DAT" FOR INPUT AS FILE 1% 130 INPUT "INSTRUCTIONS";I$:IF I$<"X" THEN P9%=-1% 140 DIM #1%,L%(4%),L$(1%),I$(10%)=64%,M$(20%),T$(20%),R$(20%), Q$(400%),E$(10%) 150 PRINT I$(I%) FOR I%=1% TO L%(1%) IF P9%=0% 160 M%=L%(2%):R%=L%(3%):T%=L%(4%) 200 DEF FNT%(T$):FOR X%=1% TO T%:IF FNL$(T$)=FNL$(T$(X%)) THEN FNT%=X%:GO TO 205 202 NEXT X%:FNT%=0% 205 FN END! FNT%=# OF TREATMENT 'T$' 210 DEF FNM%(M$):FOR X%=1% TO M%:IF FNL$(M$)=FNL$(M$(X%)) THEN FNM%=X%:GO TO 215 212 NEXT X%:FNM%=0% 215 FN END! FNM%=# OF MOOD 'M$' 220 PRINT:PRINT 240 PRINT "LET'S START...";:L$(1%)=FNL$(L$(1%)) 250 PRINT "THE LAST USER LEFT ROB IN A(N) ";L$(1%);" MOOD." 254 C9%=INT(5*RND+1)+1:INPUT "OPTION";O% 255 IF C%=C9% THEN PRINT "GOOD-BYE":GO TO 999 260 INPUT "TYPE IN A TREATMENT...";T$:IF FNT%(T$)=0% THEN PRINT T$;" IS NOT A TREATMENT":GO TO 260 265 T1%=FNT%(T$):M0%=FNM%(L$(1%)):A$=Q$(T%*(M0%-1%)+T1%):A%=INSTR(1%,A$,"/") 270 ON O% GO TO 290,330,390 290 PRINT "IF SOMEONE ";FNL$(T$);" ROB WHILE HE IS" 295 E8$=R$(VAL(LEFT(A$,A%-1%))):E9$=M$(VAL(FNL$(RIGHT(A$,A%+1%)))) 300 PRINT L$(1%);" HE ";E8$;" AND BECOMES ";E9$ 310 PRINT:L$(1%)=M$(VAL(FNL$(RIGHT(A$,A%+1%)))):C%=C%+1%:GO TO 255 330 INPUT "EXPECTED REACTION";E0$:IF FNR%(E0$)=0% THEN PRINT E0$;" IS NOT A LEGAL REACTION":GO TO 330 331 INPUT "EXPECTED NEW MOOD";E1$:IF FNM%(E1$)=0% THEN PRINT E1$;" IS NOT A LEGAL MOOD":GO TO 331 335 E$(E%+1%)=FNN$(FNM%(L$(1%)))+FNN$(T1%)+FNN$(FNR%(E0$))+ FNN$(FNM%(E1$)) IF R0%=-1% 340 E2$=R$(VAL(LEFT(A$,A%-1%))):E3$=M$(VAL(FNL$(RIGHT(A$,A%+1%)))) 350 IF E0$=E2$ AND E1$=E3$ THEN PRINT "AGREE. "; ELSE PRINT "DISAGREE. "; 360 PRINT "ROB'S 'PROGRAMMED' PERSONALITY INDICATES THAT" 370 PRINT "OUR ";L$(1%);" ROBOT ";E2$;" AND BECOMES" 380 PRINT E3$;" WHEN SOMEONE ";FNL$(T$);" HIM.":GO TO 310 390 IF C%>0% THEN 330 400 DEF FNL$(L$):I%=INSTR(1%,L$,CHR$(13%)):IF I%>0% THEN FNL$=LEFT(L$,I%-1%) ELSE FNL$=L$ 410 FN END 500 E%=VAL(E$(1%)):IF E%<4% THEN E$(1%)=NUM$(E%+1%):R0%=-1%:GO TO 330 510 PRINT "PLEASE WAIT.":E$(1%)="1" 520 FOR P1%=2% TO 4%:A0%(P1%-1%,P%)=VAL(MID(E$(P1%),P%,1%)) FOR P%=1% TO 4%:NEXT P1% 530 FOR P%=1% TO 4%:IF A0%(1%,P%)=A0%(2%,P%) OR A0%(1%,P%)= A0%(3%,P%) OR A0%(2%,P%)=A0%(3%,P%) THEN 550 540 NEXT P%:GO TO 220 550 IF A0%(1%,P%)=A0%(2%,P%) OR A0%(1%,P%)=A0%(3%,P%) THEN N%=1% ELSE N%=2% 580 N3%=N%:N%=A0%(N%,P%):N1%=A0%(N3%,3%):N2%=A0%(N3%,4%):K%=T%*(A0%(N%,1%)-1%)+ A0%(N%,2%):Q$(K%)=FNN$(N1%)+"/"+FNN$(N2%):GO TO 540 900 DEF FNN$(N%)=MID(NUM$(N%),2%,LEN(NUM$(N%))-2%) 910 DEF FNR%(R$):FOR X%=1% TO R%:IF R$(X%)=R$ THEN FNR%=X% :GO TO 920 915 NEXT X%:FNR%=0% 920 FN END 999 CLOSE 1%,2%,3%:END KEY