本帖最后由 hetengfei_ 于 2012-02-06 10:41:56 编辑

解决方案 »

  1.   

    可走点() 做成一个Function , 通过棋子坐在坐标,返回可走坐标。如 :function 可走点(){
      var r = [];
      r.push([this.坐标.x + 3,this.坐标.x + 1])
      r.push([this.坐标.x + 2,this.坐标.x + 2])
      return r
    }
      

  2.   

    这样的话
      每个棋子, 先调用 [function 可走点()] ,
      [function 可走点()]又要 “读取整个棋盘的布局”,才对知道可走点!
      “读取整个棋盘的布局 ”可能又要去遍历 所有棋子的座标 才行。
      
    这样设计,游戏就相当混乱!
      效率会底下。
      给下面的智能下棋带来了很多麻凡!
      

  3.   

    不太了解下棋的算法,基于面向对象的设计原则,提出一些设想,供 LZ 参考:
    棋盘作为基本对象,提供对所有棋子的访问和操作方法,具体实现时可能不一定由棋盘对象完全实现,而是适当调用棋子对象相对应的方法,此为封装设计;
    棋子当然也应当设计为对象,但 LZ 的设计试乎想保留一些冗余(如 #1 所诉),从设计逻辑的复杂性来说,如不是为性能考虑应当避免此类冗余。
    至于说遍历的效率问题,作为棋盘这样大小的一个数组,其实是非常小的。如果不是算法设计有问题,远没有到要考虑遍历的效率的程度。如果 LZ 认为有必要考虑,可以参考数据库管理的模式,为要反复计算的结果建立索引,在发生相应操作时,实时更新索引中的值。但索引的设计一定要合理,否则可能更新索引付出的代价更大。