Friday, June 21, 2013

part 12

CORBA (Common Object Request Broker Architecture)

Interoperabilitas adalah kemampuan saling bekerjasama antar sistem komputer. Sebenarnya interoperabilitas bukanlah barang baru, karena protokol komunikasi datapun (TCP/IP misalnya) pada dasarnya diciptakan untuk mewujudkan interoperabilitas. Yang belum banyak dikenal adalah interoperabilitas pada level perangkat lunak aplikasi.
Dalam konteks sistem komputer terdistribusi, meskipun komponen-komponen aplikasi dibuat dengan bahasa pemrograman yang berbeda, menggunakan development tools yang berbeda, dan beroperasi di lingkungan yang beragam, mereka tetap harus dapat saling bekerjasama.
Interoperabilitas perangkat lunak menuntut homogenitas pada suatu level tertentu. Untuk itu diperlukan semacam 'standarisasi'. Berawal dari keperluan ini lahirlah CORBA (Common Object Request Broker Architecture). CORBA adalah hasil 'kesepakatan' antara sejumlah vendor dan pengembang perangkat lunak terkenal seperti IBM, Hewlett-Packard, dan DEC, yang tergabung dalam sebuah konsorsium bernama OMG (Object Management Group).
CORBA adalah sebuah arsitektur software yang berbasis pada teknologi berorientasi obyek atau Object Oriented (OO) dengan paradigma client-server. Dalam terminologi OO, sebuah obyek berkomunikasi dengan obyek lain dengan cara pengiriman pesan (message passing). Konteks komunikasi ini kemudian dipetakan ke dalam model client-server: satu obyek berperan sebagai client (si pengirim pesan) dan yang lain bertindak sebagai server (yang menerima pesan dan memroses pesan yang bersangkutan). Sebagai contoh, dalam ilustrasi di awal tulisan ini, jika si pasien memerlukan obat tertentu, maka obyek aplikasi di tempat praktek dokter berlaku sebagai client dan mengirim pesan ke obyek aplikasi di apotik guna mengetahui apakah obat yang diperlukan tersedia di sana.
Keunikan dari CORBA adalah kemampuannya dalam menangani heterogenitas antara client dan server (dalam terminologi CORBA, obyek server dinamakan implementasi obyek (object implementation). Keduanya dapat saja diimplementasikan dalam hardware, sistem operasi, bahasa pemrograman, dan di lokasi yang berbeda, tetapi tetap bisa saling berkomunikasi. Kuncinya ada pada sebuah lapisan software yang disebut dengan ORB(Object Request Broker).

part 11


Multi Threading dan Multiplexing

Dalam ilmu komputer , sebuah thread eksekusi adalah urutan terkecil instruksi diprogram yang dapat dikelola secara independen oleh sistem operasi scheduler . Sebuah thread adalah proses ringan . Pelaksanaan benang dan proses berbeda dari satu sistem operasi yang lain, tetapi dalam banyak kasus, thread yang terkandung di dalam proses. Beberapa benang bisa ada dalam proses yang sama dan berbagi sumber daya seperti memori , sedangkan berbeda proses tidak berbagi sumber daya tersebut. Secara khusus, benang-benang proses berbagi petunjuk yang terakhir (kode) dan konteksnya (nilai-nilai yang variabel yang referensi pada saat tertentu).
Pada prosesor tunggal, multithreading umumnya terjadi oleh time-division multiplexing (seperti dalam multitasking ): dengan prosesor switch antara benang yang berbeda. Ini switching konteks umumnya terjadi cukup sering bahwa pengguna merasakan benang atau tugas sebagai berjalan pada waktu yang sama. Pada multiprosesor atau multi-core sistem, benang dapat benar-benar bersamaan, dengan setiap prosesor atau inti mengeksekusi thread terpisah secara bersamaan.
Banyak sistem operasi modern langsung mendukung baik waktu-iris dan multiprosesor threading dengan scheduler proses. The kernel dari sistem operasi memungkinkan programmer untuk memanipulasi benang melalui system call interface. Beberapa implementasi yang disebut kernel thread, sedangkan proses ringan (LWP) adalah jenis spesifik kernel thread yang berbagi negara dan informasi yang sama.
Program dapat memiliki benang user-space ketika threading dengan timer, sinyal, atau metode lain untuk menghentikan eksekusi mereka sendiri, melakukan semacam ad-hoc waktu mengiris .

Thread berbeda dari tradisional multitasking proses sistem operasi dalam hal:
proses biasanya independen, sedangkan benang ada sebagai subset dari sebuah proses
proses membawa jauh lebih negara informasi dari benang, sedangkan beberapa thread dalam proses berbagi proses negara serta memori dan lainnya sumber daya
proses memiliki terpisah ruang alamat , sedangkan benang berbagi ruang alamat mereka
proses berinteraksi hanya melalui disediakan sistem komunikasi antar-proses mekanisme
konteks beralih antara benang dalam proses yang sama biasanya lebih cepat daripada konteks beralih antara proses.


Multithreading

Multi-threading adalah pemrograman meluas dan eksekusi model yang memungkinkan beberapa thread untuk tetap eksis dalam konteks sebuah proses tunggal. Benang ini berbagi sumber daya proses, tetapi mampu melakukan secara mandiri. Model threaded menyediakan pengembang dengan abstraksi yang berguna eksekusi konkuren. Namun, mungkin aplikasi yang paling menarik dari teknologi ini bila diterapkan pada proses tunggal untuk memungkinkan eksekusi paralel pada sistem multiprocessing.
Ini keuntungan dari program multithreaded memungkinkan untuk beroperasi lebih cepat pada sistem komputer yang memiliki beberapa CPU , CPU dengan beberapa core, atau melintasi sekelompok mesin - karena benang dari program alami meminjamkan diri untuk benar-benar bersamaan eksekusi . Dalam kasus seperti itu, programmer perlu berhati-hati untuk menghindari kondisi ras , dan perilaku non-intuitif lainnya. Agar data yang akan dimanipulasi dengan benar, benang akan sering perlu untuk pertemuan dalam waktu untuk memproses data dalam urutan yang benar. Thread mungkin juga memerlukan saling eksklusif operasi (sering diimplementasikan menggunakan Semaphore ) untuk mencegah data umum dari yang bersamaan dimodifikasi, atau membaca sementara dalam proses modifikasi. Penggunaan ceroboh primitif tersebut dapat menyebabkan deadlock .
Penggunaan lain multithreading, berlaku bahkan untuk sistem single-CPU, adalah kemampuan untuk sebuah aplikasi untuk tetap responsif terhadap masukan. Dalam program single-threaded, jika blok utama benang eksekusi pada tugas lama berjalan, seluruh aplikasi dapat muncul untuk membekukan. Dengan memindahkan tugas berjalan lama tersebut kepada pekerja thread yang berjalan bersamaan dengan eksekusi thread utama, adalah mungkin untuk aplikasi tetap responsif terhadap input pengguna ketika menjalankan tugas di latar belakang. Di sisi lain, dalam banyak kasus multithreading bukan satu-satunya cara untuk menjaga program responsif, dengan non-blocking I / O dan / atau sinyal Unix yang tersedia untuk mendapatkan hasil yang sama. [1]
Sistem operasi menjadwalkan thread di salah satu dari dua cara:
Preemptive multitasking umumnya dianggap pendekatan unggul, karena memungkinkan sistem operasi untuk menentukan kapan beralih konteks harus terjadi. Kerugian untuk multithreading preemptive adalah bahwa sistem dapat membuat context switch pada waktu yang tepat, menyebabkan kunci konvoi , prioritas inversi atau efek negatif lainnya yang dapat dihindari dengan multithreading koperasi.
Multithreading Koperasi, di sisi lain, bergantung pada benang sendiri untuk melepaskan kontrol setelah mereka berada pada titik berhenti. Hal ini dapat menciptakan masalah jika thread sedang menunggu sumber daya untuk menjadi tersedia.
Sampai akhir 1990-an, CPU dalam komputer desktop tidak memiliki banyak dukungan untuk multithreading, meskipun benang masih digunakan pada komputer tersebut karena beralih antara benang itu umumnya masih lebih cepat daripada proses penuh konteks switch . Prosesor di embedded system , yang memiliki persyaratan yang lebih tinggi untuk real-time perilaku, mungkin mendukung multithreading dengan mengurangi waktu benang-switch, mungkin dengan mengalokasikan dedicated register file untuk setiap thread bukan menyimpan / mengembalikan register file umum. Pada akhir 1990-an, ide melaksanakan instruksi dari beberapa thread secara simultan, yang dikenal sebagai multithreading simultan , telah mencapai desktop dengan Intel 's Pentium 4 prosesor, di bawah nama hiper threading . Telah turun dari Intel Core dan Core 2 arsitektur, tetapi kemudian kembali instated di Core I3 , Core i5 dan i7 arsitektur.

part 10

1. Multiprogramming
Multiprogramming adalah kegiatan menjalankan beberapa program pada memori pada satu waktu. Untuk meningkatkan keseluruhan kemampuan dari sistem komputer, para developer memperkenalkan konsep multiprogramming. Dengan multiprogramming, beberapa tugas disimpan dalam memori dalam satu waktu; CPU digunakan secara bergantian sehingga menambah utilisasi CPU dan mengurangi total waktu yang dibutuhkan untuk menyelesaikan tugas-tugas tersebut.

Melayani banyak program yang tidak ada hubungannya satu sama lain dan dijalankan sekaligus dalam satu komputer yang sama. Pelaksanaan instruksi yang diterapkan adalah:
- program dimuat ke dalam memori,
- program dijalankan sampai mengakses perangkat I/O,
- berpindah (switch) ke pekerjaan lain,
- langkah tersebut berulang terus menerus,
- untuk proses perpindahan (switching), dilaksanakan oleh software
2. Multiprocessing
Multiprocessing adalah istilah teknologi informasi dalam bahasa Inggris yang merujuk kepada kemampuan pemrosesan komputer yang dilakukan secara serentak. Hal ini dimungkinkan dengan menggunakan dua CPU atau lebih dalam sebuah sistem komputer. Istilah ini juga dapat merujuk kepada dukungan sebuah sistem untuk mendukung lebih dari satu prosesor dan mengalokasikan tugas kepada prosesor-prosesor tersebut.
Multiprocessing juga kadang merujuk kepada kemampuan eksekusi terhadap beberapa proses perangkat lunak dalam sebuah sistem secara serentak, jika dibandingkan dengan sebuah proses dalam satu waktu, meski istilah multiprogramming lebih sesuai untuk konsep ini. Multiprocessing sering diimplementasikan dalam perangkat keras (dengan menggunakan beberapa CPU sekaligus), sementara multiprogramming sering digunakan dalam perangkat lunak. Sebuah sistem mungkin dapat memiliki dua kemampuan tersebut, salah satu di antaranya, atau tidak sama sekali.
3. Multitasking
Multitasking adalah pemrosesan beberapa tugas pada waktu yang bersamaan. Sebagai contoh, jika seseorang sedang menyetir, bertelepon lewat ponsel, dan sambil merokok secara bersamaan, maka orang tersebut melakukan multitasking.
Multitasking merupakan mekanisme kerja komputer. CPU komputer dapat menangani beberapa proses dalam waktu yang sama secara akurat. Proses yang dikerjakan tergantung pada instruksi yang diberikan oleh software komputer. Oleh sebab itu, untuk memanfaatkan kemampuan CPU secara maksimal, software yang digunakan juga harus memiliki kemampuan multitasking. Saat ini, berbagai software sistem operasi sudah memiliki kemampuan multitasking. Itulah sebabnya, saat ini Anda bisa browsing di halaman web SmitDev, chatting, sambil mendengarkan musik secara bersamaan.
4. Timesharing
Time sharing juga disebut sebagai Multitasking, dimana pengertian ini bisa disamakan dengan multiprogramming, hanya saja waktu prosesnya dibatasi. Waktu maksimum yang digunakan CPU disebut quantum time. Keuntungan time sharing adalah tingkat kebersamaannya menjadi tinggi. Time sharing memerlukan pengaturan kerja input dan output. Secara normal, CPU sanggup memproses lebih dari satu data dalam setiap detik. Dimana pada saat itu, input dan output device juga harus siap untuk memberikan data ataupun menerima hasil proses secara cepat. Oleh karena itu diperlukan adanya penjadwalan kerja yang baik. Banyak “switched” yang bisa bekerja secara otomatis untuk mengatur semuanya dalam waktu yang bersamaan.
Tambahan Catatan Kecil
- Thread yaitu Unit terkecil Proses
- Runnables Yaitu Daftar Tugas Threads
- Syncronization yaitu pengelolaan waktu Runnables

Referensi :
http://id.wikipedia.org/wiki/Multiprocessing

part 9

JDBC (Java database connectivity) adalah spesifikasi standar dari JavaSoft  API (Aplication Programming Interface) yang memungkinkan program Java untuk mengakses sistem database manajemen. JDBC API terdiri dari satu set interface dan kelas yang ditulis dalam bahasa pemrograman Java. JDBC API Menggunakan interface standar dan kelas, programmer dapat menulis aplikasi yang terhubung ke database, mengirimkan pertanyaan ditulis SQL (Structured Query Language), dan memproses hasilnya.
JDBC API ini konsisten dengan gaya inti interface Java dan kelas, seperti java.lang dan java.awt. Tabel berikut ini menjelaskan antarmuka, kelas, dan pengecualian (kelas dilempar sebagai pengecualian) yang membentuk API JDBC. Pada tabel, interface milik paket javax.sql adalah ekstensi untuk antarmuka JDBC standar dan yang terkandung dalam Java 2 SDK, Enterprise Edition.
Interface/class/exception
Deskripsi
Interfaces:         
java.sql.Connection
Interface yang digunakan untuk membuat koneksi ke database. pernyataan SQL dijalankan dalam konteks koneksi.
java.sql.DatabaseMetaData
Interface yang digunakan untuk mengembalikan informasi tentang database.
java.sql.Driver
                                                Interface yang digunakan untuk menemukan driver untuk sistem manajemen database tertentu.
java.sql.PreparedStatement
Interface  yang digunakan untuk mengirim kompilasi pernyataan SQL ke server database dan memperoleh hasilnya.
java.sql.ResultSet
Interface  yang digunakan untuk memproses dan mengembalikan hasil  dari  pernyataan SQL yang di jalankan.
java.sql.ResultSetMetaData
Interface yang digunakan untuk mengembalikan kolom dalam sebuah Object ResultSet.
java.sql.Statement
Interface  digunakan untuk mengirim laporan statis SQL ke server database dan memperoleh hasilnya.
javax.sql.ConnectionEventListener
Menerima event atau kejadian bahwa obyek PooledConnection digeneralisasi.
javax.sql.ConnectionPoolDataSource
                                                                                                Pabrik untuk suatu PooledConnection. Sebuah objek ConnectionPoolDataSource biasanya terdaftar dengan layanan JNDI.
javax.sql.DataSource
Sebuah pabrik untuk objek Connection. Sebuah objek DataSource biasanya terdaftar dengan penyedia layanan JNDI.
javax.sql.PooledConnection
PooledConnection mewakili koneksi fisik ke sumber data.
Classes:               
java.sql.Date
Subclass dari java.util.Date digunakan untuk tipe data SQL DATE.
java.lang.DriverManager
                                Class yang digunakan untuk mengelola satu set JDBC drivers.
java.sql.DriverPropertyInfo
Class yang digunakan untuk menutupi dan memasok properti untuk koneksi
java.sql.Time
Subclass dari java.util.Date digunakan untuk tipedata SQL TIME.
java.sql.TimeStamp
Subclass dari java.util.Date digunakan untuk tipedata SQL TIMESTAMP.
java.sql.Types
Class yang digunakan untuk mendefinisikan konstanta yang digunakan untuk mengidentifikasi tipe data standart  SQL seperti CHAR, INTEGER dan DECIMAL.
java.sql.String
Class yang digunakan untuk mengidentifikasi jenis data teks seperti CHAR.
Exception classes:           
java.sql.SQLException
Eksepsi yang menyediakan informasi tentang Database error
                              
Karena JDBC adalah spesifikasi standar, sebuah program Java yang menggunakan API JDBC dapat terhubung ke sistem manajemen database (DBMS) yang ada driver JDBC-nya

Saturday, June 15, 2013

part 11

Hasil screen shoot dari coding Game Domino pada part 10:

1. Setelah di Running maka akan Tampil di bawah ini lalu isi Nama Pemain ke 1


2. isi kembali Nama pemain ke 2
3. akan ada pemberi Tahuan "yogi di Kocok Secara Acak"
4. Pemberitahuan Untuk Pemain kedua "Ujang Di kocok Secara Acak"...
 5. lalu akan muncul Siapa yang memulainya Yang Pertama yaitu Ujang klik ok,, dan di bawah gambar terlihat tanda Merah itu tampilan kartu masing - masing Peserta.
6. dan Ujang pun memulai permainan Dengan memasukan  "Kepala Angka"
7. dan Ujang pun memulai permainan Dengan memasukan  "Belakang Angka"
8. dan Yogi pun memulai permainan Dengan memasukan  "Kepala Angka" yang sesuai dengan angka yang ujang mainkan.
9. akan ada aksi dari kartu Ujang dalam tanda panah di bawah ini, maka yogi pun harus mengisi aksi tersebut sesuai dengan aksi dari ujang..
10.  setelah aksi tersebut telah di eksekusi oleh yogi maka akan muncul tampilan seperti di bawah ini dalam tanda panah..
11. jangan lupa isi aksi sesuai dengan Perintah permainan di papan aksi...
mana target yang akan kita eksekusi dalam artian "kepala angka atau belakang angka" seperti halnya dalam permainan domino sebenarnya.
12. sampe permain nan beres maka nanti akan ada pemebritahuan siapa pemenangnya.
13. dan terakhir,,, game Domino tersebut masih dalam proses pengembangan...
dan di bawah ini adalah Project GUI yang nantinya saya akan kembangkan,, kalo yang di atas namanya Project java Class masih sederhana tapi kalo yang di bawah sudah Berbentuk Grafic User interface.















part 10

tugas Coding game domino :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Domino;
import java.util.*;

import javax.swing.JOptionPane;

class Variables {


   static Dice dice=new Dice (49);

   static tiles tile=new tiles();

   static String [] character=new String[3];

   static int charcount=0;

   static int player1[][]=new int[2][49];

   static int player2[][]=new int[2][49];

   static int dicevalue;

   static boolean check;

   static boolean checkroll;

   static boolean checkroll1;

   static boolean checkgame=true;

   static int highhead1=0;

   static int highhead2=0;

   static int hightail1=0;

   static int hightail2=0;

   static int interval[][]=new int[2][98];

   static int x2=49;

   static int y2=49;
   static int xx2=49;

   static int yy2=49;

   static int toplace;

   static int counter1;

   static int counterplayer1;

   static int counterplayer2;

   static int temp;

}



 class Dice {

    Random r =new Random();

    int sides;

 //constructor

    public Dice(int s){

       sides = s;

    }

 //roll method depending on sides up there

    public int roll(){



    return r.nextInt(sides);

    }

}



 class tiles {

  static int headcount=0;

  static int tailcount=0;

  static int a=0;

  static int b=0;

  int handler[][]=new int [2][49];

    public void dominotiles(){

        for(int x=0;x<49;x++){

            for(int y=0; y<2; y++){

                if(y==0){

                    if(headcount==7){

                        headcount=0;

                        a=a+1;

                    }

                    if(headcount<=6){

                    handler[y][x]=a;

                    headcount=headcount+1;

                    }

                }

                else {

                    if(tailcount==7){

                        tailcount=0;

                    }

                    if(tailcount<=6){

                     handler[y][x]=tailcount;

                    tailcount=tailcount+1;

                    }

                }

            }

        }

    }

}



public class  Gapleh extends Variables {

    public static void main(String[]args){

      tile.dominotiles();

      for(int x=0;x<49;x++){

        for(int y=0; y<2; y++){

                    player1[y][x]=7;

                    player2[y][x]=7;

        }

      }

     for(int x=0;x<98;x++)

        for(int y=0;y<2;y++){

                interval[y][x]=7;

        }

      newCharacter();
      newCharacter();
      JOptionPane.showMessageDialog(null,character[0]+" Di Kocok Secara Acak");
      for(int x=0;x<7;x++){
          check=true;
        while(check){
           dicevalue=dice.roll();
            if(tile. handler[0][dicevalue]<7 && tile. handler[1][dicevalue]<7){
                player1[0][dicevalue]=tile. handler[0][dicevalue];
                player1[1][dicevalue]=tile. handler[1][dicevalue];
                tile. handler[0][dicevalue]=7;
                tile. handler[1][dicevalue]=7;
                if(highhead1<player1[0][dicevalue]){

                    highhead1=player1[0][dicevalue];
                    hightail1=player1[1][dicevalue];
                }
                check=false;
            }
        }
      }
            System.out.println(character[0]+"'s tiles");
            for(int x=0;x<49;x++){
                    if(player1[0][x]<7&&player1[1][x]<7){
                        System.out.print("("+player1[0][x]+","+player1[1][x]+")");

                        System.out.println();
                    }
            }
      JOptionPane.showMessageDialog(null,character[1]+" Di Kocok Secara Acak");
      for(int x=0;x<7;x++){
          check=true;
        while(check){
           dicevalue=dice.roll();
            if(tile. handler[0][dicevalue]<7 && tile. handler[1][dicevalue]<7){
                player2[0][dicevalue]=tile. handler[0][dicevalue];
                player2[1][dicevalue]=tile. handler[1][dicevalue];

                tile. handler[0][dicevalue]=7;
                tile. handler[1][dicevalue]=7;
                if(highhead2<player2[0][dicevalue]){
                    highhead2=player2[0][dicevalue];
                    hightail2=player2[1][dicevalue];
                }
                check=false;
            }
        }
      }
            System.out.println(character[1]+"'s tiles");
            for(int x=0;x<49;x++){
                    if(player2[0][x]<7&&player2[1][x]<7){
                        System.out.print(player2[0][x]+"\t"+player2[1][x]);
                        System.out.println();
                    }
            }
      if(highhead1>highhead2){
          JOptionPane.showMessageDialog(null,character[0]+" Mangga Tipayun");
          game();
      }
      else if(highhead1<highhead2){
          JOptionPane.showMessageDialog(null,character[1]+" Sok Duluan Mainkan");
          character[2]=character[0];
          character[0]=character[1];
          character[1]=character[2];
          for(int x=0;x<49;x++){
              temp=player1[0][x];
              player1[0][x]=player2[0][x];
              player2[0][x]=temp;
              temp=player1[1][x];
              player1[1][x]=player2[1][x];
              player2[1][x]=temp;
          }
          game();
      }
      else{
          if(hightail1>hightail2){
              JOptionPane.showMessageDialog(null,character[0]+" Mangga Tipayun");
              game();
          }
          else{
              JOptionPane.showMessageDialog(null,character[1]+" Sok Duluan Mainkan");
                character[2]=character[0];
                character[0]=character[1];
                character[1]=character[2];
                for(int x=0;x<49;x++){
                    temp=player1[0][x];
                    player1[0][x]=player2[0][x];
                    player2[0][x]=temp;
                    temp=player1[1][x];
                    player1[1][x]=player2[1][x];
                    player2[1][x]=temp;
                }
              game();
          }
      }
            
      
    }
    public static void newCharacter(){
        if (charcount<2){
            character[charcount]=JOptionPane.showInputDialog("Isi Nama:");
            charcount+=1;
        }
    }
    public static void printgamecycle(){
        System.out.println("Aksi Permainan");
        for(int x=0;x<98;x++){
                if(interval[0][x]<7&&interval[0][x]<7)
                System.out.println(interval[0][x]+"\t"+interval[1][x]);
        }
    }
    
    public static void game(){
        check=true;
        while(check){
            while(check){
                try{
                highhead1=Integer.parseInt(JOptionPane.showInputDialog(character[0]+"'s turn\nEnter Masukan angka kartu domino anda Mas :"));
                hightail1=Integer.parseInt(JOptionPane.showInputDialog(character[0]+"'s turn\nEnter Masukan angka kartu domino anda Mas:"));
                check=false;
                }
                catch(NumberFormatException e){
                JOptionPane.showMessageDialog(null,"ga ada Di kartu punya Mu Mas","ERROR",JOptionPane.ERROR_MESSAGE);
                }
            }
            
            if(highhead1<=6&&highhead1>=0&&hightail1<=6&&hightail1>=0){
                   for(int x=0;x<49;x++){
                      if(player1[0][x]==highhead1&&player1[1][x]==hightail1){
                         interval[0][x2]=player1[0][x];
                         interval[1][y2]=player1[1][x];
                         player1[0][x]=7;
                         player1[1][x]=7;
                      }
                  }
                check=false;
            printgamecycle();
            }
            
      }
        
        
while(checkgame){
    counter1=0;
    for(int x=0;x<49;x++){
        if(tile. handler[0][x]==7&&tile. handler[1][x]==7)
            counter1+=1;
    }
    if(counter1==49){
        for(int x=0;x<49;x++){
            if(player1[0][x]<7&&player1[1][x]<7)
                counterplayer1+=1;
            if(player2[0][x]<7&&player2[1][x]<7)
                counterplayer2+=1;
        }
        if(counterplayer1<counterplayer2){
            JOptionPane.showMessageDialog(null,character[0]+"Wins");
            checkgame=false;
            check=false;
            checkroll=false;
            checkroll1=false;
        }
        else if(counterplayer1>counterplayer2){
            JOptionPane.showMessageDialog(null,character[1]+"Wins");
            checkgame=false;
            check=false;
            checkroll=false;
            checkroll1=false;
        }
        else if(counterplayer1==counterplayer2){
            JOptionPane.showMessageDialog(null,"DRAW!!!");
            checkgame=false;
            check=false;
            checkroll=false;
            checkroll1=false;
        }
    }
        while(true){
            check=false;
            checkroll1=true;
            while(checkroll1){
                checkroll=true;
                for(int x=0;x<49;x++){
                    if(highhead1==player2[0][x]||highhead1==player2[1][x]||hightail1==player2[0][x]||hightail1==player2[1][x]){
                        check=true;
                        checkroll=false;
                        checkroll1=false;
                    }
                    else if(counter1==49){
                        check=false;
                        checkroll=false;
                        checkroll1=false;
                    }
                    
                } 
                while(checkroll){
                    dicevalue=dice.roll();
                        if(tile. handler[0][dicevalue]<7 && tile. handler[1][dicevalue]<7){
                            JOptionPane.showMessageDialog(null,character[1]+" chose to pass, required to get new domino from boneyard");
                            player2[0][dicevalue]=tile. handler[0][dicevalue];
                            player2[1][dicevalue]=tile. handler[1][dicevalue];
                            tile. handler[0][dicevalue]=7;
                            tile. handler[1][dicevalue]=7;
                            highhead2=highhead1;
                            hightail2=hightail1;
                            check=false;
                            checkroll=false;
                            checkroll1=false;
                        }
                        counter1=0;
                        for(int x=0;x<49;x++){
                        if(tile. handler[0][x]==7&&tile. handler[1][x]==7)
                        counter1+=1;
                        }
                        if(counter1==49){
                            check=false;
                            checkroll=false;
                            checkroll1=false;
                        }
                 }    
            }
            System.out.println(character[1]+"'s tiles");
            for(int x=0;x<49;x++){
                if(player2[0][x]<7&&player2[1][x]<7)
                System.out.println("("+player2[0][x]+","+player2[1][x]+")");
            }
            while(check){
                while(check){
                try{
                highhead2=Integer.parseInt(JOptionPane.showInputDialog(character[1]+"'s turn\nEnter a head tile number to use:"));
                hightail2=Integer.parseInt(JOptionPane.showInputDialog(character[1]+"'s turn\nEnter a tail tile number to use:"));
                    while(check){
                    toplace=Integer.parseInt(JOptionPane.showInputDialog("Where to place the tiles:\n[0]head portion\n[1]tail portion"));
                    if(toplace==0||toplace==1){
                        check=false;
                    }
                    else
                    JOptionPane.showMessageDialog(null,"WRONG INPUT","Warning",JOptionPane.WARNING_MESSAGE);
                    }
                check=false;
                }
                catch(NumberFormatException e){
                JOptionPane.showMessageDialog(null,"WRONG INPUT","ERROR",JOptionPane.ERROR_MESSAGE);
                }
                }
                check=true;
            if(toplace==0){ 
                if(highhead2==highhead1){
                   for(int x=0;x<49;x++){
                      if(player2[0][x]==highhead2&&player2[1][x]==hightail2){
                         x2-=1;
                         y2-=1;
                         interval[0][x2]=player2[1][x];
                         interval[1][y2]=player2[0][x];
                         highhead2=player2[1][x];
                         hightail2=hightail1;
                         player2[0][x]=7;
                         player2[1][x]=7;
                         check=false;
                         
                      }
                  }
                }
                else if(hightail2==highhead1){
                     for(int x=0;x<49;x++){
                      if(player2[0][x]==highhead2&&player2[1][x]==hightail2){
                         x2-=1;
                         y2-=1;
                         interval[0][x2]=player2[0][x];
                         interval[1][y2]=player2[1][x];
                         hightail2=hightail1;
                         player2[0][x]=7;
                         player2[1][x]=7;
                         check=false;
                      }
                  }
                }
            }
            
            else if(toplace==1){
                if(highhead2==hightail1){
                   for(int x=0;x<49;x++){
                      if(player2[0][x]==highhead2&&player2[1][x]==hightail2){
                         xx2+=1;
                         yy2+=1;
                         interval[0][xx2]=player2[0][x];
                         interval[1][yy2]=player2[1][x];
                         highhead2=highhead1;
                         player2[0][x]=7;
                         player2[1][x]=7;
                         check=false;
                      }
                  }
                }
                else if(hightail2==hightail1){
                    for(int x=0;x<49;x++){
                      if(player2[0][x]==highhead2&&player2[1][x]==hightail2){
                         xx2+=1;
                         yy2+=1;
                         interval[0][xx2]=player2[1][x];
                        interval[1][yy2]=player2[0][x];
                         highhead2=highhead1;
                         hightail2=player2[0][x];
                         player2[0][x]=7;
                         player2[1][x]=7;
                         check=false;
                      }
                  }
                }
            }

            }
            printgamecycle();
                counterplayer2=0;
                for(int x=0;x<49;x++){
                if(player2[0][x]<7&&player2[1][x]<7)
                counterplayer2+=1;
                }
                if(counterplayer2==0){
                JOptionPane.showMessageDialog(null,character[1]+" Wins!!!");
                checkgame=false;
                check=false;
                checkroll=false;
                checkroll1=false;
                }
                else{
                check=false;
                checkroll1=true;
                }
        break;
    }
                
         
        while(true){ 
            while(checkroll1){
                checkroll=true;
                for(int x=0;x<49;x++){
                    if(highhead2==player1[0][x]||highhead2==player1[1][x]||hightail2==player1[0][x]||hightail2==player1[1][x]){
                        check=true;
                        checkroll=false;
                        checkroll1=false;
                    }
                    else if(counter1==49){
                        check=false;
                        checkroll=false;
                        checkroll1=false;
                    }
                }
                while(checkroll){
                    dicevalue=dice.roll();
                        if(tile. handler[0][dicevalue]<7 && tile. handler[1][dicevalue]<7){
                            JOptionPane.showMessageDialog(null,character[0]+" chose to pass, required to get new domino from boneyard");
                            player1[0][dicevalue]=tile. handler[0][dicevalue];
                            player1[1][dicevalue]=tile. handler[1][dicevalue];
                            tile. handler[0][dicevalue]=7;
                            tile. handler[1][dicevalue]=7;
                            highhead1=highhead2;
                            hightail1=hightail2;
                            check=false;
                            checkroll=false;
                            checkroll1=false;
                        }
                        counter1=0;
                        for(int x=0;x<49;x++){
                        if(tile. handler[0][x]==7&&tile. handler[1][x]==7)
                        counter1+=1;
                        }
                        if(counter1==49){
                            check=false;
                            checkroll=false;
                            checkroll1=false;
                        }
                }
            }
            System.out.println(character[0]+"'s tiles");
            for(int x=0;x<49;x++){
                if(player1[0][x]<7&&player1[1][x]<7)
                System.out.println(player1[0][x]+"\t"+player1[1][x]);
            }
            while(check){
                while(check){
                try{
                highhead1=Integer.parseInt(JOptionPane.showInputDialog(character[0]+"'s turn\nEnter a your head tile number to use:"));
                hightail1=Integer.parseInt(JOptionPane.showInputDialog(character[0]+"'s turn\nEnter a your tail tile number to use:"));

                while(check){

                    toplace=Integer.parseInt(JOptionPane.showInputDialog("Where to place the tiles:\n[0]head portion\n[1]tail portion"));

                    if(toplace==0||toplace==1){

                    check=false;

                    }

                    else

                    JOptionPane.showMessageDialog(null,"WRONG INPUT","Warning",JOptionPane.WARNING_MESSAGE);

                    }

                check=false;

                }

                catch(NumberFormatException e){

                JOptionPane.showMessageDialog(null,"WRONG INPUT","ERROR",JOptionPane.ERROR_MESSAGE);

                }

                }

                check=true;

            if(toplace==0){ 

                if(highhead1==highhead2){

                   for(int x=0;x<49;x++){

                      if(player1[0][x]==highhead1&&player1[1][x]==hightail1){

                         x2-=1;

                         y2-=1;

                         interval[0][x2]=player1[1][x];

                         interval[1][y2]=player1[0][x];

                         highhead1=player1[1][x];

                         hightail1=hightail2;

                         player1[0][x]=7;

                         player1[1][x]=7;

                         check=false;

                         

                      }

                  }

                }

                else if(hightail1==highhead2){

                     for(int x=0;x<49;x++){

                      if(player1[0][x]==highhead1&&player1[1][x]==hightail1){

                         x2-=1;

                         y2-=1;

                         interval[0][x2]=player1[0][x];

                         interval[1][y2]=player1[1][x];

                         hightail1=hightail2;

                         player1[0][x]=7;

                         player1[1][x]=7;

                         check=false;

                      }

                  }

                }

            }

            

            else if(toplace==1){

                if(highhead1==hightail2){

                   for(int x=0;x<49;x++){

                      if(player1[0][x]==highhead1&&player1[1][x]==hightail1){

                        xx2+=1;

                         yy2+=1;

                         interval[0][xx2]=player1[0][x];

                         interval[1][yy2]=player1[1][x];

                         highhead1=highhead2;

                         player1[0][x]=7;

                         player1[1][x]=7;

                         check=false;

                      }

                  }

                }

                else if(hightail1==hightail2){

                    for(int x=0;x<49;x++){

                      if(player1[0][x]==highhead1&&player1[1][x]==hightail1){

                         xx2+=1;

                         yy2+=1;

                         interval[0][xx2]=player1[1][x];

                         interval[1][yy2]=player1[0][x];

                         highhead1=highhead2;

                         hightail1=player1[0][x];

                         player1[0][x]=7;

                         player1[1][x]=7;

                         check=false;

                      }

                  }

                }

            }



            }

            printgamecycle();

                counterplayer1=0;

                for(int x=0;x<49;x++){

                if(player1[0][x]<7&&player1[1][x]<7)

                counterplayer1+=1;

                }

                if(counterplayer1==0){

                JOptionPane.showMessageDialog(null,character[0]+" LOE MENANG!!!");

                checkgame=false;

                check=false;

                checkroll=false;

                checkroll1=false;

                }

        break;

    }

}


}

}