*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