SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

リーチゲームVer.2

プレイ動画

概要

CPUと対戦するビンゴゲームです。
起動するとデモ画面が表示され、ゲームのルールが説明されます。下画面にタッチすると、ゲームを開始できます。
上画面にCPUのマス目、下画面に自分のマス目が表示されます。(CPUのマス目は、ゲーム対戦中は隠されていて見えません)
自分のマス目の数字を、1手ずつタッチして「×」にして消していきます。
逆にCPUが選んだ数字は、自分のマス目では「○」になります。
「○」が縦・横・斜めのどこか1列で5個揃えば勝ちです。
どこの列を捨てて「×」で消していくかの戦略が難しく、後述のリーチ宣言ルールによる一発大逆転もあり、頭を使いますが楽しいゲームです。
CPUは結構強いです。どうしても勝てない人は、15行目の「DM=FALSE」を「DM=TRUE」に変えてデバッグモードにして、CPUの打ち方を見ながら研究してください。
リストがかなり長くて打つのが大変なので、デモ画面が必要ない人は92〜195行を削ってください。

ゲームのルール

  • 5×5のマス目に1〜25の数字をランダムに並べてスタート。
  • 自分が言った数字は「×」となり消える。
  • 相手が言った数字は「○」となる。
  • 「○」が縦・横・斜めのどこか1列で5個揃えば勝ち。
  • 相手が言った数字で「○」が4個並んだ時は「リーチ」と宣言し、相手にもう一度数字を言わせることができる。

おまけ

私が通った中学校で当時流行していた紙と鉛筆のゲームを、BASICで再現しました。
今、ネットで「リーチゲーム」などと検索しても、このゲームの情報が出てきません。
私の中学だけのローカルブームだったのでしょうか?
過去に遊んだ経験がある人がいたら、ぜひコメントをください。

プチコンmkII用QRコード

1 2
3 4
5 6

プログラムリスト

'**************
'*            *
'* REACH GAME *
'*    Ver2    *
'* 2011.11.27 *
'*  by shiro  *
'*            *
'**************

'*** ショキセッテイ ***

CLEAR

'デバッグモード
DM=FALSE

VISIBLE 1,1,0,0,0,1
PNLTYPE "OFF"
CLS
GPAGE 0:GCLS 0
GPAGE 1:GCLS 1
BGMSTOP

'マスメ カンレン
DIM YOUN(5,5),CPUN(5,5)
DIM THKN(5,5),THKI(5,5)
DIM LINEN(5,5)

'ナラベラレル レツホウコウ
'bit0:─ bit1:│
'bit2:\ bit3:/
FOR Y=0 TO 4
FOR X=0 TO 4
READ LINEN(X,Y)
NEXT X
NEXT Y
DATA  7, 3, 3, 3,11
DATA  3, 7, 3,11, 3
DATA  3, 3,15, 3, 3
DATA  3,11, 3, 7, 3
DATA 11, 3, 3, 3, 7

'マーク X,○
MARKER=0
MARKSEL=-1

'ゲーム シンコウ カンリ
GMDEMO=0
GMPLAY=1
GMYOUWIN=2
GMCPUWIN=3
GMDRAW=4

REACHNO=0
REACHYOU=1
REACHCPU=2

TURNCPU=0
TURNYOU=NOT TURNCPU
TURN0=TURNCPU
WINYOU=0:WINCPU=0

'ヒョウジ ザヒョウ
YOUX=4:YOUY=3
CPUX=4:CPUY=5
SELWX=38:SELWY=21
MESX=1:MESY=19

'メッセージ
DIM MES$(4)
MESDLG=FALSE

'カラー
COLTITLE=15:COLTITBG=2
COLDEMO=15

COLTBLTI=0
COLTBLLN=6:COLTBLBG=15
COLTBLN=11:COLTBLER=9
COLTBLSL=13:COLTBLSC=11

COLMES=0:COLMESFL=0
COLMESBG=&HEE

'サウンド
BPYOUSEL=3:BPCPUSEL=2
BPREACH=5

