漢諾塔JS

      網友投稿 586 2025-04-03

      var delay = 200; //in milliseconds


      var drag=false;

      var objDisk=null;

      var x = 0;

      var y = 0;

      var disksOnTower1 = new Array(null,null,null,null,null,null,null,null);

      var disksOnTower2 = new Array(null,null,null,null,null,null,null,null);

      var disksOnTower3 = new Array(null,null,null,null,null,null,null,null);

      var disksOnTowers = new Array(disksOnTower1,disksOnTower2,disksOnTower3);

      var offsetleft = 30;

      var offsettop = 30;

      var offsettower = 20;

      var offsethoriz = 30;

      var basetop = 0;

      var diskheight = 0;

      var midhoriztower = 0;

      var indexTo=1;

      var indexFr=1;

      var movectr=0;

      var gameOver=false;

      var prevIndex=0;

      var zindex = 0;

      var currTower=1;

      var prevTower=1;

      var demo=false;

      var arrFr = new Array(255);

      var arrTo = new Array(255);

      var idx = 0;

      var pos = 0;

      var t=null;

      var stop=false;

      function init(){

      if (document.getElementById){

      var diskno = document.hanoi.diskno;

      diskno.options.selectedIndex = 0;

      drawTowers();

      drawDisks(parseInt(diskno.options[diskno.options.selectedIndex].text));

      }

      }

      function initVars(){

      for (var i=0;i

      disksOnTower1[i]=null;

      disksOnTower2[i]=null;

      disksOnTower3[i]=null;

      }

      drag = false;

      indexTo = 1;

      indexFr = 1;

      movectr = 0;

      zindex = 0;

      idx = 0;

      pos = 0;

      t = null;

      gameOver=false;

      stop=false;

      demo=false;

      document.hanoi.btnUndo.disabled=true;

      }

      function drawTowers(){

      var title=document.getElementById("title");

      var tower1=document.getElementById("tower1");

      var tower2=document.getElementById("tower2");

      var tower3=document.getElementById("tower3");

      var settings=document.getElementById("settings");

      var titlewidth = parseInt(title.style.width);

      var titleheight = parseInt(title.style.height);

      var towerwidth = parseInt(tower1.style.width);

      var towerheight = parseInt(tower1.style.height);

      var settingswidth = parseInt(settings.style.width);

      midhoriztower = parseInt(document.getElementById("horiztower1").style.width)/2;

      diskheight = parseInt(document.getElementById("disk1").style.height);

      title.style.left=offsetleft+(1.5*towerwidth)+offsettower-(titlewidth/2)+"px";

      title.style.top=offsettop+"px";

      tower1.style.left=offsetleft+"px";

      tower1.style.top=offsettop+titleheight+offsethoriz+"px";

      tower2.style.left=offsetleft+towerwidth+offsettower+"px";

      tower2.style.top=offsettop+titleheight+offsethoriz+"px";

      tower3.style.left=offsetleft+(towerwidth+offsettower)*2+"px";

      tower3.style.top=offsettop+titleheight+offsethoriz+"px";

      settings.style.left=offsetleft+(1.5*towerwidth)+offsettower-(settingswidth/2)+"px";

      settings.style.top=parseInt(tower1.style.top)+towerheight+offsethoriz+"px";

      }

      function drawDisks(disknum){

      var tower1=document.getElementById("tower1");

      var disktop = parseInt(tower1.style.top)+parseInt(document.getElementById("horiztower1").style.top);

      var lefttower1 = parseInt(tower1.style.left);

      var disk;

      var f=document.hanoi;

      basetop = disktop;

      for (var i=disksOnTower1.length;i>=1;i--){

      disk = document.getElementById("disk"+i);

      disk.style.zIndex=++zindex;

      if (i<=disknum){

      disk.style.left=lefttower1+midhoriztower-parseInt(disk.style.width)/2+"px";

      disk.style.top=disktop-diskheight-1+"px";

      disktop = parseInt(disk.style.top);

      disksOnTowers[0][i-1]=disk;

      }

      else {

      disk.style.left="-250px";

      disk.style.top="-250px";

      disksOnTowers[0][i-1]=null;

      }

      }

      f.minmove.value=f.diskno.options[f.diskno.options.selectedIndex].value;

      f.yourmove.value=0;

      }

      function newGame(obj){

      if (movectr>0 && !gameOver && !stop){

      if (confirm("Current game will be aborted, would you like to continue?")){

      initVars();

      drawDisks(parseInt(obj.options[obj.options.selectedIndex].text));

      }

      else document.hanoi.diskno.options.selectedIndex=prevIndex;

      }

      else {

      initVars();

      drawDisks(parseInt(obj.options[obj.options.selectedIndex].text));

      }

      }

      function initializeDrag(disk,e){

      if (!e) e=event;

      if (stop){

      swal("警告", "不能在點擊'stop'按鈕之后在繼續執行移動盤子的操作!!", "warning");

      //alert("You cannot continue solving the puzzle after clicking the 'Stop' button.\nClick 'Restart' button or select no. of disks to continue playing.");

      return;

      }

      indexFr = indexTo;

      if (disk.id!=disksOnTowers[indexFr-1][0].id || gameOver || demo) return;

      objDisk=disk;

      x=e.clientX;

      y=e.clientY;

      tempx=parseInt(disk.style.left);

      tempy=parseInt(disk.style.top);

      document.onmousemove=dragDisk;

      }

      function dragDisk(e){

      if (!e) e=event;

      zindex++;

      drag=true;

      var posX = tempx+e.clientX-x;

      var posY = tempy+e.clientY-y;

      var objTower1 = document.getElementById("tower1");

      var objTower2 = document.getElementById("tower2");

      var objTower3 = document.getElementById("tower3");

      var tower1Left = parseInt(objTower1.style.left);

      var tower2Left = parseInt(objTower2.style.left);

      var tower3Left = parseInt(objTower3.style.left);

      var tower3Width = parseInt(objTower3.style.width);

      objDisk.style.zIndex=zindex;

      objDisk.style.left=posX+'px';

      objDisk.style.top=posY+'px';

      if (e.clientX>=document.body.clientWidth-10 || e.clientY>=document.body.clientHeight-5 || e.clientX==5 || e.clientY==5){ //outside available window

      indexTo=indexFr;

      dropDisk(objDisk);

      }

      else if ( //in the vicinity of tower 3

      (tower3Left<=posX) &&

      (tower3Left+tower3Width>=posX) &&

      (parseInt(objTower3.style.top)+parseInt(objTower3.style.height)>posY)

      ){

      indexTo=3;

      }

      else if ((tower2Left<=posX) && (tower2Left+tower3Width>=posX)){ //in the vicinity of tower 2

      indexTo=2;

      }

      else if ((tower1Left<=posX) && (tower1Left+parseInt(objTower1.style.width)>=posX)){ //in the vicinity of tower 1

      indexTo=1;

      }

      else indexTo = indexFr;

      return false;

      }

      function dropDisk(disk){

      var f=document.hanoi;

      document.onmousemove=new Function("return false");

      if (!drag) return;

      var gameStatus=false;

      var topDisk = disksOnTowers[indexTo-1][0];

      if (indexFr==indexTo){

      getNewTop(indexFr,null);

      pushDisk(disk,indexFr); //put disk back to original tower

      getNewTop(indexFr,disk);

      }

      else if (topDisk==null) {

      pushDisk(disk,indexTo);

      getNewTop(indexFr,null);

      getNewTop(indexTo,disk);

      movectr++;

      currTower=indexTo;

      prevTower=indexFr;

      f.btnUndo.disabled=false;

      }

      else if (parseInt(disk.style.width)

      pushDisk(disk,indexTo);

      getNewTop(indexFr,null);

      getNewTop(indexTo,disk);

      movectr++;

      currTower=indexTo;

      prevTower=indexFr;

      if (indexTo==3) gameStatus=checkStatus();

      f.btnUndo.disabled=false;

      }

      else {

      getNewTop(indexFr,null);

      pushDisk(disk,indexFr); //put disk back to original tower

      getNewTop(indexFr,disk);

      }

      drag=false;

      f.yourmove.value=movectr;

      if (gameStatus) {

      f.btnUndo.disabled=true;

      minmove = parseInt(f.minmove.value);

      if (movectr==minmove) msg="\nCongratulations! You got it in "+minmove+" moves."

      else if (movectr>minmove) msg="\nYou can do better than that."

      else msg="";

      //alert("Game Over !!!"+msg);

      swal({ title: "干的漂亮!!!!", text: msg, imageUrl: "images/thumbs-up.jpg" });

      gameOver=true;

      }

      return;

      }

      function checkStatus(){

      var gameStat = false;

      var disks=0;

      for (var i=0;i

      if (disksOnTowers[2][i]!=null) disks++;

      }

      if (disks==parseInt(document.hanoi.diskno.options[document.hanoi.diskno.options.selectedIndex].text)) gameStat=true;

      return gameStat;

      }

      function pushDisk(disk,index){

      var diskWidth = parseInt(disk.style.width);

      var towerLeft = parseInt(document.getElementById("tower"+index).style.left);

      var topDisk = disksOnTowers[index-1][0];

      if (topDisk!=null){

      topDiskWidth = parseInt(topDisk.style.width);

      topDiskTop = parseInt(topDisk.style.top);

      disk.style.left=towerLeft+midhoriztower-diskWidth/2+"px";

      disk.style.top=topDiskTop-diskheight-1+"px";

      }

      else {

      disk.style.left=towerLeft+midhoriztower-diskWidth/2+"px";

      disk.style.top=basetop-diskheight-1+"px";

      }

      }

      function getNewTop(index,disk){

      if (disk==null){ //pop

      for (var i=0;i

      disksOnTowers[index-1][i]=disksOnTowers[index-1][i+1];

      }

      disksOnTowers[index-1][disksOnTower1.length-1]=null;

      }

      else { //push

      for (var i=disksOnTower1.length-1;i>=1;i--){

      disksOnTowers[index-1][i]=disksOnTowers[index-1][i-1];

      }

      disksOnTowers[index-1][0]=disk;

      }

      }

      function solve(btn){

      if (btn.value=="Solve"){

      if (movectr>0 && !gameOver && !stop)

      if (!confirm("Current game will be aborted, would you like to continue?")) return;

      btn.value="Stop";

      initVars();

      stop=false;

      demo=true;

      var f=document.hanoi;

      f.btnIns.disabled=true;

      f.btnRes.disabled=true;

      f.btnUndo.disabled=true;

      disknum = parseInt(f.diskno.options[f.diskno.options.selectedIndex].text);

      drawDisks(disknum);

      getMoves(0, 2, 1, disknum);

      t=window.setTimeout("moveDisk()",delay);

      }

      else {

      if (t) {

      window.clearTimeout(t);

      btn.value="Solve";

      frm.btnIns.disabled=false;

      frm.btnRes.disabled=false;

      t = null;

      stop=true;

      demo=false;

      }

      }

      }

      function moveDisk(){

      frm = document.hanoi;

      disk=disksOnTowers[arrFr[pos]][0];

      pushDisk(disk,arrTo[pos]+1);

      getNewTop(arrFr[pos]+1,null);

      getNewTop(arrTo[pos]+1,disk);

      movectr++;

      frm.yourmove.value=movectr;

      pos++;

      if (movectr

      else {

      //alert("Can you do that in "+movectr+" moves?");

      swal({ title: "搞定了!", text: movectr+"步!你還能夠更快完成它嗎?", imageUrl: "images/pinpin.png" });

      //swal("Can you do that in "+movectr+" moves?");

      gameOver=true;

      stop=false;

      frm.btnSolve.value="Solve";

      frm.btnIns.disabled=false;

      frm.btnRes.disabled=false;

      }

      }

      function getMoves(from,to,empty,numDisk){

      if (numDisk > 1) {

      漢諾塔JS

      getMoves(from, empty, to, numDisk - 1);

      arrFr[idx] = from;

      arrTo[idx++] = to;

      getMoves(empty, to, from, numDisk - 1);

      }

      else {

      arrFr[idx] = from;

      arrTo[idx++] = to;

      }

      }

      function unDo(btn){

      disk=disksOnTowers[currTower-1][0];

      pushDisk(disk,prevTower);

      getNewTop(currTower,null);

      getNewTop(prevTower,disk);

      movectr--;

      document.hanoi.yourmove.value=movectr;

      btn.disabled=true;

      }

      function displayIns(){

      var msg = "你要將所有的盤子從TOWER 1移動到TOWER 3\n";

      msg += "你每次只能移動一個盤子。\n";

      msg += "游戲最重要的規則是大的盤子不能放在小的盤子上面!";

      // var msg="Try to move all the disks from TOWER 1 to TOWER 3.\n";

      // msg+="You may only move one disk at a time.\n";

      // msg+="You must never allow a bigger disk to go on top of a smaller disk.";

      //alert(msg);

      swal({

      title: "漢諾塔游戲規則",

      text: msg,

      imageUrl: 'images/capitaine.png'

      });

      }

      html可以找我要

      5G游戲

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:表格中文字的線怎么刪除
      下一篇:如何鎖定wps表格(如何鎖定wps表格中的公式)
      相關文章
      亚洲高清国产拍精品青青草原| 亚洲天堂2016| 亚洲GV天堂GV无码男同| 亚洲成a人片在线观看精品| 亚洲成AV人片久久| 精品无码一区二区三区亚洲桃色| 亚洲色成人WWW永久网站| 亚洲午夜av影院| 国产亚洲欧洲Aⅴ综合一区| 爱情岛论坛网亚洲品质自拍| jlzzjlzz亚洲乱熟在线播放| 亚洲人成影院在线观看| 亚洲乱码中文字幕手机在线| 亚洲一级片内射网站在线观看| 亚洲色偷拍区另类无码专区| 亚洲午夜无码片在线观看影院猛| 亚洲男人av香蕉爽爽爽爽| 亚洲天堂在线视频| 亚洲日本乱码在线观看| 国产亚洲综合网曝门系列| 亚洲VA中文字幕无码毛片| 亚洲AV乱码一区二区三区林ゆな| 久久久亚洲欧洲日产国码aⅴ| 亚洲国产精品自在线一区二区| 亚洲尹人九九大色香蕉网站| 亚洲自偷精品视频自拍| 亚洲国产成人精品无码一区二区 | 亚洲资源最新版在线观看| 久久精品国产亚洲AV蜜臀色欲| 91丁香亚洲综合社区| 亚洲色成人四虎在线观看| 亚洲av午夜国产精品无码中文字 | 亚洲一区二区精品视频| 亚洲精品无码MV在线观看| 亚洲狠狠久久综合一区77777| 亚洲精品视频观看| 亚洲色大成网站www尤物| 亚洲高清国产拍精品青青草原| 亚洲精品美女久久777777| 亚洲黄色片在线观看| 国产成人亚洲合集青青草原精品|