Zar Atma Programı

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class zaratma {
	
	static JFrame win = new JFrame("Zar Atma Uygulaması");
	static JButton dice = new JButton("Zar At");
	

	public static void dice() {	
		Random ran = new Random();
		int dice1 = ran.nextInt(6)+1;
		int dice2 = ran.nextInt(6)+1;
		
		JLabel dicee1 = new JLabel(new ImageIcon("C:\\Users\\talha\\Desktop\\dices\\"+dice1+".png"));
		JLabel dicee2 = new JLabel(new ImageIcon("C:\\Users\\talha\\Desktop\\dices\\"+dice2+".png"));
		
		dicee1.setBounds(185, 100, 100, 100);	
		dicee2.setBounds(295, 100, 100, 100);
		
		System.out.println(dice1);
		System.out.println(dice2);

		switch(dice1){
		case 1:
			win.add(dicee1);
			break;
		case 2:
			win.add(dicee1);
			break;
		case 3:
			win.add(dicee1);
			break;
		case 4:
			win.add(dicee1);
			break;
		case 5:
			win.add(dicee1);
			break;
		case 6:
			win.add(dicee1);
			break;
		}
		
		switch(dice2){
		case 1:
			win.add(dicee2);
			break;
		case 2:
			win.add(dicee2);
			break;
		case 3:
			break;
		case 4:
			win.add(dicee2);
			break;
		case 5:
			win.add(dicee2);
			break;
		case 6:
			win.add(dicee2);
			break;
		}
	}
	public static void main(String[]args) {
		win.setSize(600,400);
		win.getContentPane().setBackground(new Color(36, 5, 2));
		win.setLayout(null);
		
		dice.setBounds(240, 325, 100, 30);
		dice.setBackground(new Color(10, 3, 2));
		dice.setForeground(Color.LIGHT_GRAY);
		dice.setBorderPainted(false);
		
	
		

		
		
		dice.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dice();
			}	
		});
		

		win.add(dice);
		win.setVisible(true);
	}
}

Merhabalar zar atan bir uygulama yaptım. Bazı sorunlar var elbet :smiley:
Sorunlar:

  1. Resimleri dosyadan gayet güzel çekiyor fakat programda resim gözükmüyor. Eğer programı boyutunu değiştirirseniz(kod ile değil) resimler gözükmeye başlıyor.

  2. İkincisi zarat fonksiyonu ikinci kez tuşa bastığımda çalışmıyor.

Resim dosyalarını isterseniz : http://www.mediafire.com/folder/02q0xt1x7zgg1/dices

@coderistan bir el at kardeşim be :smiley:

Programda birkaç eksiklik ve fazlalık var.

  • Pencerenin kapatma tuşuna basınca pencere kapanıyor ama program arkaplanda çalışmaya devam ediyor. Programın komple kapanabilmesi için her programda şunu eklemeniz gerekiyor.
    pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  • switch-case ifadesi gereksiz olmuş. Onları hiç yazmasanız da olur.

  • Resimlerin ekranda görüntülenmemesinin sebebi pencerenin hemen yenilenmemesidir. Yani ekleme işlemini yaptıktan sonra, arayüzü yenilemelisiniz. Bir kaç yolu var. İncelemek için şuraya bakın
    SwingUtilities.updateComponentTreeUI(win);

  • Butonun ikinci kez çalışmama durumu yok. Sadece her butona bastığınızda yeniden iki JLabel oluşturuyorsunuz ve pencereye önceden eklenmiş iki JLabel nesnesinin olduğu yere yerleştiriyorsunuz. Yani her seferinde ekrandaki JLabel sayısı artıyor gereksiz yere. Önlemenin iki yolu var. Ya önceki durumda eklediğiniz JLabel nesnelerinin resmini güncelleyeceksiniz ya da onları kaldırıp tekrar JLabel nesnesi ekleyeceksiniz.

  • Programınızı Nesne Yönelimli Programlamaya uygun yazarsanız yönetimi kolay olur. Ben sizin için programı tekrar düzenliyorum, inceleyebilirsiniz.

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class ZarAtma {

    Random ran = new Random();
    JFrame win;
    JButton zarButon;
    JLabel dicee1;
    JLabel dicee2;

    public ZarAtma() {
        // Pencere ayarları
        this.win = new JFrame("Zar Atma Uygulaması");
        win.setSize(600, 400);
        win.getContentPane().setBackground(new Color(36, 5, 2));
        win.setLayout(null);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Buton ayarları
        this.zarButon = new JButton("Zar At");
        zarButon.setBounds(240, 325, 100, 30);
        zarButon.setBackground(new Color(10, 3, 2));
        zarButon.setForeground(Color.LIGHT_GRAY);
        zarButon.setBorderPainted(false);

        zarButon.addActionListener((ActionEvent e) -> {
            zarAt();
        });

        // Resim nesneleri
        this.dicee1 = new JLabel();
        this.dicee2 = new JLabel();

        dicee1.setBounds(185, 100, 100, 100);
        dicee2.setBounds(295, 100, 100, 100);

        win.add(dicee1);
        win.add(dicee2);
        win.add(zarButon);
        win.setVisible(true);
    }

    public void zarAt() {
        int dice1 = ran.nextInt(6) + 1;
        int dice2 = ran.nextInt(6) + 1;
        System.out.println(dice1 + " " + dice2);

        dicee1.setIcon(new ImageIcon("/home/coderistan/dices/" + dice1 + ".png"));
        dicee2.setIcon(new ImageIcon("/home/coderistan/dices/" + dice2 + ".png"));

        SwingUtilities.updateComponentTreeUI(win);
    }

    public static void main(String[] args) {
        // Program başlangıç noktası
        new ZarAtma();
    }
}

Zar resimlerinden olan 1.png dosyasının boyutu büyük, o yüzden onun boyutunu 100x100 olarak ayarlarsanız herşey tamamdır.

3 Beğeni

Stackoverflow’da genelde bu şekilde insanlara yol gösterilir. Doğru olan da bu aslında. Birine balık tutmak yerine balık tutmayı öğretmek lazım.

2 Beğeni

Bu da bir bakış açısı :smiley:

SO’daki soruya baktim. Kodda Swing’in ilk prensiplerine bile baglilik olmadigi, bir suru yaklasim hatasi oldugu icin Swing tutorial’ini bitirip bu yola tekrar koyulmani tavsiye etmisler. Buna ragmen spesifik hatalari ve nasil cozuleceklerini de yazmislar. (Ama @coderistan’in yaptigi gibi cozulmus hazir kodu vermemisler. {Buraya balik hikayesini yazarken bizzat kendisinin refere ettigini gordum. <3}) Burada bir sorun goremedim.

Bu arada MediaFire toplu dosya indirmeye izin vermiyor. Insanlarin asset’leri tek bir klikle indirebilecegi bir cozum bulursan (ziplemek gibi) ve kodu degistirmeden kullanmalarini saglayabilirsen daha cok kisi yardim eder.

2 Beğeni

Anlamadım :confused:

Yani Stack Overflow’da sorduğun soruya gelen cevaplar gayet yerinde, doğru önerilerde bulunmuşlar. Benim gibi hazır kodu önüne koymamaları daha iyi :smiley: Bunda bir sorun yok demek istemiş. Ayrıca paylaştığın dosyalar tek bir dosya halinde(zip vs) olursa insanlar daha rahat erişip yardımcı olabilir.

1 Beğeni