BGMGAME=8
BGMWIN=4:BGMLOSE=6:BGMDRAW=6

'*** ルール セツメイ デモ ***
@DEMO

GM=GMDEMO
MESTIME=400
MESWAIT=0

GOSUB @PRTTITLE
GOSUB @PRTDEMO

GOSUB @YOUINI
GOSUB @YOUTABLE
GOSUB @PRTYOUN
GOSUB @CPUINI
GOSUB @CPUTABLE
GOSUB @PRTCPUN

MESTCH=TRUE
MESTIT$="ルール セツメイ"

MS$="CPUト タイセンスル ビンゴゲーム デス。"
GOSUB @MESSAGE
IF MESRET==TRUE GOTO @DEMOEND

MS$="5x5ノ マスメニ、1-25ノ スウジヲ ナラベテ スタート。"
GOSUB @MESSAGE
IF MESRET==TRUE GOTO @DEMOEND

TURN=TURNYOU
GOSUB @YOUTURN
MS$="ジブンガ イッタ スウジハ、「X」ニナリ キエル。"
GOSUB @MESSAGE
IF MESRET==TRUE GOTO @DEMOEND

TURN=TURNCPU
GOSUB @CPUTURN
MS$="アイテガ イッタ スウジハ、「○」ニナル。"
GOSUB @MESSAGE
IF MESRET==TRUE GOTO @DEMOEND

MESTCH=FALSE
MS$=""
GOSUB @MESSAGE

GR=REACHNO
@DEMO1LP
TURN=NOT TURN
IF TURN==TURNYOU THEN GOSUB @YOUTURN:GOSUB @CHKCPU
IF GR==REACHCPU GOTO @DEMO1LPE
IF TURN==TURNCPU THEN GOSUB @CPUTURN:GOSUB @CHKYOU
IF GR==REACHYOU GOTO @DEMO1LPE
GOTO @DEMO1LP
@DEMO1LPE

MESTCH=TRUE
MS$="アイテガ イッタ スウジデ、「○」ガ4コ ソロッタラ、「リーチ」ト センゲン。アイテニ モウイチド スウジヲ イワセラレル。"
GOSUB @MESSAGE
IF MESRET==TRUE GOTO @DEMOEND

MESTCH=FALSE
MS$=""
GOSUB @MESSAGE

TURN=NOT TURN

GR=REACHNO
@DEMO2LP
TURN=NOT TURN
@DEMO2LP1
IF TURN==TURNYOU THEN GOSUB @YOUTURN:GOSUB @CHKCPU
IF GM==GMCPUWIN GOTO @DEMO2LPE
IF GR==REACHCPU GOTO @DEMO2LP1
@DEMO2LP2
IF TURN==TURNCPU THEN GOSUB @CPUTURN:GOSUB @CHKYOU
IF GM==GMYOUWIN GOTO @DEMO2LPE
IF GR==REACHYOU GOTO @DEMO1LP2
GOTO @DEMO2LP
@DEMO2LPE

GM=GMDEMO
MESTCH=TRUE
MS$="「○」ガ、タテ・ヨコ・ナナメノ ドコカノレツデ 5コ ソロエバ カチ!"
GOSUB @MESSAGE
IF MESRET==TRUE GOTO @DEMOEND

GM=GMPLAY
GOSUB @YOUINI
GOSUB @PRTYOUN
GOSUB @CPUINI
GOSUB @PRTCPUN
MS$="ジッサイノ ゲームデハ、CPUノ マスメハ カクサレマス。"
GOSUB @MESSAGE
GM=GMDEMO

GOTO @DEMO

@DEMOEND
GOSUB @ERDEMO
MESTCH=FALSE
MESDLG=TRUE
MESTIT$=""
MS$="ゲームヲ ヤル?"
GOSUB @MESSAGE
IF MESRET==FALSE GOTO @ENDINIT

'*** ゲーム リスタート ***
@RESTART

