Exemple #1
0
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;
}
Exemple #2
0
//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;
}