Esempio n. 1
0
bool Board::isGameOver() const
{
	// 60手に達していたらゲーム終了
	if(Turns == MAX_TURNS) return true;
	
	// 打てる手があるならゲーム終了ではない
	if(MovablePos[Turns].size() != 0) return false;
	
	//
	//	現在の手番と逆の色が打てるかどうか調べる
	//
	Disc disc;
	disc.color = -CurrentColor;
	for(int x=1; x<=BOARD_SIZE; x++)
	{
		disc.x = x;
		for(int y=1; y<=BOARD_SIZE; y++)
		{
			disc.y = y;
			// 置ける箇所が1つでもあればゲーム終了ではない
			if(checkMobility(disc) != NONE) return false;
		}
	}
	
	return true;
}
Esempio n. 2
0
void Board::initMovable()
{
	Disc disc(0, 0, CurrentColor);

	int dir;

	MovablePos[Turns].clear();

	for(int x=1; x<=BOARD_SIZE; x++)
	{
		disc.x = x;
		for(int y=1; y<=BOARD_SIZE; y++)
		{
			disc.y = y;
			
			dir = checkMobility(disc);
			if(dir != NONE)
			{
				// 置ける
				MovablePos[Turns].push_back(disc);
			}
			MovableDir[Turns][x][y] = dir;
		}
	}
}
Esempio n. 3
0
//現在の局面で、現在の番手(黒or白)が置ける場所を計算する
//MovableDirとMovablePosを再計算する
void Board::initMovable()
{
	Disc disc(0, 0, CurrentColor);//構造体のインスタンスを現在色で作成 

	int dir;

	//ポジションクリア
	MovablePos[Turns].clear();

	//盤の全ての目において、置けるかどうかを調べる。
	for(int x=1; x<=BOARD_SIZE; x++)//x=0の時は壁なので1から開始する
	{
		disc.x = x;
		for(int y=1; y<=BOARD_SIZE; y++)
		{
			disc.y = y;
			
			//石を置ける場所か判定
			dir = checkMobility(disc); //discの位置に置けるなら、discから見て石が返る方向を表したビットを取得
			if(dir != NONE)
			{
				// 置ける
				MovablePos[Turns].push_back(disc); //末尾に格納(discのコピーが格納される?)
			}

			MovableDir[Turns][x][y] = dir; //置ける方向を表したビット(NONEでもNONE以外でも結果を格納)
		}
	}


}