五子棋人机对战(五子棋人机对战网站)

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    }

转载请说明出处 内容投诉内容投诉
九幽软件 » 五子棋人机对战(五子棋人机对战网站)