微信小程序(游戏)----五子棋(总结)

思路分析

  1. 绘制棋盘:

    计算横线和竖线的起始、终结点坐标,绘制棋盘网格;

  2. 棋盘交叉点坐标:

    计算每格宽高,循环保存棋盘所有点坐标,并初始化状态为0,表示此位置没有棋子,形成“棋盘坐标数组”;

  3. 获取点击位置的精确坐标:

    获取当前点击位置的横纵坐标,然后获取精确坐标方法:
    1、由于知道每格宽高,可以通过当前坐标计算出棋盘中离点击点最近坐标;
    2、通过循环“棋盘坐标数组”,查找最近坐标;

  4. 绘制棋子:

    通过获取的精准坐标,以该点为圆心,每格宽高的三分之一为半径绘制棋子;

  5. 判断持棋方:

    定义变量黑方棋子“落子坐标数组”和白方棋子“落子坐标数组”:
    定义变量isWho = true;表示黑色棋子方持棋,对弈进行反转(isWho = !isWho );
    注意:
    1、添加落子坐标的状态,1为黑色方在该坐标落子,-1为白色方在该坐标落子;
    2、同时将该坐标在“棋盘数组”删除,添加对应方的“落子坐标数组”;

  6. 判断胜利方:

    1、判断胜利,只需要判断当前棋子的“横向、纵向、右斜方、左斜方”这四个方向是否形成五子连珠;
    2、减少判断次数:必须在黑方棋子“落子坐标数组”和白方棋子“落子坐标数组”的length大于等于才开始检查;
    3、在检查过程中只要有一方满足五子连珠,则该方胜利,直接返回。

  7. 悔棋操作:

    1、由于对每方棋子进行了记录(黑方棋子“落子坐标数组”和白方棋子“落子坐标数组”),只需要判断当前悔棋方;
    2、对其“落子数组”的最后一个坐标删除,将其添加到“棋盘坐标数组”中;
    3、对棋盘进行重新绘制,双方棋子进行重新绘制;
    注意:
    在悔棋坐标的状态一定要初始化为0,代表该坐标为空,可以落子。

  8. 重新开始:

    对游戏进行初始化:棋盘、“棋盘坐标数组”、双方“落子坐标数组”、初始持棋方。

  9. AI操作:

    1、创建获取“胜利方法的数组”(棋盘中能够形成五连珠的所有方法);
    2、创建双方在每种方法的“落子个数数组”,初始化都为0;
    3、创建双方在每个坐标的“记分数组”,初始化都为0;
    4、对“棋盘坐标数组”(由于在落子时,已将落子坐标删除,所以此时剩余坐标为空位坐标)进行遍历;
    5、判断每个空位在“胜利方法的数组”中的重要性,如果人落子该坐标,形成五连珠:落子1个记10分,落子为2个记20分,落子3个记40分,落子4个记80分;如果AI在该坐标落子,形成五连珠:落子1个记15分,落子为2个记25分,落子3个记45分,落子4个记85分;
    6、统计完所有空位的得分后,获取其中最大分数的坐标,让其和人落子的最大分坐标进行比较,取最大分数的坐标,电脑在该坐标落子;
    7、反转人持棋。


注意

  1. 每次落子坐标的记录,方便悔棋,同时改变状态;
  2. 持棋方的判断,方便悔棋和落子;
  3. AI落子坐标的查找,需要通过“胜利方法的数组”来记分;
  4. 该AI的缺点不能判断该坐标形成的棋的类型(活三、死四等),导致很容易进行制造陷阱赢得胜利。