Saturday, March 22, 2008

Hanoi Game (Delphi)

Teman-teman disini saya ingin mencoba menjelaskan suatu program kecil mengenai game yang sudah lama dan dulu sempat booming. Hanoi merupakan pengaplikasian dari suatu cerita yaitu:
dulu ada seorang biksu yang ingin memindahkan kuilnya dari suatu tempat ke tempat lain. ditempat yang baru itu dia harus melewati suatu bukit. Biksu itu hanya mampu membawa satu bagian saja dari kuilnya tersebut. Persoalannya adalah bagaimana membawa bagian2 tersebut secara cepat. cerita itu dapat digambarkan sesuai dengan gambar dibawah ini.

Balok-balok tersebut harus dipindahkan dari tiang 1 (asal) ke tiang 3 (tujuan) dengan bantuan tiang 2 (bantuan).

Sekarang kita mulai masuk pada logika kita. untuk mempercepat waktu pemindahan maka kita membutuhkan langkah terpendek. Nah menurut perhitungan secara matematika dan statistik didapat persamaan :

(2^jumlah balok) - 1



contoh:

1. jumlah balok = 2 =========> (2^2)-1 = 3
2. jumlah balok = 3 =========> (2^3)-1 = 7
3. jumlah balok = 4 =========> (2^4)-1 = 15 dst

Dari contoh game yang dulu kita hanya bisa memainkan saja akan tetapi kita tidak bisa menganalisa pergerakannya. dengan game yang saya buat, maka dengan memencet tombol Solusi maka akan secara animatif terlihat pergerakan balok tersebut yang disertai dengan tabel untuk memperjelas. Hal itu dapat di lihat pada gambar berikut:

Seperti yang terlihat, bahwa pada langkah ke 76 balok 10 berpindah dari tiang 1 ke tiang 2 dan gambar menunjukkan akan memulai langkah ke 77 yaitu balok 12 akan berpindah dari tiang 3 ke tiang 1 sampai pada langkah terakhir yaitu
(2^12) -1 = 4095.

Disini saya buat dengan bahasa program delphi 5 yang akan saya terangkan secara singkat mengenai logika dan kodenya

Untuk mencari jumlah langkah terpendek, function berikut akan sedikit membantu:

function Tfrmha.langkahterpendek(nilai:integer) : integer;
var i: integer;
begin
Result:=1;
for i:=1 to nilai do
Result:=result*2;
Result:=Result-1;
end;

Fungsi diatas pasti sudah jelas, bagi yang belum jelas kebangetan.....ha....ha....ha. Maaf cuma guyon. tapi pada waktu lain pasti akan saya jelaskan kode dasar delphi atau dapat dilihat diblogku yang lain yaitu http://belajardelphi.blogspot.com

Oke selanjutnya untuk kode dari gerakan balok maka prosedur ini akan sangat membantu:

procedure Tfrmha.hanoi(var cacah_gerak : integer; Cacah,Asal,Lewat,Tujuan :integer);
begin
if Cacah > 0 then
begin
hanoi(cacah_gerak,Cacah-1,Asal,Tujuan,Lewat);
cacah_gerak:=succ(cacah_gerak);
StringGrid2.Cells[0,cacah_gerak]:=IntToStr(cacah_gerak);
StringGrid2.Cells[1,cacah_gerak]:=IntToStr(jum-cacah+1);
StringGrid2.Cells[2,cacah_gerak]:=IntToStr(Asal);
StringGrid2.Cells[3,cacah_gerak]:=IntToStr(Tujuan);
hanoi(cacah_gerak,Cacah-1,Lewat,Asal,Tujuan);
end;
end;

Catatan saya menggunakan komponen StringGrid untuk tabelnya.

Nah sekarang anda silahkan mencoba dengan kreativitas anda sendiri. Bagi yang masih bingung dan memerlukan bantuan silahkan email ke feribayek@telkom.net

Comments: Post a Comment

Subscribe to Post Comments [Atom]





<< Home

This page is powered by Blogger. Isn't yours?

Subscribe to Posts [Atom]