<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<script type="text/javascript" >
var input={};
input.A = [8,7,6,5,4,3,2,1];
input.B = [];
input.C=[];
input.from = "A";
input.target="C";
var currentMove = 0;
var moves = [];
function Hanoi(param){
var fromArray;
if("A" === param.from){
fromArray = param.A;
}else if("B" === param.from){
fromArray = param.B;
}else if("C" === param.from){
fromArray = param.C;
}
var step1From = param.from;
var step1Target;
if("A" === param.from && "B" === param.target){
step1Target = "C";
}else if("A" === param.from && "C" === param.target){
step1Target = "B";
}else if("B" === param.from && "C" === param.target){
step1Target = "A";
}else if("B" === param.from && "A" === param.target){
step1Target = "C";
}else if("C" === param.from && "A" === param.target){
step1Target = "B";
}else if("C" === param.from && "B" === param.target){
step1Target = "A";
}
var step3From = step1Target;
var step3Target = param.target ;
if(fromArray.length == 1){
console.log("move " + fromArray[0] + " from " + param.from + " to " + param.target);
var moving = {};
moving.index = fromArray[0];
moving.from = param.from;
moving.target = param.target;
moves.push(moving);
return;
}else if(fromArray.length > 1){
//将7,6,5,4,3,2,1从A挪到B
var step1Param = {};
step1Param.A = [];
step1Param.B = [];
step1Param.C=[];
step1Param.from = step1From;
step1Param.target= step1Target;
var step1FromArray;
if("A" === param.from){
step1FromArray = step1Param.A;
}else if("B" === param.from){
step1FromArray = step1Param.B;
}else if("C" === param.from){
step1FromArray = step1Param.C;
}
for(var i = 1;i<fromArray.length;i++){
step1FromArray.push(fromArray[i]);
}
Hanoi(step1Param);
//将8从A挪到C
console.log("move " + fromArray[0] + " from " + param.from + " to " + param.target);
var moving = {};
moving.index = fromArray[0];
moving.from = param.from;
moving.target = param.target;
moves.push(moving);
//将7,6,5,4,3,2,1从B挪到C
var step3Param = {};
step3Param.A = [];
step3Param.B = [];
step3Param.C=[];
step3Param.from = step3From;
step3Param.target= step3Target;
var step3FromArray;
if("A" === param.from && "B" === param.target){
step3FromArray = step3Param.C;
}else if("A" === param.from && "C" === param.target){
step3FromArray = step3Param.B;
}else if("B" === param.from && "C" === param.target){
step3FromArray = step3Param.A;
}else if("B" === param.from && "A" === param.target){
step3FromArray = step3Param.C;
}else if("C" === param.from && "A" === param.target){
step3FromArray = step3Param.B;
}else if("C" === param.from && "B" === param.target){
step3FromArray = step3Param.A;
}
for(var i = 1;i<fromArray.length;i++){
step3FromArray.push(fromArray[i]);
}
Hanoi(step3Param);
}
}
</script>
<script type="text/javascript" src="jquery.min.js" ></script>
<script type="text/javascript" >
$(document).ready(function(){
$("#test").click(function(){
testClicking();
});
$("#moveB").click(function(){
moveClicking();
});
var boxWidth = $("#box").width();
var boxHeight = $("#box").height();
var boxLeft = $("#box").offset().left;
var boxTop =$("#box").offset().top;
var groundWidth = $("#ground").width();
var groundHeight = $("#ground").height();
var newGroundLeft = (boxWidth - groundWidth)/2 + boxLeft;
var newGroundTop = (boxHeight - groundHeight) + boxTop;
$("#ground").offset({"left":newGroundLeft,"top":newGroundTop});
var groundLeft = $("#ground").offset().left;
var groundTop =$("#ground").offset().top;
var cylinderWidth = $(".cylinder").width();
var cylinderHeight = $(".cylinder").height();
var newCylinderALeft = (groundWidth/3 - cylinderWidth)/2 + groundLeft;
var newCylinderBLeft = (groundWidth/3 - cylinderWidth)/2 + groundLeft + groundWidth/3;
var newCylinderCLeft = (groundWidth/3 - cylinderWidth)/2 + groundLeft + groundWidth/3 + groundWidth/3;
var newCylinderTop = groundTop - cylinderHeight;
$("#cylinderA").offset({"left":newCylinderALeft,"top":newCylinderTop});
$("#cylinderB").offset({"left":newCylinderBLeft,"top":newCylinderTop});
$("#cylinderC").offset({"left":newCylinderCLeft,"top":newCylinderTop});
var round1Width = $("#round1").width();
var round2Width = $("#round2").width();
var round3Width = $("#round3").width();
var round4Width = $("#round4").width();
var round5Width = $("#round5").width();
var round6Width = $("#round6").width();
var round7Width = $("#round7").width();
var round8Width = $("#round8").width();
var cylinderA = $("#cylinderA").offset().left;
var newRound1Left =(cylinderWidth - round1Width)/2 +cylinderA;
var newRound1Top = groundTop - 15 * 8;
$("#round1").offset({"left":newRound1Left,"top":newRound1Top});
var newRound2Left =(cylinderWidth - round2Width)/2 +cylinderA;
var newRound2Top = groundTop - 15 * 7;
$("#round2").offset({"left":newRound2Left,"top":newRound2Top});
var newRound3Left =(cylinderWidth - round3Width)/2 +cylinderA;
var newRound3Top = groundTop - 15 * 6;
$("#round3").offset({"left":newRound3Left,"top":newRound3Top});
var newRound4Left =(cylinderWidth - round4Width)/2 +cylinderA;
var newRound4Top = groundTop - 15 * 5;
$("#round4").offset({"left":newRound4Left,"top":newRound4Top});
var newRound5Left =(cylinderWidth - round5Width)/2 +cylinderA;
var newRound5Top = groundTop - 15 * 4;
$("#round5").offset({"left":newRound5Left,"top":newRound5Top});
var newRound6Left =(cylinderWidth - round6Width)/2 +cylinderA;
var newRound6Top = groundTop - 15 * 3;
$("#round6").offset({"left":newRound6Left,"top":newRound6Top});
var newRound7Left =(cylinderWidth - round7Width)/2 +cylinderA;
var newRound7Top = groundTop - 15 * 2;
$("#round7").offset({"left":newRound7Left,"top":newRound7Top});
var newRound8Left =(cylinderWidth - round8Width)/2 +cylinderA;
var newRound8Top = groundTop- 15 * 1;
$("#round8").offset({"left":newRound8Left,"top":newRound8Top});
});
var sizeA = 8;
var sizeB = 0;
var sizeC = 0;
function move(index,from,target){
var cylinderA = $("#cylinderA").offset().left;
var cylinderB = $("#cylinderB").offset().left;
var cylinderC = $("#cylinderC").offset().left;
var cylinderWidth = $(".cylinder").width();
var roundWidth = $("#round" + index).width();
var groundTop =$("#ground").offset().top;
var newLeft = 0;
var newRoundTop = 0;
if("A" === from){
sizeA--;
}else if("B" === from){
sizeB--;
}else if("C" === from){
sizeC--;
}
if("A" === target){
newLeft =(cylinderWidth - roundWidth)/2 +cylinderA - 9;
newRoundTop = groundTop- 15 * (sizeA + 1) - 9;
sizeA++;
}else if("B" === target){
newLeft =(cylinderWidth - roundWidth)/2 +cylinderB - 9;
newRoundTop = groundTop- 15 * (sizeB+1) - 9;
sizeB++;
}else if("C" === target){
newLeft =(cylinderWidth - roundWidth)/2 +cylinderC - 9;
newRoundTop = groundTop- 15 * (sizeC + 1) - 9;
sizeC++;
}
$("#round" + index).animate({top:"150px"},200);
$("#round" + index).animate({left: newLeft + "px"},200);
$("#round" + index).animate({top:newRoundTop + "px"},5000,"swing",function(){moveClicking();});
}
function testClicking(){
currentMove = 0;
moves = [];
Hanoi(input);
alert("装载完了");
}
function moveClicking(){
if(currentMove<moves.length){
var moving = moves[currentMove];
move(moving.index,moving.from,moving.target);
currentMove ++;
}else{
alert("播放完毕");
}
}
</script>
<style type="text/css" >
div{
position: absolute;
}
.box{
border:1px solid #CCC;
width:1000px;
height:500px;
}
#ground{
background-color: #f00;
width:600px;
height:30px;
}
.cylinder{
width:20px;
height:120px;
background-color:#ca6;
}
.round{
height:15px;
border-radius:2px;
}
#round1{
width:40px;
background-color:#AB71CF;
}
#round2{
width:56px;
background-color:#EE3335;
}
#round3{
width:72px;
background-color:#FD6846;
}
#round4{
width:88px;
background-color:#B0E478;
}
#round5{
width:104px;
background-color:#FED61B;
}
#round6{
width:120px;
background-color:#FD6547;
}
#round7{
width:136px;
background-color:#E63233;
}
#round8{
width:152px;
background-color:#8E3C9E;
}
</style>
</head>
<body>
<div id= "box" class="box">
<div id="cylinderA" class="cylinder" ></div>
<div id="cylinderB" class="cylinder" ></div>
<div id="cylinderC" class="cylinder" ></div>
<div id="round1" class="round" ></div>
<div id="round2" class="round" ></div>
<div id="round3" class="round" ></div>
<div id="round4" class="round" ></div>
<div id="round5" class="round" ></div>
<div id="round6" class="round" ></div>
<div id="round7" class="round" ></div>
<div id="round8" class="round" ></div>
<div id="ground" ></div>
</div>
<button id="test" type="button" style="margin-top:500px;" >计算步骤</button>
<button id="moveB" type="button">开搞</button>
</body>
</html>
汉诺塔源码
最新推荐文章于 2024-08-01 15:03:43 发布