【分享】从零开始,开发一个五子棋棋谱记录系统(二) 本帖最后由 xsir317 于 2009-12-18 19:31:08 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 刚刚退回一手棋的时候,我们完全地删除了那个棋子存在的记录,包括存储的字符串里的坐标,页面显示等等,这显然是丢失了很重要的数据,是很不合适的。我们无法再前进到刚刚那个局面了。为了解决这个问题,我们需要用另一个字符串记录我们的棋局“最远”的时候到过哪里。我的方法是:使用一个类似的字符串来保存我们最远到过哪里。当用户在棋盘上手动放棋子的时候,我们用这个字符串(起个名字吧,str_backup_record)来存储当前的strrecord;而当用户使用后退按钮时,只更新strrecord而不更新这个str_backup_record。这样,无论后退到哪里,我们始终有这个str_backup_record,这样就不会丢失任何数据。 我们再次修正用户点击棋盘的函数: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 ++; } }); 都TJ了一个季度了好吧,判断胜负的代码在这里 http://blog.renjustudio.com/?p=28忙得要死 请教一个php小问题 请教南京2年工作经验php程序员的工资待遇大概有多少,谢谢! 想去上海培训php,有没有培训过的的前辈,推荐下 请问什么叫GPL开源? 这样的交叉分类如何设计数据库 求报修系统 PHP 编译的程序问题 急啊高手不要潜水了出来了 wordpress路由问题 各位大神们 请教一个 tinkphp的问题 请问win2003 是不是不支持php5.6了? 寻:靠谱php精英一头,欢迎推荐及自荐(求置顶) 哪位大哥对ecshop比较熟悉。帮我讲解一下这段代码
使用一个类似的字符串来保存我们最远到过哪里。当用户在棋盘上手动放棋子的时候,我们用这个字符串(起个名字吧,str_backup_record)来存储当前的strrecord;而当用户使用后退按钮时,只更新strrecord而不更新这个str_backup_record。这样,无论后退到哪里,我们始终有这个str_backup_record,这样就不会丢失任何数据。
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 ++;
}
});