31 Ekim 2015 Cumartesi

GreenFoot Tutorial-3

Actor'ların algılanması ve Yokedilmesi , Metod Tanımlama

Bu tutorial'da aktörlere değdiğinizi algılama ve aktörleri world'den çıkarma işlemlerini göreceğiz. Ayrıca metodlar kullanarak kodunuzu daha okunabilir yapmasını göreceğiz.

Solucanları Yemek

Direk olarak bölüm-2 den devam edeceğiz (o bölümü yapmamış olanlar geri bassın bakalım!..). Hatırlarsanız o bölümde yengeçleri kontrolümüz altında hareket eder hale getirmiştik. Bu bölümde yemeleri için biraz solucan (worm) üreteceğiz.

Crab class'ına halihazırda sahibiz, şimdi solucan için bir Worm class'ı tanımlıyacağız. Worm class'ı da bir aktör olduğu için 'Actor' class'ına sağ tıklıyoruz ve 'New subclass...' seçiyoruz:


 Class name olarak 'Worm' girin -- dikkat ederseniz class adını büyük harfle başlatıyoruz Java dilinde sınıf adları büyük harfle başlar. Sol taraftaki resim listesinden 'worm.png' resmini seçin ve 'OK' tuşuna basın.


Worm class kodunda şimdilik hiçbirşey yok -- aynı Crab sınıfının geçen bölümde olduğu gibi. Bunu aynen böyle bırakacağız. Çünkü bizim solucanlar aptal ve oldukları yerde yenmeyi bekliyorlar. Kolay bir av, şimdi Crab kodumuzu değiştirerek bir solucanın üzerine geldiğinde onu yemesini sağlıyacağız. Crab kodumuzu açalım, şuna benzemişti en son:


'act()' metodu sonuna bazı kodlar ekleyerek yengecimizin bir solucana değip değmediğini kontrol edeceğiz. Bunu gerçekleştirmek amacıyla getOneObjectAtOffset metodunu kullanacağız. Bu metod 3 parametre alır. İlk 2 parametre X ve Y olarak bulunduğıumuz koordinata göreceli konum. Biz burda tam olarak altımızdaki objeyi algılamak istediğimiz için bu değerlere sıfır gireceğiz. 3. parametre ise hangi class'ı aradığımız , buraya da Worm gireceğiz:


 
Dikkat ederseniz sadece metodu çağırmıyoruz, sol tarafında da birşeyler yapıyoruz. Bu metod çalıştırılınca geriye bir değer döner. Bu değer bize aradığımız yerdeki objenin ne olduğunu bildirir. Bu yüzden metoddan geri dönen değeri daha sonra kullanmak amacıyla bir yere saklamalıyız. Bu amaçla worm  adını verdiğimiz bir değişkeni (bir değer saklamak için bellekte bir yer) üst satırda tanımlıyoruz. Daha sonra atama komutuyla (eşit işareti) metoddan dönen değeri bu değişkende saklıyoruz.

Şimdi bulunulan yerdeki obje değeri worm değişkenine saklandı. Eğer bulunulan yerde bir Worm nesnesi yoksa bu değer özel bir değer olan null değeri olacaktır (null hiçbirşey yok manası taşır). O zaman eğer solucan yiyeceksek bu değerin null olmaması gerekir:

  
Java dilinde != 'eşit değil' anlamına gelir. Manası o if bloğu içindeki kod sadece worm içindeki değer null değilse çalışacaktır. If bloğu içinde ilk önce bulunulan world bilgisi 'getWorld()' metoduyla alınıp arkasından bulunan worm objesi bu dünyadan 'removeObject()' metoduyla çıkarılıyor.

Haydi deneyelim, kodu derledikten sonra world üzerine bir adet yengeç ve birkaç solucan yerleştirelim. Kodu çalıştırıp solucanların üzerine yengecimizi götürelim. Solucakları afiyetle götürelim.

Refactoring (Kodu Düzenleme)

Devam etmeden önce kodumuzu biraz düzenleyeceğiz. Buna refactoring denir, kodun yaptığı işi değiştirmeden kodu daha anlaşılır olması amacıyla düzenlemek. Şu anda 'act()' metodu içinde Crab nesnesinin yaptığı 2 değişik işin kodu var. Bir yarısında tuşlar ile kontrol edilen bir hareket yapıyor , diğer yarısında ise bir solucana rastladıysa onu yiyor. Daha sonra geri döndüğümüzde koda bakıp kafamız karışmasın diye bu iki işi birbirinden ayrı yerlere yazmak gerekir. Bu amaçla bu iki işi yeni tanımladığımız metodlar içine yerleştireceğiz. Metod nasıl tanımlanır derseniz kodumuzda gördüğünüz 'act()' de bir metod olduğuna göre aynen ona bakarak yapabiliriz.

İki yeni metodumuzun da parametreye ihtiyacı yok ve geriye bir değer dönmeyecekler. Bu durumda aynen 'act()' gibi tanımlayabiliriz:

Bu şeklini incelediğimizde kodun içinden bir şey eksiltmediğimiz görünüyor. İlk yarısını 'moveAndTurn()' metodu içine taşıdık ikinci yarısını da 'eat()' metodu içine taşıdık. Sonra 'act()' metodu içinde bu iki tanımladığımız metodu çağırdık. Çalışması değişmedi ama iki ayrı iş yapan kodları birbirinden ayırarak kod okunurluğunu artırdık. İlerde yüzlerce iş yapan kodlar yazdıkça bunun gereğini çok daha iyi anlayacaksınız.

Hadi bakalım..



Hiç yorum yok:

Yorum Gönder