言語:F-BASIC,半角カナが使われています
全角の書きこみはこちらで加えた注釈です
100 '
110 '
120 '
130 '
140 '
150 '
160 '
170 CLEAR 3000:ON ERROR GOTO 710:RANDOMIZE TIME/4
180 DIM A$(5),B$(9),C$(9):DEFINT A-Z:NON$=CHR$(254)
190 OPEN "R",#2,"ta.REC":FIELD #2,250 AS KW$
200 OPEN "R",#1,"ta.DAT":FIELD #1,51 AS A$(0),51 AS A$(1),51 AS A$(2),51 AS A$(3),51 AS A$(4)
210 '
220 COLOR 4:WIDTH 40,25
230 FOR I=1 TO 4:READ A:PRINT@(160+I*32,39),A:BEEP:FOR J=1 TO 500:NEXT J,I
240 FOR I=1 TO 2:READ A:PRINT@(320+I*32,39),A:BEEP:FOR J=1 TO 500:NEXT J,I:FOR K=0 TO 800:NEXT K
250 '
260 '
270 'COLOR 2:FOR I=1 TO 2:READ A:PRINT@(224+I*32,56),A:BEEP
280 '
290 COLOR 6:LOCATE0,10:PRINT "リュティ : コンニチワ":PRINT
300 ' メインループ
310 GOSUB 640 :'ユーザ入力受付
320 L=LEN(A$):NE=0:IF RIGHT$(A$,1)="?" THEN A$=LEFT$(A$,L-1):NE=1
330 GOSUB 350:GOTO 310:'人工無能の返事生成
340 '
350 GOSUB 530:MS$=A$:L=LEN(MS$)
360 II=1:A$=A$+" ":A$=LEFT$(A$,9)+"?"
370 GET #2,II
380 ASK=INSTR(KW$,MS$):IF ASK THEN 420
390 ASK=INSTR(KW$,A$):IF ASK THEN 420
400 ASK=INSTR(KW$,NON$):IF ASK THEN 460
410 II=II+1:GOTO 370
420 GOSUB 690:GET #1,ANS1
430 IF RND<.4 AND NE=0 THEN NE=1:A$=A$(ANS2):GOTO 350
440 PRINT "リュティ : "+A$(ANS2):RETURN
450 '
460 WAS$=A$:X=INSTR(A$," "):IF X THEN A$=LEFT$(A$,X-1)
470 PRINT "リュティ : ";:IF NE=1 THEN NE=0:PRINT "トツゼンデスガ ";
480 COLOR 2:PRINT A$;:COLOR6:PRINT "ッテ ナンデスカ ?":PRINT:GOSUB 640
490 M$=LEFT$(KW$,ASK-1)+LEFT$(WAS$,254-ASK)+NON$:M$=LEFT$(M$,250)
500 LSET KW$=M$:PUT #2,II:GOSUB 690
510 GET #1,ANS1:LSET A$(ANS2)=A$:PUT #1,ANS1:GOTO 350
520 ' 入力文字列から助詞以外のトークンを無作為に選んで一つ返す
530 Y=9:Z=0:L=LEN(A$):FOR I=0 TO 8:B$(I)="":NEXT I :' A$から8個までのトークン(スペース区切り)を切り出す
540 FOR I=0 TO 8
550 X=INSTR(A$," "):IF X=0 THEN B$(I)=A$:Y=Y-1:GOTO 570
560 B$(I)=LEFT$(A$,X-1):A$=MID$(A$,X+1,L-X)
570 NEXT I
580 FOR I=0 TO 8 :'助詞の排除
590 X=INSTR("ニハノハガモヲダヨサデ",B$(I)):IF X THEN 600 ELSE C$(Z)=B$(I):Z=Z+1
600 NEXT I
610 IF Z THEN A$=C$(INT(RND*Z)) ELSE A$=B$(INT(RND*Y)):'無作為に選ぶ
620 RETURN
630 ' ユーザ入力受け付け
640 COLOR5:LINE INPUT "アナタ : ";A$
650 IF LEN(A$)>51 THEN COLOR 6:PRINT:PRINT "リュティ : ハナシ ガ ナガスギタノデ モウイチド オネガイシマス":PRINT:GOTO 640
660 IF A$="" THEN 640 ELSE IF A$="fin" THEN END
670 COLOR 6:RETURN
680 '
690 ASK=INT(ASK/10)+(II-1)*25:ANS1=INT(ASK/5+1):ANS2=ASK MOD 5:RETURN
700 ' エラー割り込みハンドラ
710 IF ERR<>54 THEN CLOSE:BEEP:COLOR 2:PRINT ERL;"ニ ERROR=";ERR;"ハッセイ":END
720 PRINT "リュティ : ワダイ ヲ カエテ ":PRINT:RESUME 310
730 '
740 DATA &H3F4D,&H3929,&H434E,&H473D,&H4240,&H4F3A,&H4354,&H4A72