前几天用递归写汉诺塔程序,写了半天没写出来(呵呵,比较笨啊),后来在网上搜了下代码才恍然大悟。
今天下午上班闲着没事就写了个演示汉诺塔的移动过程的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
分享到:
相关推荐
### 汉诺塔移动演示 #### 知识点概览 1. **汉诺塔问题简介** 2. **递归算法实现** 3. **C#语言基础** - 基本数据类型与变量声明 - 控制台输入输出 - 方法定义与调用 4. **面向对象编程概念** 5. **程序调试与...
- 用户可以模拟实际操作汉诺塔的过程,通过点击六个按钮(对应三根柱子和三个方向的移动)来移动圆盘。 - 界面应实时更新,显示当前的汉诺塔状态,以便用户能跟踪操作进度。 在"RealHanoi"这个文件中,很可能包含了...
动态演示汉诺塔的移动过程,用户可以选择塔的数量和设置塔移动的速度。
它允许用户输入圆盘的数量,然后开始自动或手动演示移动过程。调速功能使用户能够根据自己的理解速度调整演示的速度,这对于初学者来说非常有用,因为他们可以逐步观察每个步骤。 手动操作模式让玩家可以直接参与...
2)按“开始”菜单演示汉诺塔移动过程,按“结束”菜单结束汉诺塔演示过程。 3)在客户区正确显示当前移动图示过程。 4)在客户区正确显示当前移动总次数、各金盘的移动次数和各针上发生的移动次数。 按“单步演示”...
本项目“动态演示汉诺塔的自动搬运过程”旨在通过可视化的方式,帮助初级程序员理解和掌握递归思想以及图形界面开发技术。下面将详细阐述相关知识点。 首先,汉诺塔游戏的核心在于将所有盘子从一根柱子移动到另一根...
在这款程序中,OpenGL被用来绘制汉诺塔的图形界面,包括三个柱子和若干个盘子,使得用户能够直观地看到盘子的移动过程。利用OpenGL的绘图函数,程序员可以精确控制盘子和柱子的形状、颜色、位置等特性,实现动态的...
这些规则包括:每次只能移动一个圆盘,且移动过程中,较大的圆盘不能覆盖在较小的圆盘之上。看似简单的规则背后,隐藏着复杂且巧妙的策略。 汉诺塔游戏的魅力在于它的策略性。解决汉诺塔问题的最直接方法便是递归...
通过响应按钮点击事件,调用递归函数并更新界面状态,以展示汉诺塔问题的移动过程。 总的来说,汉诺塔问题的图形演示结合了递归算法、C++编程以及图形用户界面设计,为学习者提供了直观理解复杂问题解决策略的机会...
在这个项目中,AWT用于构建动画界面,展示盘子的移动过程。 4. **图形界面编程**:创建汉诺塔的动态演示需要对GUI编程有深入理解,包括布局管理器、事件监听和处理、组件的绘制等。在这个程序中,可能使用了Canvas...
2. **自动演示**:当用户选择自动演示模式时,使用递归算法计算出所有移动步骤,并依次执行这些移动,通过改变盘子的位置来模拟移动过程。递归算法基于汉诺塔问题的解决方案,即A柱子上的n个盘子移到C柱子,借助B...
在这个问题中,我们通常面对的是三根柱子和一系列大小递减的圆盘,初始时所有圆盘按大小顺序堆叠在一根柱子上,目标是将它们全部移动到另一根柱子上,且在移动过程中,任何时刻都不允许将较大的圆盘放在较小的圆盘之...
描述中的"给出了计算结果和塔盘移动过程"意味着这个源码不仅实现了汉诺塔算法,还可能包含可视化界面,能够动态显示每个步骤,帮助初学者更好地理解这个过程。通过这样的可视化演示,用户可以直观地看到每个圆盘的...
图示移动过程的汉诺塔程序,盘子数量和移动数独可选择
汉诺塔游戏是一种经典的逻辑谜题,源自印度的古老传说,目标是将一叠大小不一的圆盘从一根柱子移动到另一根柱子,每次只能移动一个圆盘,并且大盘子不能位于小盘子之上。在这个过程中,还需要借助第三个柱子作为临时...
在实际编码过程中,理解递归的思想至关重要,这不仅适用于汉诺塔问题,还广泛应用于许多其他算法和数据结构的实现,如树的遍历、图的搜索等。通过这个过程,你不仅能学习到C语言的基础,还能深入理解递归的概念和...
汉诺塔演示程序结合了二叉树的演示动画,为学习和理解这两种计算机科学基础知识提供了一个生动直观的方式。首先,我们来深入探讨一下汉诺塔问题及其解决方案。 汉诺塔是一个经典的递归问题,由三个柱子和一堆大小...
汉诺塔动画演示则是将这一逻辑过程通过可视化的方式展示出来,帮助用户更好地理解和学习汉诺塔问题的解决策略。 在使用Visual Studio 2013开发汉诺塔动画演示时,开发者可能采用了C#或C++等编程语言,利用Windows ...
汉诺塔运行过程的图形演示 下载代码直接可以运行