/**
* @author yeeku.H.lee kongyeeku@163.com
* @version 1.0
* <br>Copyright (C), 2005-2008, yeeku.H.Lee
* <br>This program is protected by copyright laws.
* <br>Program Name:
* <br>Date:
*/
public class ComputerMove
{
private int BOARD_SIZE = 15;
public static int[] max = new int[2];
//分析棋盘,判断电脑下棋位置
public void position()
{
FiveStone fs = new FiveStone();
int[][][] computer = new int [BOARD_SIZE][BOARD_SIZE][4];
int[][][] player = new int [BOARD_SIZE][BOARD_SIZE][4];
//纪录电脑某点的攻击性
for (int i = 0 ; i < BOARD_SIZE ; i++ )
{
for (int j = 0 ; j < BOARD_SIZE ; j++ )
{
if (fs.board[i][j] == 0)
{
int k = j;
int m = 2;
int r = 0;
while (k != 0)
{
k--;
if (fs.board[i][k] == 2)
{
if ((k - 1 == -1) || fs.board[i][k - 1] == 1)
{
computer[i][j][0] -= m - 1;
}
computer[i][j][0] += m;
r = computer[i][j][0];
m += 11;
}
else break;
}
k = j;
m = 2;
while (k != BOARD_SIZE - 1 )
{
k++;
if (fs.board[i][k] == 2)
{
if ((k + 1 == BOARD_SIZE) || fs.board[i][k + 1] == 1)
{
computer[i][j][0] -= m - 1;
}
computer[i][j][0] += m;
m += 11;
}
else break;
}
if (r > 1 && computer[i][j][0] - r > 1)
{
computer[i][j][0] += m - 1;
}
k = i;
m = 2;
r = 0;
while (k != 0)
{
k--;
if (fs.board[k][j] == 2)
{
if ((k - 1 == -1) || fs.board[k - 1][j] == 1)
{
computer[i][j][1] -= m - 1;
}
computer[i][j][1] += m;
r = computer[i][j][1];
m += 11;
}
else break;
}
k = i;
m = 2;
while (k != BOARD_SIZE - 1 )
{
k++;
if (fs.board[k][j] == 2)
{
if ((k + 1 == BOARD_SIZE) || fs.board[k + 1][j] == 1)
{
computer[i][j][1] -= m - 1;
}
computer[i][j][1] += m;
m += 11;
}
else break;
}
if (r > 1 && computer[i][j][0] - r > 1)
{
computer[i][j][1] += m - 1;
}
int n = j;
k = i;
m = 2;
r = 0;
while (k != 0 && n != 0)
{
k--;
n--;
if (fs.board[k][n] == 2)
{
if (k - 1 == -1 || n - 1 == 0-1 || fs.board[k - 1][n - 1] == 1)
{
computer[i][j][2]-= m - 1;
}
computer[i][j][2] += m;
r = computer[i][j][2];
m += 11;
}
else break;
}
k = i;
n = j;
m = 2;
while (k != BOARD_SIZE - 1 && n != BOARD_SIZE - 1)
{
k++;
n++;
if (fs.board[k][n] == 2)
{
if (k + 1 == BOARD_SIZE || n + 1 == BOARD_SIZE || fs.board[k + 1][n + 1] == 1)
{
computer[i][j][2] -= m - 1;
}
computer[i][j][2] += m;
m += 11;
}
else break;
}
if (r > 1 && computer[i][j][0] - r > 1)
{
computer[i][j][2] += m - 1;
}
k = i;
n = j;
m = 2;
r = 0;
while (k != 0 && n != BOARD_SIZE - 1)
{
k--;
n++;
if (fs.board[k][n] == 2)
{
if (k - 1 == -1 || n + 1 == BOARD_SIZE || fs.board[k - 1][n + 1] == 1)
{
computer[i][j][3] -= m - 1;
}
computer[i][j][3] += m;
r = computer[i][j][3];
m += 11;
}
else break;
}
k = i;
n = j;
m = 2;
while (k != BOARD_SIZE - 1 && n != 0)
{
k++;
n--;
if (fs.board[k][n] == 2)
{
if (k + 1 == BOARD_SIZE || n - 1 == -1 || fs.board[k + 1][n - 1] == 1)
{
computer[i][j][3] -= m - 1;
}
computer[i][j][3] += m;
m += 11;
}
else break;
}
if (r > 1 && computer[i][j][0] - r > 1)
{
computer[i][j][3] += m - 1;
}
}
}
}
//纪录棋盘玩家某点的危险性
for (int i = 0 ; i < BOARD_SIZE ; i++ )
{
for (int j = 0 ; j < BOARD_SIZE ; j++ )
{
if (fs.board[i][j] == 0)
{
int k = j;
int m = 2;
int r = 0;
while (k != 0)
{
k--;
if (fs.board[i][k] == 1)
{
if ((k - 1 == -1) || fs.board[i][k - 1] == 2)
{
player[i][j][0] -= m - 1;
}
player[i][j][0] += m;
r = player[i][j][0];
m += 11;
}
else break;
}
k = j;
m = 2;
while (k != BOARD_SIZE - 1 )
{
k++;
if (fs.board[i][k] == 1)
{
if ((k + 1 == BOARD_SIZE) || fs.board[i][k + 1] == 2)
{
player[i][j][0] -= m - 1;
}
player[i][j][0] += m;
m += 11;
}
else break;
}
if (r > 1 && player[i][j][0] - r > 1)
{
player[i][j][0] += m - 1;
}
k = i;
m = 2;
r = 0;
while (k != 0)
{
k--;
if (fs.board[k][j] == 1)
{
if ((k - 1 == -1) || fs.board[k - 1][j] == 2)
{
player[i][j][1] -= m - 1;
}
player[i][j][1] += m;
r = player[i][j][1];
m += 11;
}
else break;
}
k = i;
m = 2;
while (k != BOARD_SIZE - 1 )
{
k++;
if (fs.board[k][j] == 1)
{
if ((k + 1 == BOARD_SIZE) || fs.board[k + 1][j] == 2)
{
player[i][j][1] -= m + 1;
}
player[i][j][1] += m;
m += 11;
}
else break;
}
if (r > 1 && player[i][j][0] - r > 1)
{
player[i][j][1] += m - 1;
}
int n = j;
k = i;
m = 2;
r = 0;
while (k != 0 && n != 0)
{
k--;
n--;
if (fs.board[k][n] == 1)
{
if (k - 1 == -1 || n - 1 == -1 || fs.board[k - 1][n - 1] == 2)
{
player[i][j][2] -= m - 1;
}
player[i][j][2] += m;
r = player[i][j][2];
m += 11;
}
else break;
}
k = i;
n = j;
m = 2;
while (k != BOARD_SIZE - 1 && n != BOARD_SIZE - 1)
{
k++;
n++;
if (fs.board[k][n] == 1)
{
if (k + 1 == BOARD_SIZE || n + 1 == BOARD_SIZE || fs.board[k + 1][n + 1] == 2)
{
player[i][j][2] -= m - 1;
}
player[i][j][2] += m;
m += 11;
}
else break;
}
if (r > 1 && player[i][j][0] - r > 1)
{
player[i][j][2] += m - 1;
}
k = i;
n = j;
m = 2;
r = 0;
while (k != 0 && n != BOARD_SIZE - 1)
{
k--;
n++;
if (fs.board[k][n] == 1)
{
if (k - 1 == -1 || n + 1 == BOARD_SIZE || fs.board[k - 1][n + 1] == 2)
{
player[i][j][3] -= m - 1;
}
player[i][j][3] += m;
r = player[i][j][3];
m += 11;
}
else break;
}
k = i;
n = j;
m = 2;
while (k != BOARD_SIZE - 1 && n != 0)
{
k++;
n--;
if (fs.board[k][n] == 1)
{
if (k + 1 == BOARD_SIZE || n - 1 == -1 || fs.board[k + 1][n - 1] == 2)
{
player[i][j][3] -= m - 1;
}
player[i][j][3] += m;
m += 11;
}
else break;
}
if (r > 1 && player[i][j][0] - r > 1)
{
player[i][j][3] += m - 1;
}
}
}
}
//合并第三维的数据
int[][][] pScore = new int[BOARD_SIZE][BOARD_SIZE][1];
int[][][] cScore = new int[BOARD_SIZE][BOARD_SIZE][1];
for (int i = 0 ; i < BOARD_SIZE ; i++)
{
for ( int j = 0 ; j < BOARD_SIZE ; j++)
{
for (int k = 0 ; k < 4 ; k++ )
{
pScore[i][j][0] += player[i][j][k];
评论1
最新资源