MESDLG=FALSE
MESTCH=FALSE
CLS
GPAGE 0:GCLS 0
GPAGE 1:GCLS 0
GOSUB @PRTTITLE
GOSUB @CPUTABLE
GOSUB @YOUTABLE

'*** ゲーム カイシ ***

BGMPLAY BGMGAME
GM=GMPLAY
GOSUB @CPUINI
GOSUB @PRTCPUN
GOSUB @YOUINI
GOSUB @PRTYOUN

MESWAIT=100
MS$="○○○ ゲーム カイシ! ○○○"
GOSUB @MESSAGE

TURN=TURN0
MS$="CPUガ センテ。"
IF TURN==TURNYOU THEN MS$="アナタガ センテ。"
GOSUB @MESSAGE

'*** メイン ループ ***

IF TURN==TURNYOU GOTO @MAINYOU

@MAINLOOP

'CPUノ バン
@MAINCPU
TURN=TURNCPU
GR=REACHNO
GOSUB @CPUTURN

MESWAIT=100
MS$="CPUハ "+STR$(SELN)+"ヲ ケシマシタ。"
BEEP BPCPUSEL
GOSUB @MESSAGE

GOSUB @CHKYOU
IF GM>GMPLAY GOTO @GAMEEND
IF GR!=REACHYOU GOTO @MAINYOU
MS$="○○ アナタガ リーチ! ○○"
BEEP BPREACH
GOSUB @MESSAGE
GOTO @MAINCPU

'PLAYERノ バン
@MAINYOU
TURN=TURNYOU
GR=REACHNO
GOSUB @YOUTURN

MESWAIT=100
MS$="アナタハ "+STR$(SELN)+"ヲ ケシマシタ。"
BEEP BPYOUSEL
GOSUB @MESSAGE

GOSUB @CHKCPU
IF GM>GMPLAY GOTO @GAMEEND
IF GR!=REACHCPU GOTO @MAINLOOP
MS$="○○ CPUガ リーチ! ○○"
BEEP BPREACH
GOSUB @MESSAGE
GOTO @MAINCPU

'*** ゲーム シュウリョウ ***
@GAMEEND

'ケッカ ヒョウジ
BGMSTOP
GOSUB @PRTCPUN
IF GM==GMYOUWIN THEN GOSUB @ENDWIN
IF GM==GMCPUWIN THEN GOSUB @ENDLOSE
IF GM==GMDRAW THEN GOSUB @ENDDRAW

'リプレイ?
MESDLG=TRUE
MS$="モウ1カイ ヤル?"
GOSUB @MESSAGE
IF MESRET==TRUE GOTO @RESTART

'シュウリョウ ショリ
@ENDINIT
BGMSTOP
CLS
GPAGE 0:GCLS 0
GPAGE 1:GCLS 0
END

'PLAYERノ カチ
@ENDWIN
BGMPLAY BGMWIN
WINYOU=WINYOU+1
GOSUB @YOUTABLE
GOSUB @PRTYOUN
MS$="★★★ アナタノ カチ! ★★★"
MESWAIT=300
GOSUB @MESSAGE
TURN0=TURNYOU
RETURN

'CPUノ カチ
@ENDLOSE
BGMPLAY BGMLOSE
WINCPU=WINCPU+1
GOSUB @CPUTABLE
GOSUB @PRTCPUN
MS$="★★★ CPUノ カチ! ★★★"
MESWAIT=300
GOSUB @MESSAGE
TURN0=TURNCPU
RETURN

'ヒキワケ
@ENDDRAW
BGMPLAY BGMDRAW
MS$="○○○ ヒキワケ ○○○"
MESWAIT=300
GOSUB @MESSAGE
RETURN

'===== サブルーチン =====

'*** タイトル ヒョウジ ***
@PRTTITLE

GPAGE 0
GFILL 0,0,255,20,COLTITBG
GCOLOR COLTITLE
T$="○X REACH GAME X○"
TY=4
GOSUB @PRTCHR2X
RETURN

'*** デモ ヒョウジ ***
@PRTDEMO

