LAPORAN
Disusun Untuk Memenuhi Tugas Akhir Semester Mata Kuliah Dasar – Dasar Pemrograman
Disusun Oleh:
Permainan Ludo adalah permainan yang dimainkan oleh 4 pemain dengan masing-masing
pemain memiliki 4 bidak atau pion yang harus dikeluarkan satu demi satu dari base ke start, lalu
berjalan menuju home. Sebuah dadu digunakan untuk menentukkan banyaknya langkah yang
ditempuh oleh bidak pemain. Contoh dari papan permainan ludo bisa dilihat di gambar 1 dan
contoh untuk bidak atau pion beserta dadunya bisa dilihat di gambar 2.
Home Base
Pada awal permainan, semua bidak dari setiap pemain berada pada base masing-masing
pemain. Pemain yang mendapat giliran pertama ditentukan dari kesepakatan sebelumnya.
Kemudian pemain mengocok dadu dan memilih bidak mana yang akan dijalankan. Namun
sebelum bidak dijalankan dari start menuju home, bidak terlebih dahulu harus dikeluarkan dari
base menuju start. Bidak berjalan sesuai nilai yang muncul dari hasil kocokan dadu. Setiap pemain
bergantian melakukan hal ini hingga semua bidak masuk ke home.
Perjalanan dari start ke home melalui dua zona, yaitu sebagai berikut:
a. Zona jalan, zona jalan yaitu zona yang akan dilalui oleh hampir semua bidak dari semua
pemain. Zona ini berbelok-belok arahnya dan pada umumnya memiliki 52 petak mulai dari
start hingga perbatasan dengan zona aman. Setiap bidak akan melewati 51 petak untuk
menuju zona aman, satu petak sebelum petak start tidak dilalui karena bidak sudah belok
ke zona aman.
b. Zona aman, zona aman yaitu zona yang hanya bisa dilewati atau ditempati oleh bidak dari
pemain itu sendiri. Zona ini adalah zona untuk menuju ke home yang pada umumnya
memiliki 5 petak. Pergerakan pion dapat dilihat di gambar 3. Warna yang sesuai dengan
warna base merupakan zona aman. Sedangkan warna putih yang berpetak-petak
merupakan zona jalan.
a. Permainan dimainkan oleh 4 pemain dimana pemain pertama adalah manusia / user, pemain
kedua, pemain ketiga, dan pemain keempat adalah komputer (AI). Ketiga komputer tersebut
memiliki kecerdasan yang sama yaitu menggunakan algoritma Greedy by Quick Move.
Algoritma Greedy by Quick Move ini adalah algoritma akan berusaha untuk menggerakkan
pion secepat mungkin menuju tujuan. Pemilihan pion yang akan digerakkan berdasarkan
prioritas. Prioritas tertinggi adalah pion yang dapat bergerak dan berada paling dekat dengan
tujuan. Dengan menggerakkan pion yang paling dekat dengan kotak tujuan, kita akan lebih
cepat mencapai tujuan. Selama pion yang paling dekat dengan kotak tujuan tidak terhalangi,
maka seluruh langkah yang dapat diambil akan digunakan untuk memajukan pion tersebut.
Jika tidak ada yang bisa bergerak maka algoritma akan menggerakkan pion lainnya sejumlah
angka yang tertera di dau atau sisa langkah yang dapat diambil.
b. Setiap pemain bergantian mengocok dadu, satu kali satu kali. Kecuali ketika seorang pemain
mendapatkan dadu bernilai 6 maka ia berhak satu kali lagi (berlaku pengulangan). Pemain
yang berhak mendapatkan giliran pertama mengocok dadu ditentukan sesuai kesepakatan
awal. Pada permainan ludo ini pemain berurutan mengocok dadu dari pemain pertama, pemain
kedua, pemain ketiga, hingga pemain keempat.
c. Untuk mengocok dadu mengeluarkan bidak dari base ke start, pemain harus mendapatkan
dadu bernilai 6. Jika tidak bernilai 6 maka bidak tidak bisa dikeluarkan.
d. Jika bidak sudah berada di start, maka langkah bidak sesuai dengan nilai kocokan dadu.
e. Jika mendapatkan kocokan dadu bernilai 6 dan bidak_A sudah keluar dari base, maka ada
pilihan akan menjalankan bidak_A sebanyak 6 langkah atau akan mengeluarkan bidak_B dari
base (pilihan ini berlaku kelipatan, sampai semua bidak keluar dari base).
f. Jika bidak yang berada di zona jalan lebih dari satu, maka ada pilihan akan menjalankan bidak
yang mana. Namun jika hanya bidak_A yang ada di area ‘jalan’ dan kocokan dadu bukan
bernilai 6, maka bidak_A akan berjalan sesuai dengan nilai kocokan dadu. Dan jika hanya
bidak_D yang ada di area ‘jalan’, maka bidak_D akan berjalan sesuai dengan berapapun nilai
yang keluar dari kocokan dadu.
g. Jika bidak seorang pemain berada pada suatu tempat di area ‘jalan’, kemudian bidak pemain
lain / lawan menempati tempat yang sama, maka tempat akan diambil alih oleh bidak pemain
lawan dan bidak seorang pemain itu akan kembali ke base. Namun jika bidak pemain itu
sendiri yang akan menempati tempat itu, maka bidak tidak bisa dijalankan. Dengan kata lain
tidak boleh atau tidak bisa ada dua bidak yang bertempat di petak yang sama, meskipun bidak
itu sama-sama dari satu pemain.
h. Bidak dikatakan memasuki home apabila bidak tepat masuk kedalam kotak home, tidak boleh
kurang maupun lebih. Jika lebih, misalnya bidak tinggal n langkah menuju home tapi nilai
dari kocokan dadu itu lebih besar dari n, maka bidak akan maju menuju home sebanyak n
langkah, dan mundur dari home sebanyak nilai kocokan dadu dikurangi n. Jika hal ini terjadi
dan kocokan dadu tidak tepat untuk memasukan bidak ke home, maka bidak akan ‘maju
mundur’.
i. Pemain dikatakan menang apabila pemain itu berhasil memasukan keempat bidaknya menuju
home pertamakali.
Permainan dikatakan selesai apabila salah satu pemain telah memasukkan keempat
bidaknya ke home.
Instruction adalah daftar petunjuk untuk memainkan game ludo ini. Berikut daftar
instruksinya:
1. Permainan dilakukan oleh 4 pemain, dimana pemain 1 adalah manusia / user dan pemain
lainnya adalah komputer.
2. Setiap pemain memiliki 4 bidak yang harus dimasukan dari base ke start dan dari start ke
home.
3. Pemain yang berhasil memasukan keempat pionnya ke home adalah pemenangnya.
4. Selamat bermain... Apakah kamu bisa menjadi pemenang?
Sedangkan about adalah tentang siapa pembuat game ludo ini, yaitu Herdhiantoko Fathani S. dan
Muhammad Edwin.
Menu utama adalah tampilan awal ketika program ini dijalankan. Daftar menu utama yang
ada di game ludo ini diantaranya yaitu sebagai berikut:
1. Play
2. Instruction
3. About
4. Exit
TEKNIS PERMAINAN
Peraturan Permainan
Setiap pemain bermain secara bergilir yang dimulai dari pemain 1 (user)
Untuk mengeluarkan pion dari base, pemain harus mendapatkan angka dadu 6
Jika pemain mendapatkan angka 6, maka pemain dapat melempar dadu dan bermain
sekali lagi
Jika pion berhasil keluar dari base, pion tersebut harus menempati posisi awal yang telah
ditentukan terlebih dahulu
Pion harus bergerak melewati jalur yang telah ditentukan
Tidak boleh ada 2 pion dalam 1 posisi yang sama
Permainan berakhir apabila salah satu pemain telah memasuki seluruh pionnya ke dalam
Home
Aplikasi Permainan
1. Giliran Pemain
Setiap pemain akan bergantian dalam menggerakkan bidaknya, giliran pertama di berikan
kepada pemain 1 atau user, kemudian dilanjutkan giliran selanjutnya pemain 2, pemain 3,
dan pemain 4. Metode dalam melakukan giliran di program ini menggunakan operasi
matematika “modulus” dengan variabel penentu giliran merupakan variabel i.
Pemain ke-1 (USER) Pemain ke-2 (KOMPUTER)
Gambar diatas merupakan penempatan posisi Base tiap-tiap pemain. Tiap pemain bermain
secara bergilir yang telah ditentukan pemain ke-1 bermain pertama. Pergiliran pemain
tersebut ditentukan dengan notasi algoritma dengan metode seperti yang telah dijelaskan
diatas.
i0
i i mod 4
Player i bermain
i=i+1
2. Mengeluarkan Pion dari Base
Untuk mengeluarkan pion dari base, pemain harus mendapatkan angka dadu 6. Jika seluruh
pion masih di dalam base dan belum mendapatkan angka dadu 6, maka pemain tidak dapat
menggerakkan pionnya dan harus menunggu giliran selanjutnya untuk mencoba
mendapatkan angka dadu 6. Pemain dapat memilih pion yang manakah yang akan
dikeluarkan dari base, di awal permainan terdapat 4 pion pada tiap-tiap pemain, pemain dapat
memilih pion yang akan dikeluarkan dengan cara menginputkan angka pion tersebut saat
mendapatkan angka dadu 6
Semua pion pada tiap pemain memiliki posisi yang sama seperti gambar diatas. Di bagian
kiri-atas pion ke-1, bagian kanan-atas pion ke-2, bagian kiri-bawah pion ke-3, dan bagian
kanan-bawah pion ke-4.
Jika pemain mendapatkan angka dadu 6, maka pemain tersebut mendapatkan giliran
tambahan, sehingga dapat melakukan lempar dadu dan menggerakan pion lagi. Jika pemain
selalu mendapatkan angka 6 hingga akhir permainan, maka pemain tersebut sangat beruntung
namun sangat kecil kemungkinannya untuk terjadi hal seperti itu.
4. Pion Menempati Posisi Awal jika Berhasil Keluar dari Base
Apabila pemain mendapatkan angka dadu 6 kemudian memilih untuk mengeluarkan pion
dari base, maka pion tersebut tidak berjalan sejauh 6 langkah, melainkan pion tersebut harus
berada pada posisi awal (posisi start) dari pemain.
Posisi Start
Posisi Start
Posisi Start
Posisi Start
Gambar 6 Posisi Start Tiap Pemain
Gambar ini merupakan posisi start tiap-tiap pemain. Walaupun pion harus berada di posisi
start pada saat baru keluar dari base, namun karena mendapatkan angka dadu 6, maka pemain
bisa melempar dadu lagi untuk menggerakkan pion yang baru saja keluar dari base tersebut.
5. Pion Bergerak Sesuai dengan Jalur yang Telah Ditentukan
Setelah pion keluar dari base untuk mencapai Home, pion harus melewati jalur-jalur yang
telah ditentukan. Terdapat 2 jenis jalur dalam permainan ini yaitu “Zona Jalur” dan “Zona
Aman”. Zona Jalur adalah tempat yang dapat dilewati oleh semua pion tiap-tiap pemain,
sehingga ada kemungkinan pion menendang (kick) atau ditendang (kicked) oleh pion pemain
lain di zona ini.
Gambar diatas ini merupakan zona jalur yang akan dilewati pion-pion tiap pemain. Terlihat
bahwa posisi start pemain 1 (merah) berada pada zona jalur ke-1, zona jalur ke-0 pada
gambar diatas merupakan “zona mati” bagi pemain 1 karena pemain 1 tidak akan melewati
jalur itu. Pion pemain 1 harus bergerak mengikuti urutan angka zona jalur pada gambar
diatas. Setelah melewati zona jalur ke-51, pion pemain 1 selanjutnya akan memasuki Zona
Aman dimana di Zona ini, hanya pemain pemilik Zona Aman saja yang dapat melewatinya,
sehingga tidak akan terjadi pion saling menendang (kick) ataupun ditendang (kicked) oleh
pion pemain lain. Aturan ini berlaku untuk semua pemain, tidak hanya pemain 1 saja
Terlihat pada gambar diatas, tiap-tiap pemain memiliki zona start yang berbeda-beda. Zona
start pemain 1 berada pada zona jalur ke-1, pemain 2 pada zona jalur ke-14, pemain 3 pada
zona jalur ke-27, dan pemain 4 pada zona jalur ke-40. Terdapat pola untuk menunjukkan
dimanakah posisi start tiap-tiap pemain yang dapat dirumuskan dengan operasi matematika.
Sehingga didapat rumusan:
Sekali lagi, Zona Aman merupakan tempat yang hanya bisa dilewati oleh pemilik Zona
Aman tersebut, sehingga tidak akan terjadi pion menendang (kick) atau ditendang (kicked) di
zona ini.
Gambar 8 Zona Aman Tiap Pemain
Gambar diatas merupakan Zona Aman yang dimiliki oleh tiap-tiap pemain. Warna pada zona
tersebut merupakan tanda kepemilikan pemain dengan warna yang sama. Zona Aman yang
berwarna merah merupakan Zona Aman milik pemain dengan warna merah (player 1), Zona
Aman yang berwarna kuning merupakan Zona Aman milik pemain dengan warna kuning
(player 2), dan begitu juga dengan pemain biru ataupun hijau.
Terlihat pada gambar diatas bahwa Zona Aman tersebut dimulai dari Zona Aman ke-52
karena Zona Aman ini melanjutkan perjalanan dari Zona Jalan yang berakhir di Zona Jalan
ke-51. Apabila pemain mendapatkan angka dadu yang melebihi angka 1 (misal 4) jika pion
pemain tersebut sedang berada di Zona Jalur ke-50, maka pion tersebut akan langsung
diarahkan sesuai angka dadu yaitu 50 + 4 (diambil dari permisalan) yaitu 54, sehingga pion
itu akan berada pada Zona Aman ke-54. Untuk contoh, perhatikan gambar dibawah ini.
Gambar 9 Pergerakan dari Zona Jalan ke Zona Aman
Home merupakan posisi ke-57. Home ini tidak termasuk ke dalam Zona Jalan ataupun Zona
Aman. Apabila pion mendapatkan angka dadu yang pas untuk memasuki Home, maka pion
tersebut akan hilang dan dinyatakan telah memasuki Home. Contoh pada gambar diatas,
apabila pemain tersebut (pemain merah) melempar dadu lagi dan mendapatkan angka 3,
maka pion tersebut sudah dinyatakan memasuki Home, dan kemudian pion tersebut akan
hilang dari papan permainan. Tetapi jika mendapatkan angka dadu lebih dari 3 maka pion
akan kembali dengan berjalan mundur sesuai dengan sisa angka dadu setelah dikurangi
jumlah langkah pion tersebut menuju ke Home. Untuk contoh, perhatikan gambar berikut.
1 2 3
Saat pemain melemparkan dadu kemudian mendapatkan angka dadu, tetapi saat ingin
menjalankan pion, ternyata posisi Zona Jalur yang akan ditempati pion pemain tidak kosong.
Jika keadaannya seperti itu, maka ada 2 kemungkinan yang akan terjadi.
Posisi Zona Jalur yang akan ditempati pion pemain telah ditempati oleh salah satu
pion dari pemain itu sendiri
Jika seperti ini keadaannya, maka pemain harus menggerakkan pion yang lainnya.
Karena tidak boleh ada 2 pion dalam 1 posisi yang sama, jadi menggerakkan pion
yang lainnya merupakan satu-satunya cara untuk mengatasi aturan ini.
Pion ke-1
Pion ke-1
Pada gambar diatas, terlihat bahwa pemain mendapatkan angka dadu 3. Dalam kasus
ini pemain tidak dapat menggerakkan pion ke-2 karena jika pion ke-2 digerakkan,
maka posisi pion ke-2 akan sama pion ke-1, sehingga pemain diharuskan untuk
menggerakkan pion ke-1 supaya tidak ada posisi pion yang sama.
Posisi Zona Jalur yang akan ditempati pion pemain telah ditempati oleh pion pemain
lain
Jika seperti ini keadaannya, maka pion pemain yang menempati posisi itu lebih dulu
harus kembali ke base karena pion tersebut telah ditendang (kicked) oleh pemain
yang ingin menempati (mengambil alih) posisi tersebut.
Gambar diatas merupakan giliran pemain biru (pemain 4) yang mendapatkan angka
dadu 3. Pemain biru menjalankan pionnya, namun terdapat pion merah yang terlebih
dahulu menempati tujuan si pion biru, sehingga pion merah akan ditendang (kick)
oleh pion biru kemudian pion merah kembali ke basenya dan pion biru menempati
posisi pion merah sebelumnya (sebelum ditendang oleh pion biru).
7. Berakhirnya Permainan
Permainan akan berakhir jika seluruh pion dari salah satu pemain telah berhasil mencapai
Home. Dalam permainan ini hanya terdapat 1 pemenang, jadi membutuhkan strategi yang
baik untuk memenangkan permainan ini. Setelah salah satu pemain memenangkan
permainan, akan muncul teks yang diberikan untuk pemenang permainan sebagai ucapan
selamat.
KEBUTUHAN DATA
Procedure showInstruction()
Deskripsi Berisi kumpulan instruksi / petunjuk
bagaimana cara memainkan game ludo ini.
Initial State Layar kosong
Final State Layar menampilkan petunjuk cara
memainkan game ludo
Algoritma:
Procedure showInstruction()
Write (instruction.txt)
End Procedure Instruction
Procedure showAbout()
Deskripsi Berisi informasi tentang pembuat game ini
Initial State Layar kosong
Final State Layar menampilkan informasi pembuat
game ini
Algoritma:
Procedure showAbout()
Write (about.txt)
End Procedure About
Function rollDice() Integer
Deskripsi Fungsi ini untuk melempar dadu
Input
Output Menghasilkan angka random dari 1 - 6 yang
bekerja seperti dadu.
Algoritma:
Function rollDice()
Dice = (rand (i) mod 6)) + 1
Return Dice
End Function rollDice
Procedure fillPionPosition()
Deskripsi Mengisi data koordinat baris & kolom ke
dalam variabel pionPosition
Initial State Variabel pionPosition belum terisi
Final State Variabel pionPosition terisi oleh data-data
tertentu
Algoritma:
Procedure fillPionPosition()
Untuk 1 sampai 52 lakukan
pionPosition koordinat jalan
End Procedure fillPionPosition
Procedure movePion()
Deskripsi Menjalankan bidak sesuai dengan angka
dadu
Initial State Bidak berada di posisi awal
Final State Bidak bergerak dari posisi awal sejauh
beberapa langkah tergantung angka dadu
Algoritma:
Procedure movePion()
Temp koordinat awal pion sebelum bergerak
Papan pada posisi temp + dadu karakter pion
Papan pada posisi temp karakter spasi ‘ ’
End Procedure move
Procedure fillSafeZonePosition()
Deskripsi Mengisi data koordinat baris & kolom ke
dalam variabel safeZonePosition
Initial State Variabel safeZonePosition belum terisi
Final State Variabel safeZonePosition terisi oleh data-
data tertentu
Algoritma:
Procedure fillSafeZonePosition()
Untuk player 1 sampai 4 lakukan
Untuk 1 sampai 5 lakukan
safeZonePosition koordinat Zona Aman tiap player
End Procedure fillSafeZonePosition
Function gameOver() -> Boolean
Deskripsi Menentukan apakah pemain sudah menang
atau belum
Input Home tiap player
Output .true. jika Home pemain = 4
Algoritma:
Function gameOver()
Jika salah satu Home dari player = 4 maka
Return .true.
End Function gameOver
Procedure setBoard()
Deskripsi Membentuk papan permainan
Initial State Kosong
Final State Papan permainan terbentuk dari sebuah
Array 2 Dimensi
Algoritma:
Procedure setBoard()
Untuk setiap garis pada papan permainan lakukan
Board karakter ‘ ▪ ’
End Procedure setBoard
Procedure refreshBoard()
Deskripsi Memperbarui kondisi posisi-posisi bidak
pada papan permainan
Initial State Papan permainan berada dalam kondisi awal
Final State Papan permainan di update setiap setelah
pemain menjalankan bidaknya sehingga
posisi bidak yang tampil dalam layar
berpindah
Algoritma:
Procedure refreshBoard()
Bersihkan layar
Write (layar) board
End Procedure refreshBoard
Procedure setPion()
Deskripsi Memberikan data-data pion tiap player
Initial State Data pion belum terisi
Final State Data pion telah terisi
Algoritma:
Procedure setPion()
Untuk setiap player lakukan
Home 0
Base 0
Untuk setiap pion lakukan
Posisi koordinat base
Langkah 0
Bisa bergerak .false.
End Procedure setPion
Procedure identifyPion()
Deskripsi Memeriksa pion manakah yang akan
ditendang (kick) ke Base
Initial State Tidak tau urutan pion musuh yang akan
ditendang (kick)
Final State Urutan pion musuh yang akan ditendang
(kick) diketahui
Algoritma:
Procedure identifyPion()
Untuk setiap pion lawan lakukan
Jika posisi pion lawan = posisi pion pemain + dadu maka
Return urutan pion lawan
End Procedure identifyPion
Procedure identifyPionFromBase()
Deskripsi Memeriksa pion manakah yang akan
ditendang (kick) ke Base (jika posisi awal
pion pemain berada pada Base)
Initial State Tidak tau urutan pion musuh yang akan
ditendang (kick)
Final State Urutan pion musuh yang akan ditendang
(kick) diketahui
Algoritma:
Procedure identifyPionFromBase()
Untuk setiap pion lawan lakukan
Jika posisi pion lawan = posisi start pion pemain maka
Back urutan pion lawan
Return Back
End Procedure identifyPionFromBase
Procedure eatPion()
Deskripsi Menempatkan pion yang ditendang (kick) ke
Base
Initial State Tiap pion berada pada posisinya masing-
masing
Final State Pion yang tertendang (kick) oleh pion musuh
lain akan berpindah posisi ke Basenya
Algoritma:
Procedure eatPion()
Temp posisi awal pion player
identifyPion()
Pindahkan pion lawan ke Basenya
Base pemain lawan +1
movePion()
End Procedure eatPion
Procedure win()
Deskripsi Menampilkan pemenang permainan
Initial State Layar kosong
Final State Layar menampilkan pemenang permainan
Algoritma:
Procedure win()
Write (win.txt)
End Procedure win
Procedure eatPionFromBase()
Deskripsi Menempatkan pion yang ditendang (kick) ke
Base (jika posisi awal pion pemain berada
pada Base)
Initial State Tiap pion berada pada posisinya masing-
masing
Final State Pion yang tertendang (kick) oleh pion musuh
lain akan berpindah posisi ke Basenya
Algoritma:
Procedure eatPion()
Temp posisi awal pion player
identifyPionFromBase()
Pindahkan pion lawan ke Basenya
Base pemain lawan +1
movePion()
End Procedure eatPion
Procedure playGame()
Deskripsi Memulai permainan dan menjalankan segala
modul-modul diatas
Initial State Permainan belum dimulai
Final State Permainan dimulai
Algoritma:
Procedure playGame()
Selama belum gameOver() lakukan
Jalankan modul-modul diatas
End Procedure playGame
PENGUJIAN PERMAINAN
1. Pentingnya membuat desain dan skenario awal sebuah aplikasi / games. Hal ini
memudahkan langkah apa yang selanjutnya akan kami kerjakan.
2. Selain menentukan modul apa saja yang akan dipakai dalam pembuatan games ini,
menentukan parameter dari modul-modul tersebut merupakan hal yang penting juga
3. Lebih memahami data record dan penggunaannya. Salah satunya yaitu penggunaan
record dalam record.
4. Pengetahuan baru tentang source code yang kita buat bisa dipisahkan menjadi liblary
baru.
5. Pentingnya menggunakan nama variabel / naming variable yang bagus dan nama
procedure / function yang bagus pula (Clean code).
6. Pentingnya menambahkan komentar di dalam source code kita, supaya orang lain dapat
paham source code yang kita buat.
DAFTAR PUSTAKA
Kemit, L. F., 2011. Penentuan Langkah dengan Greedy dalam Permainan Ludo. Makalah IF3051
Strategi Algoritma - Sem. I Tahun 2011/2012, Program Studi Teknik Informatika, Sekolah
Teknik Elektro dan Informatika, Institut Teknologi Bandung.