白黒の石をはさんでひっくり返す、「リバーシ」ゲームの投稿だ。
有名なルールなので、さすがに説明の必要はないだろう。実行するとランダムで先攻・後攻が決まるので、あとは石を置きたい場所にタッチしてゲームを進めていこう。
Jの字
中学生の頃、PC98で作ろうと思って挫折したリバーシのプログラムですが、今やってみるとあっさり作れてしまったあたりに自分自身の進歩が見られます。
先読みしていないのであまり強くありませんがテンポ良くプレイできるのでそれなりに楽しめると思います
- CLEAR
- PNLTYPE”OFF”
- GPAGE 1
- DIM VN(20,20),VW(64),P$(3)
- W=22:P$(1)=”アナタ”:P$(2)=”COM”
- ’===オモミツ゛ケ
- FOR I=0 TO 31
- READ X
- VW(I)=X*X:VW(63-I)=X*X
- NEXT
- DATA 1,6,3,4,4,3,6,1
- DATA 6,9,5,5,5,5,9,6
- DATA 3,5,4,6,6,4,5,3
- DATA 4,5,6,1,1,6,5,4
- ’===コ゛ハ゛ン
- @START
- ENDFLG=0:GCLS 10:BGMPLAY 16
- FOR I=0 TO 8
- X=I*W+8
- GLINE 8,X,8*W+8,X,14
- GLINE X,8,X,8*W+8,14
- NEXT
- GBOX 3,3,253,189,5
- GPAINT 5,5,11
- ’===イシ
- FOR I=1 TO 8
- FOR J=1 TO 8
- VN(I,J)=0
- NEXT
- NEXT
- VN(4,4)=1:VN(5,5)=1
- VN(4,5)=2:VN(5,4)=2
- P=1:GOSUB @DRAW:CLS
- ’===タイトル
- COLOR 5:?,,”┌─┐ ”
- COLOR 4:?,,”│ │ ●”
- COLOR 15:?,,”├┬┘┌─│┌┬─┌┌─┬”
- COLOR 9:?,,”││ ├─││├─│└┐│”
- COLOR 11:?,,”┘└─┴─└┘└─┴─┘┴”
- ’===センコウコウコウ
- I=RND(2)+1:?”センテ:”+P$(I)
- IF I==2 GOTO @COM
- ’===ニュウリョクマチ
- @TOUCH
- IF TCHTIME<5 GOTO @TOUCH
- X=FLOOR((TCHX-8)/W)+1
- Y=FLOOR((TCHY-8)/W)+1
- ’***オケルハ゛ショカ カクニン
- FLG=0:GOSUB @GET
- IF HK==0 GOTO @TOUCH
- ’***オイタ
- BEEP 7
- FLG=1:GOSUB @GET
- VN(X,Y)=1:GOSUB @DRAW
- IF ENDFLG==1 GOTO @KEKKA
- ’===テキノハ゛ン
- @COM
- P=2:EP=-1:ES=100000
- FOR E=0 TO 63
- X=E%8+1:Y=FLOOR(E/8)+1
- FLG=0:P=2:GOSUB @GET
- ER=(RND(10)+6)*HK*VW(E)
- IF ER>0 AND ES>ER THEN EP=E:ES=ER
- NEXT
- PF=0
- IF EP==-1 THEN ?”COM:PASS”:PF=1:GOTO @CANPUT
- X=EP%8+1:Y=FLOOR(EP/8)+1
- FLG=1:GOSUB @GET
- BEEP 11
- GOSUB @DRAW
- IF ENDFLG==1 GOTO @KEKKA
- ’===オクトコロアル?
- @CANPUT
- P=1:EP=-1:FLG=0
- FOR X=1 TO 8
- FOR Y=1 TO 8
- GOSUB @GET
- IF HK>0 THEN EP=1
- NEXT
- NEXT
- IF EP==-1 AND PF==1 GOTO @KEKKA
- IF EP==-1 THEN ?”アナタ:PASS”:GOTO @COM
- GOTO @TOUCH
- ’===ケッカ
- @KEKKA
- COLOR 0:I=(V1<V2)+1
- BGMPLAY 4+I
- ?P$(I);”ノカチ ” V1;”-”;V2
- ?”TOUCH SCREEN TO START”
- @KEKKA2
- IF TCHTIME>5 GOTO @START
- GOTO @KEKKA2
- ’===イシナラヘ゛ル
- @DRAW
- V1=0:V2=0
- FOR I=1 TO 8
- FOR J=1 TO 8
- TP=VN(I,J)
- IF TP>0 THEN GOSUB @DRAW1
- IF TP==1 THEN V1=V1+1
- IF TP==2 THEN V2=V2+1
- NEXT
- NEXT
- COLOR 16-P*3
- ?P$(P);”:”;X;”-”;Y
- IF V1*V2==0 THEN ENDFLG=1
- IF V1+V2==64 THEN ENDFLG=1
- RETURN
- ’===イシヲカク
- @DRAW1
- GX=I*W-3:GY=J*W-3
- GCIRCLE GX,GY,9,13,180,360
- GCIRCLE GX,GY-1,9,14+TP
- GPAINT GX,GY-1,14+TP
- RETURN
- ’===トレルコスウ/トル
- @GET
- HK=0
- IF X<1 OR 8<X OR Y<1 OR 8<Y THEN RETURN
- IF FLG==0 AND VN(X,Y)!=0 THEN RETURN
- FOR I=-1 TO 1
- FOR J=-1 TO 1
- TX=X:TY=Y:G=0
- IF I==0 AND J==0 GOTO @G2
- @G1
- TX=TX+I:TY=TY+J
- IF VN(TX,TY)==0 THEN G=0:GOTO @G2
- IF VN(TX,TY)==P GOTO @G2
- G=G+1:GOTO @G1
- @G2
- IF G>0 AND FLG==1 THEN GOSUB @RVS
- HK=HK+G
- NEXT
- NEXT
- RETURN
- ’===ウラカ゛エシ
- @RVS
- IF TX==X AND TY==Y THEN RETURN
- TX=TX-SGN(TX-X):TY=TY-SGN(TY-Y)
- VN(TX,TY)=P
- GOTO @RVS