正文
01
思路
我没有选择专业的五子棋棋型,用我自己的逻辑(初高中玩五子棋的方法),去实现简单的人机对战。
首先因为要计算五子棋每一步的分数,那么你就要分析每一步形成的棋盘,以下图为例:
当你即将在红色方框区域内落子时,通过数据处理获取四个方向的棋子存储在数组里面,然后就是分析这个数组属于那种棋型。
以横向为例:
row相当于上图红色矩形区域的行坐标
col 相当于上图红色矩形区域的列坐标
player是这个位置即将落子的颜色,-1黑子 1 白子
int Game_score(int row, int col, int player) //player = -1黑子 player = 1 白子
{
char arr[4][9] = { 0 }; //存放四个方向的棋子
int grade[4]; //存放四个方向的总分
int begin = 0, end = 0;
/*========左右========*/
//从Map[row][col]处往左找四个棋子,遇到边界结束得到左边落子数量
//从Map[row][col]处往右找四个棋子,遇到边界结束得到右边落子数量
for (int index = 1; index <= 4; index++)
{
//往左找
if (col - index >= 0)
{
begin = index;
}
//往右找
if (col + index < 15)
{
end = index;
}
}
for (int temp = 0, index = col - begin; index <= col + end; index++, temp++)
{
arr[0][temp] = Map[row][index]; //将Map[row][col]附近九个位置的棋子放入到arr里面分析
}
arr[0][begin] = player; //将预测的落子位置由0