おせろ、裏返し処理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
プログラマーの卵

おせろ、裏返し処理

#1

投稿記事 by プログラマーの卵 » 6年前

オセロのプログラムで裏返す処理がわかりません

2重配列でやっております
ソースコードを簡略して書きます

// 初期化処理 //

コード:

	// オセロの盤をすべて何もおいていない状態にする
	for (int i = 0; i < 8; i++)
	{
		for (int j = 0; j < 8; j++)
		{
			board[j][i] = NONE;
		}
	}


	//	駒の初期配置
	board[4][4] = BLACK;
	board[3][3] = BLACK;
	board[3][4] = WHITE;
	board[4][3] = WHITE;
自分が置いた駒の場所は取得できます
int PieceXとint PieceYが自分の置いた駒の場所です
BoardType Typeはenumで宣言しているタイプです

コード:

bool	Check(int PieceX, int PieceY, BoardType Type)
{
	for (int i = PieceX - 1; i <= PieceX + 1; i++)
	{
		for (int j = PieceY - 1; j <= PieceY + 1; j++)
		{
			if (i == PieceX &&j == PieceY)continue;
			if (board[j][i] == NONE)
				continue;
			if (board[j][i] != Type)
				return true;
		}
	}
	return false;
}
これで置いた駒周辺の8マスをチェックしているはずなんですが・・・
ここらの処理がわかりません
trueになったマスの先を調べて自分と違う色があったらひっくりかえすと言う処理だとおもうのですが
どなたかわかる方お助けお願いします

jay
記事: 314
登録日時: 9年前
住所: 大阪市
連絡を取る:

Re: おせろ、裏返し処理

#2

投稿記事 by jay » 6年前

いきなり全方向で考えるとややこしくなるので
まずは左方向だけで考えてみましょう
それが出来たら上下右、次は斜め方向、と段階を踏んでいけばいいかと

裏返し判定のアルゴリズムとしては

①自分が駒を置いた場所の左のマスに相手の駒があれば裏返し判定を行う
 相手の駒が無ければ裏返し判定は行わない

②そのままマスをチェックしながら左に進んでいく、その時
 駒が自分の色だった → その駒から自分が置いた駒までの相手の駒を自分の色にする
                 処理終了
             
 駒が相手の色だった → 次のマスの判定へ、処理継続
 
 駒が無かった      → 何もしない、処理終了
 

こんな感じでしょうか?
左方向だけで考えればずいぶん分かりやすくなるんじゃないかと思います。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

閉鎖

“C言語何でも質問掲示板” へ戻る