zoukankan      html  css  js  c++  java
  • 跳棋算法策略

     棋子跳动算法
    该算法在ChessBoard.CanJumpTo函数中实现

     找出一个棋子所有可走位置,并建成数据结构“图”的形式
    这个算法有点象图的广度优先遍历算法。文字说明如下:
    1.把当前棋子坐标加入“图”中。
    2.从当前棋子位置出发,从六个方向查找棋子可跳的位置,
    3.如果第2步找到坐标没有加入“图”中,就把这些坐标加入“图”中去。
    4.从第3步刚加入“图”中的坐标出发,继续执行第2步。一直到没有坐标加入“图”中为止。
     最短路径搜索
    当用户指定下棋位置以后,还要计算出棋子从当前位置到目标位置的最短路径,为游戏的播放棋子走动动画作准备。这个算法还是有点象图的广度优先遍历算法,文字说明如下:
    1.把所有坐标的“权值”设为-1
    2.把当前棋子坐标的“权值”设为0。
    3.从当前棋子位置出发,查找棋子可跳的位置。
    3.如果第3步找到坐标没有“权值”为-1,就把这些坐标的“权值”在上一坐标的基础上加1。
    4.从第4步刚设定“权值”的坐标出发,继续执行第2步。一直到所有坐标都设定“权值”为止。
    5.从目标位置开始,倒退着开始查找,每次查找的位置应该是“权值”比当前位置减小1的坐标。一直找到起始位置。这样就找到最短路径了。
    这些的都是数据结构基础知识,有点抽象,只要理解加想象就没有问题了。哦,上次“平安”考试中有一个题目:什么是前序遍厉,什么是后序遍厉,我真的记不住。数据结构的知识能理解能运用,考试却不能得分,冤呀。

    5. 计算机下棋策略

    这是最难设计的部分,人与计算机的思维方式完全不同,如何把人的下棋思路表示计算机可运算的数据结构,这是比较困难的,要不然人工智能这么多年一直没有突破性进展呢?
     两坐标间距离计算方法

    计算机下棋策略主要有以下几个方面:

    • 计算出己方所有可能走法
    • 选出一个跳得最远(尽快让自己获胜)的棋子和走法。
    • 选择一个最可能阻碍对方前行的棋子和走法。
    • 尽可能选择可为下一步提供最有利条件的棋子和走法
    • 对以上几项做综合分析,得出较好的走法。
  • 相关阅读:
    bzoj 3572 [Hnoi2014]世界树 (虚树+树形dp)
    2018 计算之道初赛第二场 阿里巴巴的手机代理商(困难)(反向可持久化Trie)
    hdu 3089 (快速约瑟夫环)
    Codeforces Round #479 (Div. 3)
    牛客练习赛17
    BNU校赛总决赛J 小白兔小灰兔 相交计算几何模板
    2018BNU校赛总决赛
    Educational Codeforces Round 43 (Rated for Div. 2) ABCDE
    Codeforces Round #478 (Div. 2) ABCDE
    牛客练习赛 16
  • 原文地址:https://www.cnblogs.com/whwywzhj/p/6224372.html
Copyright © 2011-2022 走看看