コンテストに関連しているならなんでもあり、ということで
早速質問ががが
#module
#defcfunc revcnt array table, int x, int y, int curplayer, int rev
//画面内チェック
if((x > 7)||(y > 7)):return 0
//空白かチェック
if( table(x + y * 8) != 0 ){
return 0
}
//おけるかチェック
able = 0
repeat 3
dy = cnt -1
repeat 3
dx = cnt -1
if((dx == 0) && ( dy == 0)) : continue
//ある方向について、裏返せるのか
//1つずらした状態
if (x + dx < 0) || ( x + dx > 7) || (y + dy < 0) || (y + dy > 7) : continue
sttmp = table(x+dx+y*8+dy*8)
if ( (curplayer == sttmp) || (sttmp == 0) ) : continue
//2以降
curx = x+ dx * 2
cury = y+ dy * 2
repeat
if((curx < 0) || (curx > 7) || (cury < 0) || (cury > 7) ){
break
}
sttmp = table(curx + cury*8)
if(0 == sttmp) : break
if(sttmp == curplayer) {
able += cnt + 1
//指定があれば裏返す
if(rev != 0) {
repeat
if((curx == x) && (cury == y)):table(x + y * 8) = curplayer :break
table(curx + cury*8) = curplayer
curx -= dx
cury -= dy
loop
}
break
}
curx += dx
cury += dy
loop
loop
loop
return able
#global
title "オセロ"
dim state, 64 //64セル
state(3+ 3*8) = 2
state(3+ 4*8) = 1
state(4+ 3*8) = 1
state(4+ 4*8) = 2
//現在のプレーヤ
curplayer = 1
//メインループ
repeat
redraw 0
//背景を表示
gosub *s_background
//石を表示
gosub *s_coin
//入力チェック
stick key, 0
if(key == 256){//左クリック
gosub *s_clicked
}
redraw 1
wait 1
loop
//----------------------------------------------
//背景を表示
*s_background
color 0, 100, 0
boxf 10,10,410,410
color 0, 0, 0
repeat 9
boxf 10+ cnt*50, 10, 10+cnt*50+1, 410
boxf 10, 10+ cnt*50, 410, 10+cnt*50+1
loop
return
//コインを状態に従って表示
*s_coin
repeat 8
y = cnt
repeat 8
x = cnt
switch state( x + y * 8 ) ; aを比較対象とする
case 0 ; aが0だった場合
//空白セル
color 0, 100, 0
swbreak ; case0の条件実行終了
case 1 ; aが1だった場合
//黒セル
color 0, 0, 0
swbreak
default ; aが0以外だった場合
//白セル
color 255, 255, 255
swbreak
swend
circle 10 + x*50+2, 10 + y * 50+2, 10 + x*50 + 50 -1 , 10 + y * 50 + 50 - 1
loop
loop
return
//クリック時
*s_clicked
x = (mousex - 10)/50
y = (mousey - 10)/50
//画面内チェック
if((x > 7)||(y > 7)):return
//空白かチェック
if( state(x + y * 8) != 0 ){
return
}
able = revcnt(state, x, y, curplayer, 1) //裏返す
//裏返し
if curplayer = 1 :powerkuro + 1
if curplayer = 2 :powersiro + 2
if(able > 0){
*nextplayer
//次の人
pass = 0
br = 0
//パス
repeat
if curplayer == 2 : curplayer == 1 : else : curplayer = 2
repeat 8
cy = cnt
repeat 8
cx = cnt
if(revcnt(state, cx, cy, curplayer) != 0) : br = 1 : break
loop
loop
if(br == 1) : break : else : pass ++ : pos 500, 0 : dialog "pass"
if(pass == 2) : dialog "終了" : break
loop
}
return
「とった石」の座標を取得し、その「座標」のpowerレベルを1上げる。とった石のところが2で取るために置いた石が1だったら
3(もとからあった)
2
1
これは取れる。見たいな
つまり座標にパワーレベルを追加したいんですがどうもうまくいかなくてorz
誰か助けてください・・・