01 privateint[] catchChessModle(intx, inty, byte[][] chessmanArray) {
02 // 索引0:记录此位置的棋子可产生的最大威胁值或优势值
03 // 索引1:对应下棋横坐标
04 // 索引2:对应下棋横坐标
05 intposition[] = newint[3];
06 五子棋人机对战// 创建以被捕捉棋子为中心的四个方向形成的棋型
07 // 以参数点为中心点,保存四个方向的棋型,方向分别为 — | /
08 intmodel[][] = newint[4][11];
09 for (inttmp[] : model) { // 遍历数组
10 Arrays.fill(tmp, boundary); // 将数组填充为边界常量
11 }
12 // 把参数点放入每行的中心部位
13 model[0][5] = model[1][5] = model[2][5] = model[3][5] = chessmanArray[x][y];
14 // 以该棋子为中心,向两边走5步
15 五子棋人机对战for (inti = 1; i<= 5; i++) {
16 // 水平方向棋型
17 if (x - i>= 0) { // 如果没有走出边界
18 model[0][5 - i] = chessmanArray[x - i][y]; // 将左侧棋子记录到水平棋型当中
19 }
20 if (x + i<= 14) { // 如果没有走出边界
21 model[0][5 + i] = chessmanArray[x + i][y]; // 将右侧棋子记录到水平棋型当中
22 }
23
24 // 垂直方向棋型
25 if (y - i>= 0) { // 如果没有走出边界
26 model[1][5 - i] = chessmanArray[x][y - i]; // 将上方棋子记录到垂直棋型当中
27 }
28 if (y + i<= 14) { // 如果没有走出边界
29 model[1][5 + i] = chessmanArray[x][y + i]; // 将下方棋子记录到垂直棋型当中
30 }
31
32 // 反斜杠方向棋型
33 if (x - i>= 0 &&y + i<= 14) { // 如果没有走出边界
34 // 将左下方棋子记录到反斜棋型当中
35 model[2][5 - i] = chessmanArray[x - i][y + i];
36 }
37 if (x + i<= 14 &&y - i>= 0) { // 如果没有走出边界
38 // 将右上方棋子记录到反斜棋型当中
39 model[2][5 + i] = chessmanArray[x + i][y - i];
40 }
41
42 // 正斜杠方向棋型
43 五子棋人机对战if (x - i>= 0 &&y - i>= 0) { // 如果没有走出边界
44 // 将左上方棋子记录到正斜棋型当中
45 model[3][5 - i] = chessmanArray[x - i][y - i];
46 }
47 if (x + i<= 14 &&y + i<= 14) { // 如果没有走出边界
48 // 将右下方棋子记录到正斜棋型当中
49 model[3][5 + i] = chessmanArray[x + i][y + i];
50 }
51 }
52 intscore = 0; // 记录最大评分(威胁值)
53 intdirection = -1; // 记录最大评分的方向(model数组一维下标)
54 intindex = 0; // 记录坐标偏移量(judgeModle()方法给予的破解位置)
55 for (inti = 0; i<model.length; i++) { // 遍历棋型数组
56 intgetResult[] = judgeModle(model[i]); // 针对此方向棋型,给予破解方案
57 if (score<getResult[1]) { // 如果出现比当前最大威胁值还要大的威胁
58 score = getResult[1]; // 更新最大分(威胁值)
59 // 被捕捉的棋子在模型中的索引为5,getResult[0]为破解方案中的下棋索引位置
60 // getResult[0] - 5 = 破解位置距离被捕捉的棋子的索引位置
61 index = getResult[0] - 5;
62 direction = i; // 记录此棋型的方向
63 }
64 }
65 switch (direction) { // 判断最大威胁值所在的方向
66 case
0: // 如果是水平方向
67 x += index; // 下棋的位置是原位置向右(或向左)偏移index的值
68 break;
69 case 1: // 如果是垂直方向
70 y += index; // 下棋的位置是原位置向下(或向上)偏移index的值
71 break;
72 case 2: // 如果是反斜方向
73 x += index; // 下棋的位置是原位置向右(或向左)偏移index的值
74 y -= index; // 下棋的位置是原位置向上(或向下)偏移index的值
75 break;
76 case 3: // 如果是正斜方向
77 x += index; // 下棋的位置是原位置向右(或向左)偏移index的值
78 y += index; // 下棋的位置是原位置向下(或向上)偏移index的值
79 break;
80 }
81 position[0] = score; // 记录此棋子的最大评分(威胁值)
82 position[1] = x; // 记录对应下棋横坐标
83 position[2] = y; // 记录对应下棋纵坐标
84
85 returnposition; // 返回结果数组
86 }