GCOLOR COLDEMO
T$="○セツメイ デモ チュウ○"
TY=160
GOSUB @PRTCHR2X
T$="タッチデ スキップ"
TY=178
GOSUB @PRTCHR2X
RETURN

'*** デモ ショウキョ ***
@ERDEMO

GPAGE 0
GFILL 0,160,255,194,0
RETURN

'2バイモジ ヒョウジ サブ
@PRTCHR2X
GPAGE 0
XO=128-LEN(T$)*8
FOR I=0 TO LEN(T$)-1
GPUTCHR XO+I*16+1,TY,"BGF0",ASC(MID$(T$,I,1)),0,2
NEXT I
RETURN

'*** PLAYERマス ショキセッテイ ***
@YOUINI

N=1
FOR X=0 TO 4
FOR Y=0 TO 4
YOUN(X,Y)=N
N=N+1
NEXT Y
NEXT X

FOR N=1 TO 100
X=RND(5):Y=RND(5)
I=RND(5):J=RND(5)
Z=YOUN(X,Y)
YOUN(X,Y)=YOUN(I,J)
YOUN(I,J)=Z
NEXT N

RETURN

'*** CPUマス ショキセッテイ ***
@CPUINI

N=1
FOR X=0 TO 4
FOR Y=0 TO 4
CPUN(X,Y)=N
N=N+1
NEXT Y
NEXT X

FOR N=1 TO 100
X=RND(5):Y=RND(5)
I=RND(5):J=RND(5)
Z=CPUN(X,Y)
CPUN(X,Y)=CPUN(I,J)
CPUN(I,J)=Z
NEXT N

RETURN

'*** PLAYERノ バン ***
@YOUTURN

FOR X=0 TO 4
FOR Y=0 TO 4
THKN(X,Y)=YOUN(X,Y)
NEXT Y
NEXT X

ON GM==GMDEMO GOSUB @YOUTHK,@AUTOTHK

YOUN(EX,EY)=MARKER
GOSUB @PRTYOUN

FOR Y=0 TO 4
FOR X=0 TO 4
IF CPUN(X,Y)==SELN THEN SX=X:SY=Y:X=4:Y=4
NEXT X
NEXT Y
CPUN(SX,SY)=MARKSEL
IF (GM=GMDEMO OR DM==TRUE) THEN GOSUB @PRTCPUN

RETURN

'*** PLAYER スウジ センタク ***
@YOUTHK

MESWAIT=0
M$="★ケシタイ スウジヲ タッチシテ クダサイ。"
GOSUB @MESSAGE

@TCHLOOP
IF TCHST==FALSE GOTO @TCHLOOP
EX=FLOOR((TCHX-YOUX*8)/SELWX)
EY=FLOOR((TCHY-YOUY*8)/SELWY)
IF (EX<0 OR EX>4) GOTO @TCHLOOP
IF (EY<0 OR EY>4) GOTO @TCHLOOP
SELN=THKN(EX,EY)
IF (SELN==MARKER OR SELN=MARKSEL) GOTO @TCHLOOP

RETURN

'*** CPUノ バン ***
@CPUTURN

FOR X=0 TO 4
FOR Y=0 TO 4
THKN(X,Y)=CPUN(X,Y)
NEXT Y
NEXT X

GOSUB @AUTOTHK

CPUN(EX,EY)=MARKER
IF (GM==GMDEMO OR DM=TRUE) THEN GOSUB @PRTCPUN

FOR Y=0 TO 4
FOR X=0 TO 4
IF YOUN(X,Y)==SELN THEN SX=X:SY=Y:X=4:Y=4
NEXT X
NEXT Y
YOUN(SX,SY)=MARKSEL
GOSUB @PRTYOUN

RETURN

'*** シコウ ルーチン ***
@AUTOTHK

'オモミ リセット
FOR Y=0 TO 4
FOR X=0 TO 4
THKI(X,Y)=0
NEXT X
NEXT Y

