用一个19*19的二维数组表示棋盘
第一手下在[4,4];第二手可能下在[3,3]或[6,3];若下在[3,3],第三手可能在[4,3]应,若下在[6,3],第三手可能在[5,3]应。如此形成一棵树
想录入定式棋谱并保存,做到第一手下在[4,4]时能提示之后可能的两点[3,3],[6,3],第二手下在[3,3]时能提示下一点[4,3],在库里该用什么样的结构保存?换句话说,就如何最有效的保存从第一手开始的每一手棋的坐标?原先想下第一手时往字段里存字符串'[4,4]',第二手时存[4,4];[3,3]和[4,4];[6,3]依次类推,如此用户下第一手[4,4]时用like '[4,4]%' 且 步数 = 2 就能把第二手的几种变化取出来。可是感觉这样的办法有点儿笨,一手棋就要五六个字节,二十手开外每手棋就要存100多字节了。想来想去没想到更有效的方法。又想有没有一种算法能够对每手棋的坐标和步数进行运算,且保证不重复。如:第二手[3,3]和第一手[4,4]
运算出一个结果(如字符串s93cseddddfsdf),下第三手时[4,3]和之前的s93cseddddfsdf运算,能得出zzd999fdddssd。如此只需要往库里存这些运算出来的值,读取时每下一手也将坐标值进行这样的运算,拿结果跟库里的值匹配。又不知道什么样的运算能达到这样的效果不知道大家有没有好的办法?

解决方案 »

  1.   

    你可以参考别人的格式,特别是tom和新浪的
      

  2.   

    tom和新浪的?他们什么格式?
      

  3.   

    chess(id int,color white||black,locationx int,locationy int,iskilled boolean,sequence int,player string,matchename string,date date,address string)
      

  4.   

    java_augur:
    我的意思不是要记录棋谱,而是记录定式,即一方下一手棋后另一方可能的几个应手。也就是说应该有一个字段能记录该步棋之前棋盘上的所有棋,作为找出下一手的条件,而不只是一步
      

  5.   

    可以在字段里再加上(定式 string)
    然后你就应该利用有效的查询手段,来完成你的需要。
    数据库不可能为你实现算法的。
    必须分清楚这个界限。