Senin, 12 Desember 2011

Contoh Program Subrutin dan Variabel Statik


Pertama-tama kita akan ubah algoritma untuk menentukan siapa yang menang. Dalam program sebelumnya, kita gunakan pernyataan switch case, yaitu kita tuliskan semua kemungkinan dalam permainan.
Jika Anda ingat, Jempol dilambangkan dengan 0, Telunjuk dilambangkan dengan 1, dan Kelingking dilambangkan dengan 2. Cara lain untuk menentukan pemenangnya adalah dengan mengurangi suitKomputer dan suitUser
delta = suitKomputer - suitUser;
Apabila delta = 0, maka permainan berakhir seri. Sekarang coba masukkan apabila komputer 0 (Jempol) dan user 1 (Telunjuk). Dalam hal ini delta bernilai -1, dan ini berarti komputer menang. Dengan kata lain, apabila delta bernilai -1 maka komputer menang, dan apabila delta bernilai 1, maka user menang.
Coba lagi juga komputer 0 (Jempol) dan user 2 (Kelingking). Dalam hal ini delta -2, dan ini berarti user menang sesuai dengan aturan bahwa Kelingking menang melawan Jempol.
Dengan sifat seperti di atas, kita bisa ubah pernyataan switch case pada program sebelumnya dengan
        // menghitung siapa yang menang
        int delta = suitKomputer - suitUser;
 
        switch (delta) {
            case 0:
                seri++;
                System.out.println("Hasilnya : Seri");
                break;
            case 1:
            case -2:
                userMenang++;
                System.out.println("Hasilnya : Anda menang");
                break;
            case -1:
            case 2:
                komputerMenang++;
                System.out.println("Hasilnya : Anda kalah");
                break;
        }
Kemudian, kita tambahkan lagi variabel statik yang fungsinya digunakan untuk mendata berapa kali komputer menang, berapa kali Anda menang dan berapa kali seri.
public static int userMenang = 0;
public static int komputerMenang = 0;
public static int seri = 0;
Kemudian kita akan pindahkan sebagian kode pada subrutin main sehingga dapat dipanggil berkali-kali tanpa harus menulis seluruh kode lagi. Kita namakan subrutin ini mainGame().
Kodenya sebagai berikut :
    public static int userMenang = 0;
    public static int komputerMenang = 0;
    public static int seri = 0;
 
    public static void mainGame() {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // variabel untuk mengambil input dari user
        String input = null;
 
        // Kita gunakan pernyataan while hingga user betul
        // memasukkan salah satu dari J, T, atau K
        boolean inputvalid = false;
 
        int suitKomputer = 0;
        int suitUser = 0;
 
        // selama input tidak valid, jalankan perulangan ini
        while (!inputvalid) {
            System.out.print("Masukkan suit Anda ");
            try {
                input = br.readLine();
            } catch (IOException ioe) {
                System.out.println("Kesalahan IO, program berhenti");
                System.exit(1);
            }
 
            // pastikan bahwa user memasukkan sesuatu dengan mengecek
            // apakah panjang input > 0
            // jika tidak, maka perulangan akan dilanjutkan
            if (input.length() > 0) {
                switch (input.charAt(0)) {
                    case 'j' :
                    case 'J' :
                        suitUser = 0;
                        inputvalid = true;  // kita ganti inputvalid agar perulangan selesai
                        break;
                    case 't' :
                    case 'T' :
                        suitUser = 1;
                        inputvalid = true;  // kita ganti inputvalid agar perulangan selesai
                        break;
                    case 'k' :
                    case 'K' :
                        suitUser = 2;
                        inputvalid = true;  // kita ganti inputvalid agar perulangan selesai
                        break;
                }
            }
        }
 
        // sekarang menghitung suit komputer
        // Math.random() menghasilkan nilai acak antara 0 dan 1
        // jika kita kali 3, berarti menghasilkan nilai acak antara 0 dan 3
        // perintah (int) untuk mengubah bilangan real menjadi bilangan bulat
        // dengan cara menghilangkan semua digit di belakang koma
        // misalnya 1.0232323 menjadi 1
        suitKomputer = (int)(Math.random()*3);
 
        // suatu saat "mungkin" nilai random bernilai 3
        // karena 3 tidak ada dalam suit kita, maka kita harus ubah menjadi
        // salah satu suit yang valid, yaitu 0, 1, atau 2
        // dalam hal ini kita ganti jadi 2
        if (suitKomputer == 3) {
            suitKomputer = 2;
        }
 
        // menghitung siapa yang menang
        int delta = suitKomputer - suitUser;
 
        switch (delta) {
            case 0:
                seri++;
                System.out.println("Hasilnya : Seri");
                break;
            case 1:
            case -2:
                userMenang++;
                System.out.println("Hasilnya : Anda menang");
                break;
            case -1:
            case 2:
                komputerMenang++;
                System.out.println("Hasilnya : Anda kalah");
                break;
        }
    }
Sekarang kita ubah subrutin main()-nya, sehingga komputer akan menanyakan Anda untuk main lagi atau tidak. Jika jawabannya ya, maka permainan akan diteruskan, dan statistik menang-kalah-seri akan ditampilkan. Jika tidak, hanya tampilkan statistiknya saja, kemudian program akan keluar.
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        // cetak aturan main dan input dari user
        System.out.println("Permainan suit");
        System.out.println("==============");
        System.out.println("Masukkan salah satu dari 3 kemungkinan :");
        System.out.println("J untuk Jempol");
        System.out.println("T untuk Telunjuk");
        System.out.println("K untuk Kelingking");
        System.out.println(""); // baris kosong
 
        while (true) {
            mainGame();
 
            // tampilkan statistik
            System.out.println("Statistik :");
            System.out.println("Komputer = " + komputerMenang + "    Anda = " + userMenang + "    Seri = " + seri);
            System.out.println(""); // baris kosong
 
            // variabel untuk mengambil input dari user
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String input = null;
 
            System.out.print("Main lagi (Y/T) ? ");
            try {
                input = br.readLine();
            } catch (IOException ioe) {
                System.out.println("Kesalahan IO, program berhenti");
                System.exit(1);
            }
 
            // keluar jika jawabannya tidak
            if ((input.charAt(0) == 't') || (input.charAt(0) == 'T'))
                break;
        }
    }
Berikut ini hasil keluarannya

Tidak ada komentar:

Posting Komentar