前几天用递归写汉诺塔程序,写了半天没写出来(呵呵,比较笨啊),后来在网上搜了下代码才恍然大悟。
今天下午上班闲着没事就写了个演示汉诺塔的移动过程的js,开始写的很顺利,就是在写完后,发现前一个圆盘没移动完,后一个圆盘就开始移动了。后来下班的时候在路上有了思路,用个标识符记录是第几步,然后用setTimeout进行等待(这个应该和线程差不多,工作以来一直没写过关于线程的程序,以前学的东西都忘了,所以想的时候费了点力气)。
代码比较粗糙,也没整理,有很多变量都是写死的,大家凑合看把。第一次发帖,大家轻喷,呵呵。
先输入圆盘的数量,点击确定,然后再点击move就可以了。
var R = ["00","11","22","33","44","55","66","77","88","99","AA","BB","CC","DD","EE","FF"];
var A = {ele:new Array(),top:500,left:200};
var B = {ele:new Array(),top:500,left:350};
var C = {ele:new Array(),top:500,left:500};
var amount;
var i=0;
$(function(){
$("#ofcourse").click(function(){
$(".pan").remove();
amount = $("#amount").val();
for(var i = amount; i > 0; i--){
var newDiv = $("<div id='"+i+"'>"+i+"</div>");
var color = "#" + getRandom() + getRandom() + getRandom();
var width = i*20+1;
var left = parseInt($(".A").css("left")) - (width-1)/2;
var top = parseInt($(".bottom").css("top")) - (amount-i+1)*13;
newDiv.addClass("pan");
newDiv.css({width:width+"px",left:left+"px",top:top+"px","background-color":color});
newDiv.appendTo("body");
A.ele.push(i);
}
A.top = parseInt($(".bottom").css("top")) - amount*13;
});
$("#mover").click(function(){
hnt(amount,A,B,C);
});
});
function getRandom(){
return R[parseInt(Math.random()*16)];
}
function hnt(n,a,b,c){
if(n==1){
setTimeout(function(){move(a,c)},i*3*500);
i++;
}
else{
hnt(n-1,a,c,b);
setTimeout(function(){move(a,c)},i*3*500);
i++;
hnt(n-1,b,a,c);
}
}
function move(x,y){
var xtop = x.top;
var ytop = y.top;
var xele = x.ele;
var yele = y.ele;
var moveEle = xele[xele.length-1];
x.top = xtop + 13;
y.top = ytop - 13;
x.ele.pop();
y.ele.push(moveEle);
$("#"+moveEle).animate({top:"190"},500).animate({left:y.left-moveEle*10},500).animate({top:y.top+"px"},500);
}

- 大小: 5.2 KB

- 大小: 5.5 KB
分享到:
相关推荐
2. **自动演示**:当用户选择自动演示模式时,使用递归算法计算出所有移动步骤,并依次执行这些移动,通过改变盘子的位置来模拟移动过程。递归算法基于汉诺塔问题的解决方案,即A柱子上的n个盘子移到C柱子,借助B...
在本案例中,我们使用jQuery这个流行的JavaScript库来实现汉诺塔的可视化动态演示。jQuery提供了一套简洁的API,使得操作DOM(文档对象模型)变得更加方便,从而可以轻松地创建交互式的网页应用。 首先,我们需要...
在这个"汉诺塔动画演示(html+js+css 鼠标拖拽以及点击按钮练习功能+手机端适配)"项目中,开发者使用了Web技术栈,包括HTML5、JavaScript、CSS和jQuery,来创建一个交互式的汉诺塔游戏。HTML5是网页的基础结构语言,...
在`JS汉诺塔源码.txt`文件中,你应该能找到类似这样的实现,通过对`hanoi`函数的调用来演示不同层数的汉诺塔,例如: ```javascript let numDiscs = 3; // 指定汉诺塔的层数 hanoi(numDiscs, 'A', 'C', 'B'); ``` ...