본문내용
BLACK;
//보드 0
dx = dy = BOARDSIZE/2; // 중앙 배치
gotoxy(BOARDSIZE-1, BOARDSIZE/2); //그림을 표현하기 위해서는 기본 좌표(x, y)를 (x*2, y)로 표현
// 그림으로 중앙으로 배치.
}
int ThreeCheck2(int ex, int ey, int dx, int dy, int flag)
{
int three, count;
int x, y;
int c;
int re;
three = 0;
count = 0;
re = Exchange(turn);
x = ex;
y = ey;
/*
while(1){
if( Wall(dx+x, dy+y) == 0 && board[dy+y][dx+x] == EMPTY ){
board[dy+y][dx+x] = turn;
if( ThreeCheck(-1, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(0, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(-1, 0, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(1, -1, dx+x, dy+y, &c) ) count++;
board[dy+y][dx+x] = EMPTY;
break;
}else if( (Wall(dx+x, dy+y) == 0 && (board[dy+y][dx+x] != EMPTY || board[dy+y][dx+x] != turn) ) || Wall(dx+x, dy+y) == 1 ) break;
else{
x += ex;
y += ey;
continue;
}
}
*/
while(1){
if( (Wall(dx+x, dy+y) == 0 && board[dy+y][dx+x] == turn) ){
x += ex;
y += ey;
continue;
}else if( Wall(dx+x, dy+y) == 1 || (Wall(dx+x, dy+y) == 0 && board[dx+x][dy+y] == re) ) break;
board[dy+y][dx+x] = turn;
if( ThreeCheck(-1, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(0, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(-1, 0, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(1, -1, dx+x, dy+y, &c) ) count++;
board[dy+y][dx+x] = EMPTY;
break;
}
if( count >= 2 ) three--;
if( three < 0 ) return 1;
count = 0;
/*
if( ex == -1 && ey == -1 ) gotoxy(1, 18);
if( ex == 0 && ey == -1 ) gotoxy(1, 19);
if( ex == -1 && ey == 0 ) gotoxy(1, 20);
if( ex == 1 && ey == -1 ) gotoxy(1, 21);
*/
ex *= -1;
ey *= -1;
x = ex;
y = ey;
/*
while(1){
if( Wall(dx+x, dy+y) == 0 && board[dy+y][dx+x] == EMPTY ){
board[dy+y][dx+x] = turn;
if( ThreeCheck(-1, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(0, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(-1, 0, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(1, -1, dx+x, dy+y, &c) ) count++;
board[dy+y][dx+x] = EMPTY;
break;
}else if( (Wall(dx+x, dy+y) == 0 && (board[dy+y][dx+x] != EMPTY || board[dy+y][dx+x] != turn) ) || Wall(dx+x, dy+y) == 1 ) break;
else{
x += ex;
y += ey;
continue;
}
}
*/
while(1){
if( (Wall(dx+x, dy+y) == 0 && board[dy+y][dx+x] == turn) ){
x += ex;
y += ey;
continue;
}else if( Wall(dx+x, dy+y) == 1 || (Wall(dx+x, dy+y) == 0 && board[dx+x][dy+y] == re) ) break;
board[dy+y][dx+x] = turn;
if( ThreeCheck(-1, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(0, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(-1, 0, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(1, -1, dx+x, dy+y, &c) ) count++;
board[dy+y][dx+x] = EMPTY;
break;
}
if( count >= 2 )three--;
//printf(\"%d\", count);
if( three < 0 ) return 1;
return 0;
}
int ThreeCheck(int ex, int ey, int dx, int dy, int *flag) // 삼삼 금수 검사.
{
int x, y;
int empty, re_empty;
int reverse;
int fx, fy; // 첫번째 x, y 좌표; // ex, ey만큼 계속 이동해서 turn의 첫번째 자리
int lx, ly; // 마지막 x, y 좌표; // ex, ey의 반대 방향만큼 계속 이동해서 turn의 마지막 자리
int wall, re_wall; // wall는 두 가지 의미를 포함한다. 하나는 말 그대로 벽과 또 하나는 적의 돌.ex, ey방향은 wall이고, ex, ey의 반대 방향은 reverse wall인 re_wall이다.
int count;
int fake, lfake; // fakethree에 관한 변수. 첫번째는 ex,ey방향, 두번
//보드 0
dx = dy = BOARDSIZE/2; // 중앙 배치
gotoxy(BOARDSIZE-1, BOARDSIZE/2); //그림을 표현하기 위해서는 기본 좌표(x, y)를 (x*2, y)로 표현
// 그림으로 중앙으로 배치.
}
int ThreeCheck2(int ex, int ey, int dx, int dy, int flag)
{
int three, count;
int x, y;
int c;
int re;
three = 0;
count = 0;
re = Exchange(turn);
x = ex;
y = ey;
/*
while(1){
if( Wall(dx+x, dy+y) == 0 && board[dy+y][dx+x] == EMPTY ){
board[dy+y][dx+x] = turn;
if( ThreeCheck(-1, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(0, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(-1, 0, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(1, -1, dx+x, dy+y, &c) ) count++;
board[dy+y][dx+x] = EMPTY;
break;
}else if( (Wall(dx+x, dy+y) == 0 && (board[dy+y][dx+x] != EMPTY || board[dy+y][dx+x] != turn) ) || Wall(dx+x, dy+y) == 1 ) break;
else{
x += ex;
y += ey;
continue;
}
}
*/
while(1){
if( (Wall(dx+x, dy+y) == 0 && board[dy+y][dx+x] == turn) ){
x += ex;
y += ey;
continue;
}else if( Wall(dx+x, dy+y) == 1 || (Wall(dx+x, dy+y) == 0 && board[dx+x][dy+y] == re) ) break;
board[dy+y][dx+x] = turn;
if( ThreeCheck(-1, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(0, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(-1, 0, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(1, -1, dx+x, dy+y, &c) ) count++;
board[dy+y][dx+x] = EMPTY;
break;
}
if( count >= 2 ) three--;
if( three < 0 ) return 1;
count = 0;
/*
if( ex == -1 && ey == -1 ) gotoxy(1, 18);
if( ex == 0 && ey == -1 ) gotoxy(1, 19);
if( ex == -1 && ey == 0 ) gotoxy(1, 20);
if( ex == 1 && ey == -1 ) gotoxy(1, 21);
*/
ex *= -1;
ey *= -1;
x = ex;
y = ey;
/*
while(1){
if( Wall(dx+x, dy+y) == 0 && board[dy+y][dx+x] == EMPTY ){
board[dy+y][dx+x] = turn;
if( ThreeCheck(-1, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(0, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(-1, 0, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(1, -1, dx+x, dy+y, &c) ) count++;
board[dy+y][dx+x] = EMPTY;
break;
}else if( (Wall(dx+x, dy+y) == 0 && (board[dy+y][dx+x] != EMPTY || board[dy+y][dx+x] != turn) ) || Wall(dx+x, dy+y) == 1 ) break;
else{
x += ex;
y += ey;
continue;
}
}
*/
while(1){
if( (Wall(dx+x, dy+y) == 0 && board[dy+y][dx+x] == turn) ){
x += ex;
y += ey;
continue;
}else if( Wall(dx+x, dy+y) == 1 || (Wall(dx+x, dy+y) == 0 && board[dx+x][dy+y] == re) ) break;
board[dy+y][dx+x] = turn;
if( ThreeCheck(-1, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(0, -1, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(-1, 0, dx+x, dy+y, &c) ) count++;
if( ThreeCheck(1, -1, dx+x, dy+y, &c) ) count++;
board[dy+y][dx+x] = EMPTY;
break;
}
if( count >= 2 )three--;
//printf(\"%d\", count);
if( three < 0 ) return 1;
return 0;
}
int ThreeCheck(int ex, int ey, int dx, int dy, int *flag) // 삼삼 금수 검사.
{
int x, y;
int empty, re_empty;
int reverse;
int fx, fy; // 첫번째 x, y 좌표; // ex, ey만큼 계속 이동해서 turn의 첫번째 자리
int lx, ly; // 마지막 x, y 좌표; // ex, ey의 반대 방향만큼 계속 이동해서 turn의 마지막 자리
int wall, re_wall; // wall는 두 가지 의미를 포함한다. 하나는 말 그대로 벽과 또 하나는 적의 돌.ex, ey방향은 wall이고, ex, ey의 반대 방향은 reverse wall인 re_wall이다.
int count;
int fake, lfake; // fakethree에 관한 변수. 첫번째는 ex,ey방향, 두번
소개글