'オモミ ケイサン ヨコ
FOR Y=0 TO 4
LINEC=0
IF Y!=2 THEN LINEC=1
FOR X=0 TO 4
IF THKN(X,Y)==MARKSEL THEN LINEC=LINEC+3
IF THKN(X,Y)==MARKER THEN LINEC=-1:X=4
NEXT X
FOR X=0 TO 4
THKI(X,Y)=THKI(X,Y)+LINEC
NEXT X
NEXT Y

'オモミ ケイサン タテ
FOR X=0 TO 4
LINEC=0
IF X!=2 THEN LINEC=1
FOR Y=0 TO 4
IF THKN(X,Y)==MARKSEL THEN LINEC=LINEC+3
IF THKN(X,Y)==MARKER THEN LINEC=-1:Y=4
NEXT Y
FOR Y=0 TO 4
THKI(X,Y)=THKI(X,Y)+LINEC
NEXT Y
NEXT X

'オモミ ケイサン ナナメ1
LINEC=4
FOR XY=0 TO 4
IF THKN(XY,XY)==MARKSEL THEN LINEC=LINEC+3
IF THKN(XY,XY)==MARKER THEN LINEC=-1:XY=4
NEXT XY
FOR XY=0 TO 4
THKI(XY,XY)=THKI(XY,XY)+LINEC
NEXT XY

'オモミ ケイサン ナナメ2
LINEC=4
FOR XY=0 TO 4
IF THKN(4-XY,XY)==MARKSEL THEN LINEC=LINEC+3
IF THKN(4-XY,XY)==MARKER THEN LINEC=-1:XY=4
NEXT XY
FOR XY=0 TO 4
THKI(4-XY,XY)=THKI(4-XY,XY)+LINEC
NEXT XY

'オモミ サイショウ マス
IM=20
FOR Y=0 TO 4
FOR X=0 TO 4
IF (THKI(X,Y)<IM AND THKN(X,Y)>0) THEN IM=THKI(X,Y):EX=X:EY=Y
NEXT X
NEXT Y

'ケス スウジ ケッテイ
SELN=THKN(EX,EY)

RETURN

'*** CPUマス ヒョウジ ***
@CPUTABLE

COLOR COLTBLTI
LOCATE CPUX,CPUY-1
PRINT "CPU (";WINCPU;"ショウ)"

GPAGE 0
FOR Y=0 TO 4
FOR X=0 TO 4
GX=CPUX*8+X*SELWX:GY=CPUY*8+Y*SELWY
GBOX GX,GY,GX+SELWX,GY+SELWY,COLTBLLN
GFILL GX+1,GY+1,GX+SELWX-1,GY+SELWY-1,COLTBLBG
NEXT X
NEXT Y

RETURN

'*** PLAYERマス ヒョウジ ***
@YOUTABLE

COLOR COLTBLTI
PNLSTR YOUX,YOUY-1,"アナタ ("+STR$(WINYOU)+"ショウ)"

GPAGE 1
FOR Y=0 TO 4
FOR X=0 TO 4
GX=YOUX*8+X*SELWX:GY=YOUY*8+Y*SELWY
GBOX GX,GY,GX+SELWX,GY+SELWY,COLTBLLN
GFILL GX+1,GY+1,GX+SELWX-1,GY+SELWY-1,COLTBLBG
NEXT X
NEXT Y

RETURN

'*** CPUスウジ ヒョウジ ***
@PRTCPUN

GPAGE 0
FOR Y=0 TO 4
FOR X=0 TO 4
GX=CPUX*8+X*SELWX:GY=CPUY*8+Y*SELWY
GFILL GX+1,GY+1,GX+SELWX-1,GY+SELWY-1,COLTBLBG
NUM=CPUN(X,Y)
IF GM==GMPLAY AND DM==FALSE THEN GOSUB @PRTSEC
IF (GM!=GMPLAY OR DM==TRUE) AND NUM>0 THEN GOSUB @PRTN
IF (GM!=GMPLAY OR DM==TRUE) AND NUM==MARKER THEN GOSUB @PRTER
IF (GM!=GMPLAY OR DM==TRUE) AND NUM==MARKSEL THEN GOSUB @PRTSEL
NEXT X
NEXT Y
RETURN

