*MAIN_Define
gosub *RVS_Define
defsub mainDrawComment
return

*MAIN_Start
textoff
saveoff
RvsInit
LogInit
;LogView
;LogClear
; 盤面を表示
RvsUpdateBoard
; とりあえずプレイヤーが黒で先行
RvsSetFormer RVS_PLAYER,B
;RvsSetFormer RVS_CPU,W
goto *main_Wait

*main_Wait
RvsIsPlayerTurn %0
if %0=0 goto *main_CpuRoutine
goto *main_PlayerTurn

*main_PlayerTurn
;lsp 255,":s/18,18,0;#000000#000000プレイヤーの番です",120,1
mainDrawComment "プレイヤーの番です"
clickpos %0,%1
; 盤上の座標かチェック
RvsPtInBoard %2,%0,%1
if %2=1 goto *main_HitStone
; パスするかチェック
if %0>=560 & %0<560+64 & %1>=440 & %1<440+32 goto *main_Pass
; とりあえず盤上のクリック以外は全て無視
goto *main_Wait

; CPUの動作
*main_CpuRoutine
mainDrawComment "コンピュータの思考中"
RvsCalcTotalValidCell %0
;traceint %0
; 存在しない場合はパス
if %0<1 goto *main_Pass
rnd %2,%0
;traceint %2
RvsGetValidCellPos %0,%1,%2
;tracexy %0,%1
RvsHitStoneByPos %0,%1
goto *main_Done

*main_HitStone
RvsIsValidHit %2,%0,%1
if %2=0 mesbox "Cannot hit there!","Invalid Hit":goto *main_Wait
RvsHitStone %0,%1
goto *main_Done

; 石を置いた後の処理
*main_Done
saveon
RvsUpdateBoard
saveoff
; 終了なら勝敗の判定、続行ならターン切替
RvsCheckFinished %0
if %0=1 goto *main_GameFinish
RvsChangeTurn
goto *main_Wait

*main_Pass
mesbox "Pass! (There is no hittable cell)","Pass"
RvsChangeTurn
goto *main_Wait

*main_GameFinish
RvsCheckWinner %0
if %0=RVS_PLAYER_WIN goto *main_PlayerWin
if %0=RVS_PLAYER_LOSE goto *main_PlayerLose
goto *main_GameDraw

*main_PlayerWin
mesbox "You win!","Finish"
goto *end

*main_PlayerLose
mesbox "You lose...","Finish"
goto *end

*main_GameDraw
mesbox "Draw Game","Finish"
goto *end

*mainDrawComment
getparam $10
mov $11,":s/18,18,0;#000000#000000"
add $11,$10
lsp 255,$11,120,1
print 1
return