merhabalar sizlerle javadaki ilk oyunumu paylaşmak istedim.oyun açıldığında 1’den 15’e kadar olan sayıları rasgele butonlar şeklinde dizmekte.

ekran görüntüsü
ekran görüntüsü

eğer söz konusu buton olması gereken yerde ise arkaplanı sarımsı renk alıyor. Sıralamayı doğru olarak tamamlarsanız bitirdiğinize dair bir mesaj görüntülüyor.çalıştırılabilir .jar dosyasına buradan, dosya halindeki kaynak koduna da buradanulaşabilirsiniz.kodlar arasında yorum satırlarıyla, programı adım adım açıklamaya çalıştım.umarım yararlı olur.import java.awt.Color;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Random;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;public class SayiYerlestirme extends JFrame{/** 05 Haziran 2009* Mehmet Demir, [email protected]* ewep.blogspot.com*/JPanel panel = new JPanel(); JButton bos = new JButton(“”);JButton[] butonlar;public SayiYerlestirme(){//4 satır 4 sutun şeklinde ızgaramızı oluşturalım.panel.setLayout(new GridLayout(4,4,2,2));//butonlari yerleştirelim.butonlariYerlestir();add(panel);}private void butonlariYerlestir() {//butonlari rasgele yerleştirmek için gereken nesneRandom rnd = new Random();butonlar = new JButton[16];int butonText = 0;//ızgarada boş olan yer neresi ise onu tutacak degiskenint bosYer = 16; int gecici = 0;//paneldeki bileşen sayısı 15 değil isewhile(panel.getComponentCount() != 15){//rasgele bir buton numarası elde et.butonText = rnd.nextInt(15)+1;if(butonlar[butonText] == null){//butonu oluştur, arkaplan rengi açık gributonlar[butonText] = new JButton(“”+butonText);butonlar[butonText].setBackground(Color.lightGray);//butonun bulunacağı konumunu butona özellik olarak eklebutonlar[butonText].putClientProperty(“konum”, panel.getComponentCount()+1);panel.add(butonlar[butonText]);//butona butonAction’ı eklebutonlar[butonText].addActionListener(butonAction());}}bos.addActionListener(butonAction());//boş olanın konumu 16 olacaktır. boş butonu da eklebos.putClientProperty(“konum”, 16);bos.setBackground(Color.lightGray);panel.add(bos);//bir bak hele oyun bitmiş mioyunBittimi();}private ActionListener butonAction() {ActionListener actionlistener = new ActionListener(){//butona tıklandığındapublic void actionPerformed(ActionEvent arg0) {//kaynak butona işaret etJButton buton = (JButton)arg0.getSource();//butona iliştirilen konum bilgisini al,int butKonumu = (Integer) buton.getClientProperty(“konum”);//boş olan yerin konum bilgisini alint bosKonumu = (Integer) bos.getClientProperty(“konum”);//boş olan buton, tıklanan butonun,//bir sağında mı?, bir solunda mı?, aşağısında, yukarısında mı?if((bosKonumu == (butKonumu + 1)) || (bosKonumu == (butKonumu – 1)) || (bosKonumu == (butKonumu – 4)) || (bosKonumu == (butKonumu + 4)) ){//öyle ise, yer değiştirebilirler//tıklanan butonun textini bosunki yap.bos.setText(buton.getText());//butonun textini boş yap.buton.setText(“”);//geçiş için gereken nesne, gec butonu artık bos butonu oldu.JButton gec = (JButton) bos;//bos butonu artık tıklanan buton oldu.bos = (JButton) buton;//bos butonunun rengini açık gri yap.sbos.setBackground(Color.lightGray);//geçiş için kullandığımız nesneyi buton’a atadık.buton = (JButton) gec;//bakalım oyun bitmiş mioyunBittimi();}}};return actionlistener;}private void oyunBittimi() {//sayilarin istenen yerde olması anlamında, esitolanlarint esitolanlar = 0;//15 sayımız olacak, 15 sınama yapacağızfor(int i = 1; i<16; i++){if(!butonlar[i].getText().equals("")){//söz konusu butonun texti boş değilse,//söz konusu butonun texti butonun konumuna eşit mi?if(Integer.parseInt(butonlar[i].getText()) == (Integer)butonlar[i].getClientProperty("konum")){//evet, eşit, o zaman buton istenen yerdedir,//arkaplan rengini sarımsı yap.butonlar[i].setBackground(Color.getHSBColor(110, 100, 120));//esitolanlar'ı bir arttır.esitolanlar++;}}}if(esitolanlar == 15){//butonların hepsi olması gereken yerde mi?JOptionPane.showMessageDialog(null, "Tebrikler oyunu tamamladınız...", "Oyun Bitti!", JOptionPane.CLOSED_OPTION);}}public static void main(String args[]){SayiYerlestirme app = new SayiYerlestirme();app.setSize(300,300);app.setTitle("Sayı Yerleştirmece");app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setVisible(true);}}