'*** PLAYERスウジ ヒョウジ ***
@PRTYOUN

GPAGE 1
FOR Y=0 TO 4
FOR X=0 TO 4
GX=YOUX*8+X*SELWX:GY=YOUY*8+Y*SELWY
GFILL GX+1,GY+1,GX+SELWX-1,GY+SELWY-1,COLTBLBG
NUM=YOUN(X,Y)
IF NUM>0 THEN GOSUB @PRTN
IF NUM==MARKER THEN GOSUB @PRTER
IF NUM==MARKSEL THEN GOSUB @PRTSEL
NEXT X
NEXT Y
RETURN

'*** スウジヒョウジ サブ ***
@PRTN
NUM$=STR$(NUM)
ON LEN(NUM$)-1 GOSUB @PRTN1,@PRTN2
RETURN

@PRTN1
N1$=MID$(NUM$,0,1)
GPUTCHR GX+4+8,GY+4,"BGF0",ASC(N1$),COLTBLN,2
RETURN

@PRTN2
N1$=MID$(NUM$,0,1)
N2$=MID$(NUM$,1,1)
GPUTCHR GX+4,GY+4,"BGF0",ASC(N1$),COLTBLN,2
GPUTCHR GX+4+16,GY+4,"BGF0",ASC(N2$),COLTBLN,2
RETURN

@PRTER
GPUTCHR GX+4+8,GY+3,"BGF0",ASC("X"),COLTBLER,2
RETURN

@PRTSEL
GPUTCHR GX+4+8,GY+4,"BGF0",ASC("○"),COLTBLSL,2
RETURN

@PRTSEC
GPUTCHR GX+4+8,GY+4,"BGF0",ASC("?"),COLTBLSC,2
RETURN

'*** CPUマス ハンテイ ***
@CHKCPU

FOR Y=0 TO 4
FOR X=0 TO 4
THKN(X,Y)=CPUN(X,Y)
NEXT X
NEXT Y

GOSUB @CHKTABLE

IF RC==TRUE THEN GR=REACHCPU
IF (DC==TRUE AND WC==FALSE) THEN GM=GMDRAW
IF WC==TRUE THEN GM=GMCPUWIN

RETURN

'*** PLAYERマス ハンテイ ***
@CHKYOU

FOR Y=0 TO 4
FOR X=0 TO 4
THKN(X,Y)=YOUN(X,Y)
NEXT X
NEXT Y

GOSUB @CHKTABLE

IF RC==TRUE THEN GR=REACHYOU
IF (DC==TRUE AND WC==FALSE) THEN GM=GMDRAW
IF WC==TRUE THEN GM=GMYOUWIN

RETURN

'*** マス ハンテイ サブ ***
@CHKTABLE

GR=REACHNO
RC=FALSE:WC=FALSE:DC=FALSE
LN=LINEN(SX,SY)

'ヨコ ハンテイ
@CHKX
IF (LN AND 1)==0 GOTO @CHKY
CC=0
FOR X=0 TO 4
IF THKN(X,SY)==MARKSEL THEN CC=CC+1
IF THKN(X,SY)==MARKER THEN CC=0:X=4
NEXT X
IF CC==5 THEN WC=TRUE
IF CC==4 THEN RC=TRUE

'タテ ハンテイ
@CHKY
IF (LN AND 2)==0 GOTO @CHKXY
CC=0
FOR Y=0 TO 4
IF THKN(SX,Y)==MARKSEL THEN CC=CC+1
IF THKN(SX,Y)==MARKER THEN CC=0:Y=4
NEXT Y
IF CC==5 THEN WC=TRUE
IF CC==4 THEN RC=TRUE

'ナナメ ハンテイ1
@CHKXY
IF (LN AND 4)==0 GOTO @CHKYX
CC=0
FOR XY=0 TO 4
IF THKN(XY,XY)==MARKSEL THEN CC=CC+1
IF THKN(XY,XY)==MARKER THEN CC=0:XY=4
NEXT XY
IF CC==5 THEN WC=TRUE
IF CC==4 THEN RC=TRUE

