8×8が通常なのですが、色々なサイトを見ていて場外の2ずつを
足したほうが良さそうだったので多めに領域を設定しております。
黒と白の表示とターンごとに石のセットまでは作れたのですが、
「石を置ける場所なのかのチェック」と「石を裏返す」処理をまだ実装出来ておりません。
「石を置ける場所なのかのチェック」のチェックだけでも実装してみたいのですが
上手く動作させることが出来ませんでした。
取りあえずは下向きに探索をかけてみて違う色があり、
同じ色が出てきたらtrueを返すみたいにしたのですが、
処理の書き方が悪く上手く動作しませんでした。
課題とかではないので急ぎではないのですが
お分かりになる方アドバイス頂けないでしょうか?
#define BOARD_MAX 10 /* 盤を表す配列 board のサイズ */
class BOARD{
public:
MENU Button[BOARD_MAX][BOARD_MAX];
int Board[BOARD_MAX][BOARD_MAX]; /* 盤の状態を表す配列 */
void Init();
bool BW( int bx, int by ); // 黒か白ならtrue
bool SetCheck( int bx, int by, int color ); // 今回の作りたい内容
};
// 初期化
void BOARD::Init(){
for ( int i=0; i<BOARD_MAX; i++ ){
for ( int j=0; j<BOARD_MAX; j++ ){
this->Board[i][j] = -1;
}
}
for ( int i = 1; i <= 8; i++ ){
for ( int j = 1; j <= 8; j++ ){
this->Board[i][j] = 0;
}
}
this->Board[4][5] = this->Board[5][4] = 1;
this->Board[4][4] = this->Board[5][5] = 2;
// ボタンの初期化
for ( int i=0; i<BOARD_MAX; i++ ){
for ( int j=0; j<BOARD_MAX; j++ ){
int px = j*BOARD_WIDTH + 50;
int py = i*BOARD_HEIGHT + 50;
this->Button[i][j].Init( px, py, BOARD_WIDTH, BOARD_HEIGHT, 1.0f, 1.0f );
}
}
}
// 黒か白ならtrue
bool BOARD::BW( int bx, int by ){
/*
if( bx < 0 || by < 0 || bx >= BOARD_MAX || by >= BOARD_MAX ){
NSLog( @"check error" );
return false;
}
*/
if( this->Board[by][bx] == 1 || this->Board[by][bx] == 2 ) return true;
return false;
}
// おけるかのチェック
bool BOARD::SetCheck( int bx, int by, int color ){
bool cf = false;
// 下向きにおけるか
if( this->Board[by][bx] == 0 ){
for( int y=by+1; y<BOARD_MAX; y++ ){
if( this->BW( bx, y ) ){
//if( this->Board[y][bx] != color ) return true;
/*
if( this->Board[y][bx] != color ) cf = true;
if( this->Board[y][bx] == color && cf ) return true;
*/
}
}
}
return false;
}
for( int i=0; i<BOARD_MAX; i++ ){
for( int j=0; j<BOARD_MAX; j++ ){
if( Board.Button[i][j].TouchCheck() && Board.SetCheck( j, i, Obj.Turn+1 )){
Board.Board[i][j] = Obj.Turn+1;
Obj.Turn++;
if( Obj.Turn >= 2 ) Obj.Turn = 0;
break;
}
}
}