棋子跳动算法
该算法在ChessBoard.CanJumpTo函数中实现
找出一个棋子所有可走位置,并建成数据结构“图”的形式
这个算法有点象图的广度优先遍历算法。文字说明如下:
1.把当前棋子坐标加入“图”中。
2.从当前棋子位置出发,从六个方向查找棋子可跳的位置,
3.如果第2步找到坐标没有加入“图”中,就把这些坐标加入“图”中去。
4.从第3步刚加入“图”中的坐标出发,继续执行第2步。一直到没有坐标加入“图”中为止。
最短路径搜索
当用户指定下棋位置以后,还要计算出棋子从当前位置到目标位置的最短路径,为游戏的播放棋子走动动画作准备。这个算法还是有点象图的广度优先遍历算法,文字说明如下:
1.把所有坐标的“权值”设为-1
2.把当前棋子坐标的“权值”设为0。
3.从当前棋子位置出发,查找棋子可跳的位置。
3.如果第3步找到坐标没有“权值”为-1,就把这些坐标的“权值”在上一坐标的基础上加1。
4.从第4步刚设定“权值”的坐标出发,继续执行第2步。一直到所有坐标都设定“权值”为止。
5.从目标位置开始,倒退着开始查找,每次查找的位置应该是“权值”比当前位置减小1的坐标。一直找到起始位置。这样就找到最短路径了。
这些的都是数据结构基础知识,有点抽象,只要理解加想象就没有问题了。哦,上次“平安”考试中有一个题目:什么是前序遍厉,什么是后序遍厉,我真的记不住。数据结构的知识能理解能运用,考试却不能得分,冤呀。
5. 计算机下棋策略
这是最难设计的部分,人与计算机的思维方式完全不同,如何把人的下棋思路表示计算机可运算的数据结构,这是比较困难的,要不然人工智能这么多年一直没有突破性进展呢?
两坐标间距离计算方法
计算机下棋策略主要有以下几个方面:
- 计算出己方所有可能走法
- 选出一个跳得最远(尽快让自己获胜)的棋子和走法。
- 选择一个最可能阻碍对方前行的棋子和走法。
- 尽可能选择可为下一步提供最有利条件的棋子和走法
- 对以上几项做综合分析,得出较好的走法。