Permainan Remi Sederhana Permainan Remi ini dimainkan oleh n orang dan masing-masing menerima sebanyak m kartu. Nilai n dan m ini diinputkan oleh user. Pada permainan remi terdapat : • KartuAcuan • Masing-masing pemain diawal permainan mempunyai m kartu. • Tumpukan kartu adalah kartu yang tersisa setelah kartu dibagikan ke pemain dan sebuah kartu yang digunakan untuk kartuAcuan Setiap pemain harus mengeluarkan kartu yang sejenis dengan kartuAcuan, jika tidak mempunyai kartu yang sejenis maka pemain harus mengambil dari tumpukan kartu, sampai menemukan kartu yang sejenis. Selanjutnya ditentukan siapakah pemenangnya. Class-class yang kita gunakan untuk menyelesaikan permasalahan ini adalah: • Class Kartu : digunakan untuk membuat objek kartu Terdapat variabel bagianMuka dan jenis, contoh sebuah kartu ”8 Waru” maka kartu tersebut mempunyai bagianMuka = “8” dan jenis = “Waru”. • Class TumpukanKartu : untuk membuat objek tumpukan kartu. Terdapat variabel kartu2 dengan tipe List. • Class Pemain : untuk membuat objek Pemain, berisi variabel nama dan kartu-kartu yang dimiliki oleh pemain (dengan tipe TumpukanKartu). • Class PermainanRemi : untuk membuat objek pada saat permainan remi dilakukan. Variabel apa saja yang harus ada ? o List pemain2 : untuk menyimpan data pemain. o int jumPemain : untuk menyimpan jumlah pemain. o int jumKartu : untuk menyimpan jumlah kartu yang diterima pemain pada saat awal permainan. o TumpukanKartu kk : untuk sisa kartu setelah kartu dibagikan ke pemain-pemain dan sebuah kartu Acuan. o Kartu kartuAcuan : untuk memyimpan kartuAcuan o TumpukanKartu win : kartu-kartu yang dikeluarkan oleh pemain, disimpan dalam variabel win, selanjutnya ditentukan siapakah pemenangnya. Fungsi penting yang terdapat pada Class Kartu: • public boolean equals(Object o) : untuk membandingkan antara Kartu 1 dengan Kartu 2 berdasarkan jenisnya. Jika kartu 1 dan kartu 2 mempunyai jenis yang berbeda maka fungsi akan mengembalikan nilai true, jika tidak sejenis maka mengembalikan nilai false. Contoh : kartu1 = 8 Hati, kartu2 = king Hati, kartu3 = ace Waru. boolean test = kartu1.equals(kartu2); hasil test = true ; test = kartu1.equals(kartu3); hasil test = false ;
•
public boolean equals2(Object o) : untuk membandingkan antara kartu1 dan kartu2 berdasarkan bagianMuka dan jenisnya. Sehingga kartu1 dan kartu2 dikatakan sesuai jika mempunyai bagianMuka dan jenis yang sama. Contoh : kartu1 = 8 Hati, kartu2 = 8 Hati, kartu3 = ace Waru. boolean test = kartu1.equals2(kartu2); hasil test = true ; test = kartu1.equals2(kartu3); hasil test = false ;
•
private int derajat(String str) : untuk memberikan derajat pada suatu kartu berdasarkan bagianMuka kartu, misal kartu ace mempunyai derajat yang lebih tinggi dibandingkan kartu king. public int compareTo(Object o) : Karena Class Kartu mengimplementasikan interface Comparable, maka pada Class Kartu harus mengimplementasikan fungsi compareTo(Object). Fungsi ini digunakan untuk melakukan pengurutan berdasarkan bagianMuka dari sebuah kartu. Sehingga pada fungsi compareTo() ini akan memanggil fungsi derajat() untuk mengkonversi bagianMuka menjadi sebuah nilai integer. Contoh : Sebuah kartu 8 Hati diberi nilai 8, sedangkan jenisnya diabaikan. (Kartu ini mempunyai bagianMuka = 8 dengan jenis=”Hati”). Sedangkan untuk jack, queen, king dan ace diberi nilai 11, 12, 13 dan 14.
•
Kartu sebelum diurutkan 2 Waru 4 Waru 2 Hati 3 Waru 3 Hati 4 Hati Jumlah Kartu : 6 Sesudah diurutkan 2 Waru 2 Hati 3 Waru 3 Hati 4 Waru 4 Hati Jumlah Kartu : 6
Dari contoh diatas kartu diurutkan berdasarkan bagianMuka kartu sehingga kartu yang mempunyai bagianMuka 2 , ditampilkan terlebih dahulu dibandingkan kartu dengan bagianMuka 3 dst. Fungsi penting yang terdapat pada Class TumpukanKartu: • public void acakKartu() : untuk mengacak tumpukan kartu. Fungsi penting yang terdapat pada Class PermainanRemi:
• • • • • •
public PermainanRemi(int jumPemain, int jumKartu) : konstruktor ini menerima jumlah inputan jumlah pemain dan kartu yang diterima oleh masing-masing pemain. public Kartu ambilSatuKartu(TumpukanKartu tk) : mengambil satu kartu dari tumpukan kartu dari yang belakang. public Kartu ambilSatuKartu(TumpukanKartu tk, Kartu k) : mengambil satu kartu dari tumpukan kartu public void bagiKartu() : fungsi untuk membagikan kartu ke masing-masing pemain. public int getPemenang() : untuk menentukan pemenang public int mainRemi() : fungsi untuk main remi.
public int mainRemi(){ //bersihkan variable win. //lakukan iterasi pada pemain-pemain. ListIterator it = pemain2.listIterator() ; while(it.hasNext()){ //pemain mengeluarkan sebuah kartu yang sesuai dengan kartuAcuan //jika kartu tersebut terdapat pada kartu yang dimiliki oleh pemain, maka tambahkan pada win. //jika pemain tidak mempunyai kartu yang sesuai dengan kartuAcuan maka ambil pada tumpukan kartu sampai menemukan kartu yang sesuai dengan kartuAcuan, selanjutnya kartu tersebut tambahkan pada win. //tentukan pemenang panggil fungsi pemenang(). }
import import import import
com.Kartu; com.TumpukanKartu; java.util.Collections; java.util.Vector;
public class TestKu { public static void main(String[] args) { String jenis[] = {"Hati","Waru"} ; String urutan[] = {"2","3","4"} ; Vector v = new Vector() ; for(int i=0; i<jenis.length ;i++) for(int j=0; j
System.out.println("\nSesudah diurutkan") ; System.out.println(kk.toString()) ; Kartu k1 = new Kartu("ace","Waru") ; Kartu k2 = new Kartu("ace","Hati"); Kartu k3 = new Kartu("ace","Keriting"); int index = kk.getTumpukanKartu().indexOf(k1) ; System.out.println("Kartu : " + k1.toString() + " pada index ke - :" + index) ; System.out.println("Kartu : " + kk.getTumpukanKartu().get(index)) ; index = kk.getTumpukanKartu().lastIndexOf(k2); System.out.println("Kartu : " + k2.toString() + " pada index ke - :" + index) ; System.out.println("Kartu : " + kk.getTumpukanKartu().get(index)) ; index = kk.getTumpukanKartu().lastIndexOf(k3); System.out.println("Kartu : " + k3.toString() + " pada index ke - :" + index) ; } }
Penjelasan Program : Program diatas bertujuan untuk membuat tumpukan kartu dengan 3 jenis bagianMuka (”2”,”3”,”4”) dan 2 jenis kartu ("Hati","Waru"), sehingga tumpukan kartu mempunyai 6 kartu yaitu 2 Hati, 3 Hati, 4 Hati, 2 Waru, 3 Waru dan 4 Waru. Selanjutnya pada tumpukan kartu tersebut lakukan pengacakan, lalu lakukanlah pengurutan. Pengurutan pada tumpukan kartu berdasarkan bagianMuka. Output sebagai berikut : Sebelum diacak 2 Hati 3 Hati 4 Hati 2 Waru 3 Waru 4 Waru Jumlah Kartu : 6 Sesudah diacak 2 Waru 4 Waru 2 Hati 3 Waru 3 Hati 4 Hati Jumlah Kartu : 6 Sesudah diurutkan 2 Waru
2 Hati 3 Waru 3 Hati 4 Waru 4 Hati Jumlah Kartu : 6 Kartu Kartu Kartu Kartu Kartu BUILD
: ace Waru pada index ke - :0 : 2 Waru : ace Hati pada index ke - :5 : 4 Hati : ace Keriting pada index ke - :-1 SUCCESSFUL (total time: 0 seconds)
Fungsi indexOf() ini akan mengembalikan indeks dari Objek yang pertama kali sesuai dengan Objek yang diinginkan. Objek yang sesuai ini berdasarkan kriteria yang didefinisikan pada fungsi equals(Object). Sehingga pada class Kartu definisikan fungsi equals(Object) berdasarkan jenis dari kartu. Contoh : Kartu k1 = new Kartu("ace","Waru") ; int index = kk.getTumpukanKartu().indexOf(k1) ;
Contoh program diatas mengembalikan indek ke – 0 karena pada indeks tersebut indeks yang pertama kali sesuai dengan kartu yang dengan jenis “Waru”. Fungsi lastIndexOf() ini akan mengembalikan indeks dari Objek yang terakhir kali sesuai dengan Objek yang diinginkan. Objek yang sesuai ini berdasarkan kriteria yang didefinisikan pada fungsi equals(Object). Contoh : Kartu k2 = new Kartu("ace","Hati"); int index = kk.getTumpukanKartu().lastIndexOf(k2) ; Contoh program diatas mengembalikan indek ke – 5 karena pada indeks tersebut indeks yang terakhir kali sesuai dengan kartu yang dengan jenis “Hati”.
Gambar UML