オセロとも呼ばれるリバーシゲームです。思考エンジンは持ってません。検討用です。 メニュー画面で、マスを8*8だけでなく3〜16に設定できます。 ゲーム中に[戻る][進む]ボタンで手を変化できます(終局後も戻るボタンは有効)。 パスは自動認識しますが、[PASS]ボタンで意図的なパスもできます(ルールでは不可)。 [EDIT]ボタンで盤面に石を任意に置いたり消すことができます。 <裏技> メニュー画面では16*16マスまでしか設定できませんが、変数m,nの値を変更すれば80*80や240*8といった設定も可能です。 ただし配列の大きさがマス数の2乗に比例するので盤面を表示するまでに数分かかることもあります。
REM ** REVERSI Lesson ** DECLARE EXTERNAL SUB init.menu,init.choose,init.radio,mouse.operation DECLARE EXTERNAL PICTURE box.button01,box.rect PUBLIC NUMERIC m,n,b,w,board,ground,iss,putcol,pix,pixd(5,2) PUBLIC STRING cc$(0 TO 11) ! [設定メニュー] デフォルトの値 LET m=8 ! マスの列数(横;alphabet),m=3〜16に変更可(最大248?) LET n=8 ! マスの行数(縦;数字),n=3〜16に変更可(最大81?),m>=n LET b=1 ! 先手色(黒),b=0〜9に変更可 LET w=0 ! 後手色(白),w=0〜9に変更可 LET board=10 ! 盤面(濃緑),石とは違う色,board=2〜11 LET ground=11 ! 背景の色(青緑),石や盤面と違う色,ground=2〜11 LET iss=0 ! 初期の石の配置 0=交差,1=平行 LET putcol=12 ! 着手点表示色(蛯茶),表示しない時はputcol=0 LET pix=4 ! モニターの解像度選択(1280*800),pix=1〜5 MAT READ cc$ ! 色名 DATA 白,黒,青,緑,赤,水,黄,紫,灰,藍,濃緑,碧 MAT READ pixd ! モニターの解像度データ DATA 800,600, 1024,768, 1280,720, 1280,800, 1280,1024 IF m<n THEN SWAP m,n CALL menu ! 設定メニュー(スキップ可) ! LET pixx=INT(pixd(pix,1)*0.98)-1 !一画面に収まる最大画素数 LET pixy=INT(pixd(pix,2)*0.85)-1 LET bp=INT(MIN(pixx/(m+2),pixy/(n+2))) ! マスの一辺の画素数 LET ic=4 ! 初期の石の個数 LET mem=(m+2)*(n+2)+m*n+(m*n-ic+1)*m*n+(m*n-ic)*3 ! 配列の要素数の合計 IF bp=5 THEN LET putcol=0 ! bp=5 は、着手点表示なしならば可 IF bp<5 OR mem>44000000 THEN CALL mem_error ! メモリーオーバー SET BITMAP SIZE bp*(m+2)+1,bp*(n+2)+1 SET WINDOW 0,m+2,n+2,0 DIM r(0 TO m+1,0 TO n+1),r3(m,n),rr(ic TO m*n,m,n),kif(m*n-ic,3) MAT r=board*CON ! r(x,y)は盤面(x列,y行)の色 DRAW start ! 初期画面描画 CALL scan ! 盤面スキャン DRAW counter ! 石数表示 LET c=b ! c=手番の色(先手は黒番) DRAW turn(c) ! 手番表示 DEF count=countb+countw ! 盤面上の石数 DEF hand=countb+countw-ic+1 ! 手数 IF bp<15 THEN SET POINT STYLE 2 ! マスが小さい時,着手点表示を十字形に LET putx=1 LET puty=1 !<その2>に続く
|