'ナナメ ハンテイ2
@CHKYX
IF (LN AND 8)==0 GOTO @CHKEND
CC=0
FOR XY=0 TO 4
IF THKN(4-XY,XY)==MARKSEL THEN CC=CC+1
IF THKN(4-XY,XY)==MARKER THEN CC=0:XY=4
NEXT XY
IF CC==5 THEN WC=TRUE
IF CC==4 THEN RC=TRUE

@CHKEND

'ドロー?
CN=FALSE
FOR Y=0 TO 4
FOR X=0 TO 4
IF THKN(X,Y)>0 THEN CN=TRUE
NEXT X
NEXT Y
IF CN==FALSE THEN DC=TRUE

RETURN

'*** メッセージ ウインドウ ***
@MESSAGE

'ウインドウ
GPAGE 1
GFILL MESX*8-8,MESY*8-8,(MESX+30)*8+8,(MESY+4)*8+8,COLMESBG
COLOR COLMESFL
PNLSTR MESX-1,MESY-1,"┌──────────────────────────────┐"
FOR Y=0 TO 3
PNLSTR MESX-1,MESY+Y,"│                              │"
NEXT Y
PNLSTR MESX-1,MESY+4,"└──────────────────────────────┘"

'ウインドウ タイトル
IF MESTIT$=="" GOTO @MESTITEN
XO=FLOOR(15-LEN(MESTIT$)/2)
PNLSTR MESX+XO,MESY-1,"["+MESTIT$+"]"
@MESTITEN

'メッセージ ギョウブンカイ
FOR I=0 TO 3
MES$(I)=""
NEXT I
FOR C=0 TO LEN(MS$)-1
MN=FLOOR(C/30)
MES$(MN)=MES$(MN)+MID$(MS$,C,1)
NEXT C

'メッセージ ヒョウジ
XO=0
IF MESDLG==TRUE THEN XO=FLOOR(15-LEN(MES$(0))/2)
COLOR COLMES
FOR Y=0 TO 3
PNLSTR MESX+XO,MESY+Y,MES$(Y)
NEXT Y

'ダイアログ/ワンタッチ/ウェイト
IF MESDLG==TRUE THEN GOSUB @MESDLG:GOTO @MESEND
IF MESTCH==TRUE THEN GOSUB @MESTCH:GOTO @MESEND
VSYNC MESWAIT

@MESEND
RETURN

'*** メッセージ ダイアログ ***
@MESDLG

B1$="ハイ":BW1=LEN(B1$)+2
BX1=MESX+8:BY1=MESY+1
B2$="イイエ":BW2=LEN(B1$)+2
BX2=MESX+17:BY2=MESY+1

PNLSTR BX1,BY1,"┌──┐"
PNLSTR BX1,BY1+1,"│"+B1$+"│"
PNLSTR BX1,BY1+2,"└──┘"
PNLSTR BX2,BY2,"┌───┐"
PNLSTR BX2,BY2+1,"│"+B2$+"│"
PNLSTR BX2,BY2+2,"└───┘"

'ボタン タッチ マチ
@MESDLGLP
IF TCHST==FALSE GOTO @MESDLGLP
TX=FLOOR(TCHX/8):TY=FLOOR(TCHY/8)
MESBTN=FALSE
IF (BX1<=TX AND TX<=BX1+BW1) THEN MESBTN=TRUE:MESRET=TRUE
IF (BX2<=TX AND TX<=BX2+BW2) THEN MESBTN=TRUE:MESRET=FALSE
IF MESBTN=FALSE GOTO @MESDLGLP
BEEP BPYOUSEL

RETURN

'*** メッセージ ワンタッチ マチ ***
@MESTCH

MESRET=FALSE
TIME0=MAINCNTL

@MESTCHLP
TIME1=MAINCNTL-TIME0
IF (TCHST==FALSE AND TIME1<MESTIME) GOTO @MESTCHLP

IF TCHST==TRUE THEN MESRET=TRUE

RETURN