bool Board::move(const Point& point) { if(point.x <= 0 || point.x > BOARD_SIZE) return false; if(point.y <= 0 || point.y > BOARD_SIZE) return false; if(MovableDir[Turns][point.x][point.y] == NONE) return false; flipDiscs(point); Turns++; CurrentColor = -CurrentColor; initMovable(); return true; }
//pointで指定された位置に石を打つ。 //成功したら return true //及び、次のターンの計算結果を調査開始する。 bool Board::move(const Point& point) { //石が打てる位置か判定する if(point.x <= 0 || point.x > BOARD_SIZE) return false; if(point.y <= 0 || point.y > BOARD_SIZE) return false; if(MovableDir[Turns][point.x][point.y] == NONE) return false; //checkMobilityの結果。既に石があるか、置けない場所を指定したなら falseを返す //石を打つ、変更点追跡、石裏返す、石数カウント、UpdateLog記録 flipDiscs(point); //手数をインクリメント Turns++; CurrentColor = -CurrentColor;//白→黒 or 黒→白 //MovableDirとMovablePosを調べ直す。(再計算) initMovable(); //現在の局面で、現在の番手(黒or白)が置ける場所を計算する return true; }