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
0 komentar: