FareNeYapar kalıbı MouseInputAdapter isimli kütüphanede mevcut bir sınıftan türemektedir.
Fare hareketleri ile nesneler arasında organizmada sinirlerde oluşan akıma benzeyen bir iletişim mevcuttur. Event driven diye anılan tekniğe göre fare tuşuna basış bir uyarı olarak yayınlanmakta ve bir nesnelerden de kontrol edilerek bu uyarı yakalanabilmektedir.
Amacım, bir satranç karesine basılınca(mousePressed) o karenin saptanması(ilk) ve fare tuşu basılı olarak sürüklenip gittiği noktada bırakılınca(mouseReleased) gene o karenin (son) olarak belirlenmesidir.
Nokta, kütüphanede mevcut basit bir sınıf olup Point ismi ile anılmaktadır. Her Point nesnesinin x ve y olarak iki değeri bulunmaktadır. Kullandığım ilk.nokta ve son.nokta nesneleri Point kalıbından türedikleri için o nesneler hareketin başladığı ve bittiği noktaların yerlerini satır ve sütun sayısı olarak içermektedir. Bu örnek olarak ilk.x=1. ilk.y=1 noktasından son.x=1, son.y=3 noktasına bir taşı oynatırken kullanılacaktır.
private SatrancKare sonKare() metodu da bir fonksiyon olarak farenin ekran üzerinde bulunduğu pixel olarak koordinatlarından satranç karesinin pixel olarak genişlik miktarlarına bölerek bulunan satır ve sütun sayılarına dönüşümü sağlayıp sonucu sonKare olarak vermektedir.
Fare ile tıklama(mouseClicked ) metodunun amacı, piyon son kareye kadar ulaşıp değerli taş olunca istenen taşı tahta veya taş kutusundan seçmektir. Daha sonra da piyon son kareye sürüklenecektir.
Fare tuşu sürüklenip gittiği noktada serbest bırakılınca
Oynat.oynaDogruHamle(ilk.nokta, son.nokta);
Oynat sınıfındaki oynaDogruHamle metodunu harekete geçirerek taşı oynatacaktır.
public static class FareNeYapar extends MouseInputAdapter {
public C c=new C();
private SatrancKare ilk=new SatrancKare();
private SatrancKare son=new SatrancKare();
private SatrancKare klk=new SatrancKare();
Point basilanNokta=new Point();
Point birakilanNokta=new Point();
Point karedeBasiNokta=new Point();
public FareNeYapar () {
}
private SatrancKare sonKare() {
int dx=0;
int dy=0;
if (birakilanNokta.x>basilanNokta.x)
dx=(int)((+karedeBasiNokta.x+birakilanNokta.x-basilanNokta.x)/C.kd);
else
dx=(int)((-karedeBasiNokta.x+birakilanNokta.x-basilanNokta.x)/C.kd);
if (birakilanNokta.y>basilanNokta.y)
dy=(int)((+karedeBasiNokta.y+birakilanNokta.y-basilanNokta.y)/C.kd);
else
dy=(int)((-karedeBasiNokta.y+birakilanNokta.y-basilanNokta.y)/C.kd);
son.nokta.x=ilk.nokta.x+dx;
son.nokta.y=ilk.nokta.y-dy;
return son;
}
@Override
public void mousePressed(MouseEvent e) {
ilk=(SatrancKare) e.getSource();
basilanNokta=e.getLocationOnScreen();
karedeBasiNokta=e.getPoint();
}
@Override
public void mouseReleased(MouseEvent e) {
birakilanNokta=e.getLocationOnScreen();
son=sonKare();
Oynat.oynaDogruHamle(ilk.nokta, son.nokta);
}
@Override
public void mouseClicked(MouseEvent e){
klk=(SatrancKare) e.getSource();
C.ustunIkon=klk.getIcon();
C.ustunYer=klk.yerNo;
}
}
No comments:
Post a Comment