Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '======================
- ' 会話ゲーム for PETC4
- '======================
- ' 主語, 名詞, 動詞, 形容詞, 形容動詞
- ENUM #IDSYUGO=0,#IDMESI,#IDDOSI,#IDKEI,#IDKEDO, #IDEND
- CONST #BUFSIZE=256*256
- DIM IDMAX[#IDEND]
- DIM ID[#IDEND]
- DIM BUFF[#BUFSIZE]
- RANDOMIZE 0:RANDOMIZE 1:RANDOMIZE 2
- '---- 画面描画
- ACLS:TLAYER #TCONSOLE,1:SPLAYER #GSPRITE,2:SPLAYER 0
- ' 背景
- CONST #GRW=400,#GRH=240
- J=191-80
- FOR I=0 TO #GRW-1
- C=(FLOOR(I/8) MOD 2)*16+64
- GLINE I,0,I,J,RGB(0,0,C)
- GLINE I,J,I,151,RGB(128-C,128-C,0)
- GLINE I,160,I,#GRH,RGB(0,C,0)
- NEXT
- TX=1
- TY=21
- TW=48
- TH=7
- FOR I=0 TO 7 STEP 2
- GBOX 0+I,158+I,(#GRW-1)-I,(#GRH-1)-I,RGB(255,255,0)
- NEXT
- ' 木
- FOR Z=0 TO 3
- TXCOLOR 4
- RESTORE @WOOD
- PRTDAT 14-Z*4,3,0
- PRTDAT 34+Z*4,3,0
- NEXT
- ' 人
- AAX=23:AAY=7
- ABX=AAX+2:ABY=11
- AAMAX=2:AACOL= 9:DIM ANIA$[AAMAX]=[" "," "]
- ABMAX=3:ABCOL=11:DIM ANIB$[ABMAX]=["","",""]
- TXCOLOR 15
- RESTORE @HITO
- PRTDAT AAX-4,1,1
- TXCOLOR AACOL:LOCATE AAX,AAY:PRINT ANIA$[0]
- TXCOLOR ABCOL:LOCATE ABX,ABY:PRINT ANIB$[1]
- ' ロゴ
- SPSET 0,4095
- SPOFS 0,340,24,-32
- '--- 単語インデックス作成
- CMTMAX=0
- LOGPTR=1
- MAKEIDX
- '--- 開始
- BGMPLAY 0,17,10
- GPUTSTR "かいわゲーム":BEEP 37
- R=HITANY()
- BEEP 3:WAIT 30
- TMREAD OUT HOUR,MIN,SEC
- IF HOUR<10 THEN HANASU "おはようございます"
- IF HOUR>=10 AND HOUR<19 THEN HANASU "こんにちは"
- IF HOUR>=19 THEN HANASU "こんばんわ"
- WAIT 30
- HANASU "で、いつでもしゅうりょうできます。"
- WAIT 60
- '--- メインループ
- LOOP
- IF RND(0,10)==0 THEN
- GOSUB @COMENT
- CONTINUE
- ENDIF
- IF RND(0,10)==0 THEN
- GOSUB @URANAI
- CONTINUE
- ENDIF
- '--- 質問モード
- ON RND(0,4) GOSUB @BUNPO1,@BUNPO2,@BUNPO3,@BUNPO4
- LOOP
- LOOP
- HANASU A$
- ANS=YESNO()
- IF ANS==0 THEN GOSUB @SYURYO:CONTINUE
- BREAK
- ENDLOOP
- IF ANS==1 THEN LOGING OK$:BREAK
- IF ANS==2 THEN LOGING NG$:BREAK
- ENDLOOP
- ENDLOOP
- '--- コメントモード
- @COMENT
- RESTORE @CMTDAT
- NUM=RND(2,CMTMAX-1)
- FOR I=0 TO NUM
- READ A$
- NEXT
- HANASU A$
- IF HITANY() AND 64 THEN GOSUB @SYURYO
- RETURN
- '--- 占いモード
- @URANAI
- R$=MESIGET()
- HANASU "あなたのラッキーアイテムは、"+R$+" です。":WAIT 30
- IF RND(0,10)>5 THEN WAIT 30:HANASU "なんちゃって":WAIT 20
- IF HITANY() AND 64 THEN GOSUB @SYURYO
- RETURN
- '---
- @BUNPO1
- A1$=MESIGET()
- A2$=RDDAT(#IDKEI) '形容詞
- A$=A1$+" は "+A2$+" ですか"
- OK$=A2$+" "+A1$
- NG$=LEFT$(A2$,LEN(A2$)-1)+"くない "+A1$
- RETURN
- '---
- @BUNPO2
- A1$=MESIGET()
- A2$=RDDAT(#IDDOSI) '動詞
- A$=A1$+" を "+A2$+"こと は ありますか"
- OK$=A2$+" "+A1$
- NG$=A2$+"ことがない "+A1$
- RETURN
- '---
- @BUNPO3
- A1$=MESIGET()
- A2$=RDDAT(#IDKEDO) '形容動詞
- A$=A1$+" は "+A2$+" ですか"
- OK$=A2$+" な "+A1$
- NG$=A2$+"でない"+A1$
- RETURN
- '---
- @BUNPO4
- A1$=MESIGET()
- A$=A1$+" は すきですか"
- OK$="あなた の すきな "+A1$
- NG$="あなた の きらいな "+A1$
- RETURN
- '--- 終了
- @SYURYO
- HANASU "しゅうりょうしますか"
- IF YESNO()==1 THEN
- BGMSTOP 0,3
- HANASU "おつきあいいただき、まことにありがとうございました。"
- WAIT 20
- HANASU "さようなら"
- WAIT 60
- ACLS:END
- ENDIF
- HANASU "つづけます"
- RETURN
- '--- ログに記録
- DEF LOGING P$
- VAR I,C
- FOR I=0 TO LEN(P$)
- C=0
- IF I<LEN(P$) THEN C=ASC(MID$(P$,I,1))
- BUFF[LOGPTR]=C
- LOGPTR=(LOGPTR+1) MOD #BUFSIZE
- NEXT
- END
- '--- ログから取り出し
- DEF LOGGET()
- VAR R$,I,C,LOGPTR2
- R$="":I=0
- LOOP
- LOOP
- LOGPTR2=RND(0,#BUFSIZE)
- C=BUFF[LOGPTR2]
- LOGPTR2=(LOGPTR2+1) MOD #BUFSIZE
- IF C==0 THEN BREAK
- ENDLOOP
- LOOP
- C=BUFF[LOGPTR2]
- LOGPTR2=(LOGPTR2+1) MOD #BUFSIZE
- IF C==0 THEN BREAK
- R$=R$+CHR$(C)
- ENDLOOP
- IF R$!="" THEN BREAK
- I=I+1
- IF I>=1200 THEN BREAK
- ENDLOOP
- RETURN R$
- END
- '--- インデックス作成
- DEF MAKEIDX
- VAR IDX,J,R$
- RESTORE @KOTOBA
- IDX=0
- FOR J=#IDSYUGO TO #IDEND-1
- ID[J]=IDX
- FOR I=0 TO 999
- READ R$
- IDX=IDX+1
- IF R$=="" THEN BREAK
- NEXT
- IDMAX[J]=I
- NEXT
- RESTORE @CMTDAT
- FOR CMTMAX=0 TO 999
- READ R$
- IF R$=="" THEN BREAK
- NEXT
- END
- '--- ランダム読み込み
- DEF RDDAT(IDN)
- VAR R$,I,NUM
- R$=""
- NUM=ID[IDN]+RND(0,IDMAX[IDN])
- RESTORE @KOTOBA
- FOR I=0 TO NUM
- READ R$
- NEXT
- RETURN R$
- END
- '--- 名詞取り出し
- DEF MESIGET()
- VAR R$
- IF RND(0,7)!=0 THEN
- R$=LOGGET()
- IF LEN(R$)<=22 AND R$!="" THEN RETURN R$
- ENDIF
- RETURN RDDAT(#IDMESI)
- END
- '--- 話す
- DEF HANASU TK$
- VAR T$,P,I
- T$=TK$
- LOOP
- P=INSTR(T$," は ")
- IF P==-1 THEN BREAK
- T$=SUBST$(T$,P,3," わ ")
- ENDLOOP
- LOOP
- I=INSTR(T$," ")
- IF I==-1 THEN BREAK
- T$=LEFT$(T$,I)+MID$(T$,I+1,999)
- ENDLOOP
- LOOP
- I=INSTR(T$,"")
- IF I==-1 THEN BREAK
- T$=LEFT$(T$,I)+"エックスボタン"+MID$(T$,I+1,999)
- ENDLOOP
- GPUTSTR TK$
- TALK "@I"+T$
- ANIME TK$
- WHILE TALKCHK():WAIT:WEND:WAIT 10
- END
- '--- 顔アニメ
- DEF ANIME T$
- VAR I
- FOR I=1 TO LEN(T$)
- TXCOLOR AACOL:LOCATE AAX,AAY:PRINT ANIA$[RND(1,AAMAX)]
- TXCOLOR ABCOL:LOCATE ABX,ABY:PRINT ANIB$[RND(1,ABMAX)]
- WAIT 6
- NEXT
- TXCOLOR ABCOL:LOCATE ABX,ABY:PRINT ANIB$[2]
- END
- DEF ANIME2
- IF RND(1,30) THEN RETURN
- TXCOLOR AACOL:LOCATE AAX,AAY:PRINT ANIA$[RND(1,AAMAX)]
- END
- '--- ボタン入力
- DEF BTRIG(m)
- VAR I,R
- I=BUTTON(0,-1,m)
- IF I AND (1<<#B_LUP ) THEN R=R OR 1
- IF I AND (1<<#B_LDOWN ) THEN R=R OR 2
- IF I AND (1<<#B_LLEFT ) THEN R=R OR 4
- IF I AND (1<<#B_LRIGHT) THEN R=R OR 8
- IF I AND (1<<#B_RRIGHT) THEN R=R OR 16 'A
- IF I AND (1<<#B_RDOWN ) THEN R=R OR 32 'B
- IF I AND (1<<#B_RUP ) THEN R=R OR 64 'X
- RETURN R
- END
- '--- ボタン離す
- DEF KEYOFF
- WHILE BTRIG(0)!=0:WAIT:WEND
- END
- '--- ボタン入力待ち
- DEF HITANY()
- VAR BT
- KEYOFF
- TXCOLOR 11
- PRTB "PUSH ANY BUTTON"
- LOOP
- VSYNC 2
- ANIME2
- BT=BTRIG(0)
- IF BT AND (16+32+64) THEN BREAK
- ENDLOOP
- BEEP 9
- PRTB " "*23
- RETURN BT
- END
- '--- YES/NO入力
- DEF YESNO()
- VAR BT,R
- KEYOFF
- TXCOLOR 7
- PRTB "=YES / =NO"
- R=0
- LOOP
- VSYNC 2
- BT=BTRIG(0)
- IF BT AND 32 THEN R=2:BREAK
- IF BT AND 16 THEN R=1:BREAK
- IF BT AND 64 THEN BREAK
- ANIME2
- ENDLOOP
- PRTB " "*48
- IF R!=0 THEN
- IF R==1 THEN BEEP 7:TXCOLOR 11:PRTB "YES"
- IF R==2 THEN BEEP 13:TXCOLOR 13:PRTB "NO"
- WAIT 30
- PRTB " "*48
- ENDIF
- RETURN R
- END
- '--- テキストカラー
- DEF TXCOLOR N
- VAR R,G,B,I
- I=128+((N AND 1)*127)
- R=0:IF (N AND 2) THEN R=I
- G=0:IF (N AND 4) THEN G=I
- B=0:IF (N AND 8) THEN B=I
- CASE N
- WHEN 0: COLOR RGB(255,255,255)
- WHEN 1: COLOR RGB(0,0,0)
- OTHERWISE: COLOR RGB(R,G,B)
- ENDCASE
- END
- '--- 文字表示
- DEF PRTB T$
- LOCATE 25-LEN(T$)/2,28
- PRINT T$;
- END
- '--- 拡大文字表示
- DEF GPUTSTR T$
- VAR X,Y,PTR,CH$
- X=TX
- Y=TY+TH-1
- FOR PTR=0 TO LEN(T$)-1
- CH$=MID$(T$,PTR,1)
- LOCATE X,Y
- PRINT CH$
- 'GPUTCHR X+1,Y+1,"BGF0",NUM,14,SZ
- 'GPUTCHR X ,Y ,"BGF0",NUM, 0,SZ
- 'X=X+SZW
- 'IF X>255 THEN KAIGYO
- X=X+1
- IF X>=(TX+TW-1) THEN KAIGYO:X=TX
- NEXT
- KAIGYO:KAIGYO
- END
- '--- 改行
- DEF KAIGYO
- VAR IX,IY,T$
- TXCOLOR 15
- FOR IY=0 TO TH-1
- FOR IX=0 TO TW-1
- LOCATE TX+IX,TY+IY
- T$=CHR$(CHKCHR(TX+IX,TY+IY+1))
- IF IY==(TH-1) THEN T$=" "
- PRINT T$
- NEXT
- NEXT
- VSYNC 8
- END
- '--- 背景テキストデータ表示
- DEF PRTDAT LX,LY,MODE
- VAR I,J,T$,U$
- FOR I=0 TO 999
- READ T$
- IF T$=="" THEN BREAK
- FOR J=0 TO LEN(T$)-1
- U$=MID$(T$,J,1)
- LOCATE LX+J,LY+I
- IF U$!=" " OR MODE THEN PRINT U$;
- NEXT
- NEXT
- END
- '--- 表示データ
- @WOOD
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA ""
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA ""
- @HITO
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA " "
- DATA ""
- '--- 会話データ
- @CMTDAT
- DATA "このプログラムは、わたしがランダムにしゃべっています。"
- DATA "かいわのけっかは、ないぶにきろくしています。"
- DATA "プログラムをとめると、かいわのきろくは、きえてしまいます。"
- DATA "このプログラムは、いつでもしゅうりょうできます。"
- DATA "こまったことに、このプログラムは、おわりがありません。"
- DATA "このプログラムは、トークめいれいをつかってしゃべっています。"
- DATA "わたしは、あたらしいたんごをおぼえることは、できません。"
- DATA "たまにへんなことをしゃべりますが、おおめにみてください。"
- DATA "かなばかりで、よみにくくてすみません。"
- DATA "このプログラムは、ジョークソフトです。"
- DATA ""
- @KOTOBA
- '--- 主語
- DATA "わたし"
- DATA "あなた"
- DATA ""
- '--- 名詞
- DATA "ゲーム","プチコン","おんがく","どうろ"
- DATA "まち","えき","いす","つくえ","ドア"
- DATA "マンガ","えいが","しょうせつ"
- DATA "ちきゅう","うみ","そうげん","さばく"
- DATA "インターネット","ケーブル","トランジスタ"
- DATA "じんこうちのう","たっきゅう","サッカー","やきゅう"
- DATA "クルマ","バイク","じてんしゃ"
- DATA "おちゃ","コーヒー","ジュース"
- DATA "じどうしゃ","トラック","バーコード","しゃしん"
- DATA "けいたいでんわ","スプーン","ねったいぎょ"
- DATA "とし","うた","ワリバシ","てがみ"
- DATA "ガラス","でんしゃ","メガネ","ほん"
- DATA "でんかせいひん","テレビ","エアコン","そうじき"
- DATA "せんたくき","パソコン","プリンタ","けいこうとう"
- DATA "でんき","ほんだな","ライト","カメラ"
- DATA "コンビニ","いえ","ビル","おたま","おかね"
- DATA "でんき","にく","ぬか","ねんど","イヌ","ネコ"
- DATA "ぜいきん","なっとう","にんじん","ねんがじょう"
- DATA "ぶんぼうぐ","ヤンバルクイナ","タンチョウヅル"
- DATA "エンピツ","ボールペン","はさみ","けしゴム"
- DATA "かみ","ナイフ","ノート","ソーメン","ケーキ"
- DATA "たべもの","ごはん","タコヤキ","タイヤキ","パン"
- DATA "おかし","チョコレート","ラーメン","すきやき"
- DATA "やさい","モヤシ","ピーマン","せんめんき"
- DATA "ダイコン","ニンジン","ちくわ","こんぶ"
- DATA "ミカン","スイカ","リンゴ","カキ"
- DATA "エレベータ","エスカレータ","かいだん"
- DATA "ガラス","コンクリート","きん","てつ"
- DATA "ギョウザ","クジラ","しめサバ","おにぎり"
- DATA "うちゅう","はくさい","マネキン","マンドリル"
- DATA "コーヒー","みず","コップ","ロウソク"
- DATA "さとう","しお","コショウ","しょうゆ"
- DATA "ゾウ","キリン","オオカミ","イルカ","さる"
- DATA "えいが","メモようし","シシャモ","サンマ"
- DATA ""
- '--- 動詞
- DATA "あそぶ","そそぐ"
- DATA "たたく","のばす"
- DATA "おぼえる","たずねる"
- DATA "わる","きる"
- DATA "とる","ねむる"
- DATA "つかう","むすぶ"
- DATA "かう","うる"
- DATA "うちこむ","とりかえる"
- DATA "うつ","あてる"
- DATA "うごかす"
- DATA "つなぐ","きそう"
- DATA "でる","まもる"
- DATA "とめる","あるく"
- DATA "はしる","おくる"
- DATA "はる","めざす"
- DATA "ひろう","おとす"
- DATA "みる","きく","はなす"
- DATA "なおす","しめす"
- DATA "つけたす","とりはずす"
- DATA ""
- '--- 形容詞
- DATA "かたい","やわらかい"
- DATA "たかい","ひくい"
- DATA "あつい","さむい"
- DATA "あたたかい","つめたい"
- DATA "おもい","かるい"
- DATA "とおい","ちかい"
- DATA "しかくい","ここちよい"
- DATA "まるい","もろい"
- DATA "きたない","はかない"
- DATA "おもしろい","きょうみぶかい"
- DATA "つまらない","たのしい"
- DATA "あかるい","くらい"
- DATA "はやい","おそい"
- DATA "こまかい","めずらしい"
- DATA "あたらしい","ふるい"
- DATA "ありがたい","うるさい"
- DATA "たのもしい"
- DATA ""
- '--- 形容動詞
- DATA "きれい","しんせつ","はなやか"
- DATA "すき","きらい","びんぼう"
- DATA "いっしょ","おだやか","ふしぎ"
- DATA "けんこう","かんたん","しぜん"
- DATA "しずか","げんき","ふしぜん"
- DATA "せいかく","さいこう"
- DATA "カラフル","とうめい"
- DATA ""
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement