本帖最后由 xsir317 于 2009-12-18 19:31:08 编辑

解决方案 »

  1.   

    刚刚退回一手棋的时候,我们完全地删除了那个棋子存在的记录,包括存储的字符串里的坐标,页面显示等等,这显然是丢失了很重要的数据,是很不合适的。我们无法再前进到刚刚那个局面了。为了解决这个问题,我们需要用另一个字符串记录我们的棋局“最远”的时候到过哪里。我的方法是:
    使用一个类似的字符串来保存我们最远到过哪里。当用户在棋盘上手动放棋子的时候,我们用这个字符串(起个名字吧,str_backup_record)来存储当前的strrecord;而当用户使用后退按钮时,只更新strrecord而不更新这个str_backup_record。这样,无论后退到哪里,我们始终有这个str_backup_record,这样就不会丢失任何数据。
      

  2.   

    我们再次修正用户点击棋盘的函数:
    var istone = 1;
    var icolor = 'black';
    var strrecord = ""; //这是用来记录的字符串
    $(document).ready(
                      function (){
      $("#board_main .row div").click(
             function (){
              if ($(this).attr("class") == 'blank')
                  {
                    $(this).html(istone);
                    $(this).attr("class",icolor);
                    strrecord += $(this).attr("id");//每次有效的落子,我们都把它记下来。
                    str_backup_record = strrecord;//加上这句,我们保存了棋盘的状态,防止回退造成的数据丢失。
                    if (icolor == "black")
                        {
                            icolor = "white";
                        }
                    else if (icolor == "white")
                        {
                            icolor = "black";
                        }
                    istone ++;
                }
              }
         );
    });
    这样,我们就可以制作前进按钮了。前进按钮是按照用户点击的顺序,在棋盘上再现落子顺序的操作。具体的来说,就是落下“下一颗棋子”。对比str_backup_record(用户落子的最终状态) 和strrecord(棋盘当前状态) ,我们可以拿到下一颗棋子的坐标。剩下的都很简单。
    代码如下:
    $("#next").click(function (){
    l_main = strrecord.length;//记录strrecord的长度
    l_backup = str_backup_record.length;//同理
    if (l_main != l_backup)//如果两个字符串不一致,那么还可以前进。
    {
    currnet_id = str_backup_record.substr(l_main,2);//老把戏,和后退的时候正好相反,对比两个字符串,获得下一手坐标
    //下面应该很熟悉
    $("#"+currnet_id).attr("class",icolor);
    $("#"+currnet_id).html(istone);
    strrecord += $("#"+currnet_id).attr("id");
    if (icolor == "black")
    {
    icolor = "white";
    }
    else if (icolor == "white")
    {
    icolor = "black";
    }
    istone ++;
       }
      });
      

  3.   

    都TJ了一个季度了好吧,判断胜负的代码在这里  http://blog.renjustudio.com/?p=28忙得要死