Saturday, 14 February 2015

Algoritma Hanoi Dengan JavaScript



Tower of Hanoi merupakan sebuah permainan puzzle yang menggunakan tiga buah tiang dan beberapa piringan yang ukurannya berbeda-beda. Permainan ini memiliki beberapa aturan, yaitu: piringan hanya dapat dipindahkan satu persatu dan piringan yang lebih kecil harus berada di atas piringan yang lebih besar. Permainan Tower of Hanoi ini dapat dicari solusi penyelesaiannya dengan menggunakan algoritma New Fast Iterative. Program aplikasi permainan Tower of Hanoi dibuat dengan menggunakan bahasa pemrograman Javascript dan PHP dengan perangkat lunak Macromedia Dreamweaver. Hasil pengujian program aplikasi menunjukkan tingkat keberhasilan yang sangat baik. Program aplikasi dapat memberikan solusi penyelesaian permainan untuk setiap tingkat dalam permainan.

Source Code :

<script LANGUAGE="JavaScript" type="text/javascript">
<!--
var piring=10;

var nd1=piring+1,  noImgs=(piring+1)*3;
var menara = 0,  firstPick=0,  secondPick=0;
var i=0,  j=0,  noMoves=0,  time=0;
var what= 0,  where=0,   ontop=0;
var aa  = new Array(); aa[3*nd1+1]=nd1; aa[3*nd1+2]=nd1; aa[3*nd1+3]=nd1;
var bb  = new Array(0, 1,nd1,nd1 );
var src = new Array(); src[nd1]=3;
var dst = new Array(); dst[nd1]=3;
var minMoves = Math.pow(2,piring) - 1;
var selesai = false;
var mulai = false;
var otomatis  = 0;

function Sorry() {
 alert("Maaf Game ini tidak bisa dimuat di browser anda.");
}

function move(menara) {
if (document.images) {
  if (firstPick==0) {
    firstPick=menara;
    where= bb[firstPick];
    what = aa[3*where+firstPick];

    if (where<=piring) {
      if (mulai==false) {
        mulai=true;  time=nowTime();  //waktu awal untuk setiap kali memindahkan kedalam menara
        }
      document.images[firstPick].src=document.images[3*where+firstPick].src;
      document.images[3*where+firstPick].src="b0.gif";
      aa[firstPick] = what;
      aa[3*where+firstPick] = 0;
      bb[firstPick] =bb[firstPick]+1;
      updateInfo("   Klik salah satu menara untuk memindahkan. ");
      }
    else { firstPick=0;
        updateInfo("   tidak ada nomor untuk dipindahkan ! ");
        if (selesai) updateInfo("  Permainan Selesai !");
        }
    }
  else {  secondPick=menara;
      ontop =aa[3*bb[secondPick]+secondPick];
      endLev=bb[secondPick]-1;
      if (what>ontop) {
        alert("Nomor [__"+what+"__] lebih besar dari pada nomor [_"+ontop+ "_] \n *tidak bisa memindahkan* \n silahkan pindahkan dahulu nomor yang lebh kecil !" );
      } // then
    else {
        document.images[secondPick].src=document.images[firstPick].src;
        if (firstPick!=secondPick) {
          document.images[firstPick].src="b0.gif";
          noMoves = noMoves+1;
          }
        document.images[endLev*3+secondPick].src=document.images[secondPick].src;
        document.images[secondPick].src="b0.gif";
        aa[endLev*3+secondPick]=aa[firstPick];
        aa[firstPick] = 0;
        bb[secondPick]=bb[secondPick]-1;
        updateInfo("   Lakukan dengan cara yang sama. ");
        firstPick=0;
        if ((aa[2*3]==1) && (selesai!=true)) {
          updateInfo("      Permainan selesai. Selamat  :) ");
          selesai=true;
          }
        } // else
         }
    }
    else  Sorry();
} // Pindah

function Recognize() {
var i=0, j=0, wht=0;
  for (i=0; i<=piring; i++) {
    for (j=1; j<=3; j++) {
      wht=aa[3*i+j];
      if (wht!=0)  src[wht]=j;
    }
  }
} // fun

function CalcMinMoves() {
  minMoves=0;
  Recognize();
  for (i=piring; i>=1; i--) {
    if (src[i+1] == dst[i+1])
     dst[i]=src[i+1]
      else dst[i]=6-src[i+1]-dst[i+1];
    if (src[i] != dst[i])
      minMoves=minMoves + Math.pow(2,i-1);
  }
} // fun

function initArray() {
  bb[1]=1;  bb[2]=piring+1;  bb[3]=piring+1;  noMoves=0;
  if (document.images) { document.images[0].src = "han.gif";
    for (i=0; i<=piring; i++) {
      aa[i*3+1]=i;  document.images[i*3+1].src = "b" + i + ".gif";
      aa[i*3+2]=0;  document.images[i*3+2].src = "b0.gif";
      aa[i*3+3]=0;  document.images[i*3+3].src = "b0.gif";
    }
  }
  else  Sorry();
  CalcMinMoves();  selesai=false;  mulai = false;  otomatis=0;
  updateInfo('       Klik Nomor untuk Mulai Bermain!     ');
}

function nowTime() {
var  start = new Date();
  return (start.getTime() / 1000);
}

function updateInfo( information ) {
  document.forms[0].info1.value = information;
  return true
}

function pindahsatu() {
var from=1, to=1;
  Recognize();  // informasi posisi piring
  for (i=piring; i>=1; i--) {
    if (src[i+1] == dst[i+1])
     dst[i] = src[i+1]
      else dst[i] = 6-src[i+1]-dst[i+1];
    if (src[i] != dst[i]) {
     from=src[i];  to=dst[i]
    }
  }
  if (firstPick != 0) { // chek jika piringan ada yang lebih besar
         if (firstPick != from) { move(firstPick);  move(from); }
  }
  else  move(from);
  move(to);
  if (from != to) otomatis = otomatis+1;
  return true
}

// --></script>

berikut contoh Aplikasi Disini

SHARE THIS

Author:

Etiam at libero iaculis, mollis justo non, blandit augue. Vestibulum sit amet sodales est, a lacinia ex. Suspendisse vel enim sagittis, volutpat sem eget, condimentum sem.

0 komentar: