24 Aralık 2013 Salı

Uzaklık Hesaplama

Bu yazıda matematik dersinden tanıdığımız, öğrendikten sonra “iyi ama hocam bu ne işimize yarayacak?” dediğimiz bir teoremin de yardımıyla iki nesne arasındaki uzaklığı bulmayı deneyeceğiz. Şimdi Pisagor Teoremi olmadan neler yapabileceğimize bir göz atalım.
  • Nesnelerin x koordinatı üzerindeki konumları birbirine eşitse:
|Y1 – Y2| yani birinci nesnenin ikinci nesneyle arasındaki farkın mutlak değeri uzaklığa eşittir.
  • Nesnelerin y koordinatı üzerindeki konumları birbirine eşitse:
|X1 – X2|
Pisagor Teoremi olmadan yapabileceklerimizi gördük. Şimdi sıra Pisagor Teoremini kullanmaya geldi. Yani:
  • Nesnelerin x ve y koordinatı üzerindeki konumları eşit değilse:
|Y1 – Y2| ^ 2 + |X1 – X2| ^ 2 = Hipotenüs(uzaklık)
Pisagor Teoremi ile ne yapabileceğimizi gördüğümüze göre artık yaptıklarımızı koda çevirelim.
Math.abs(birinci_obje.getY() - ikinci_obje.getY()); // birinci durum
Math.abs(birinci_obje.getX() - ikinci_obje.getX()); // ikinci durum
a = Math.abs(birinci_obje.getY() - ikinci_obje.getY()); // üçüncü durum
b = Math.abs(birinci_obje.getX() - ikinci_obje.getX());
c = Math.sqrt(Math.hypot(a,b));

9 Aralık 2013 Pazartesi

Basit Yapay Zeka

Yapmaya çalıştığımız oyun için hazırladığım yapay zeka örneği. Ninja objesi ile arasındaki farkı hesaplayıp farka göre işlemler yapan bir yapay zeka.
import greenfoot.*;
import java.awt.Graphics2D;
import java.awt.Color;
public class Polis extends Actor
{
    private int x;
    private Actor duvar;
    public Polis()
    {
        GreenfootImage katman1 = new GreenfootImage(10,10);
        GreenfootImage katman2 = new GreenfootImage("polis.png");
        katman2.drawImage(katman1,katman1.getWidth() / 2, katman1.getHeight() / 2);
        GreenfootImage katman3 = new GreenfootImage(100,100);
        Graphics2D oval = katman3.getAwtImage().createGraphics();
        oval.setColor(Color.BLUE);
        oval.drawOval(0,0,100,100);
        katman3.drawImage(katman2,30,30);
        setImage(katman3);
    }
    private void rastgele()
    {
        if(Greenfoot.getRandomNumber(150) <= 5)
        {
            turn(90);
        }
        if(getX() >= getWorld().getWidth() - 1 || getX() <= 1 || getY() 
        >= getWorld().getHeight() - 1 || getY() <= 1)
        {
            turn(180);
        }
        if(duvar != null)
        {
            x++;
            if(x == 1)
            {
                turn(180);
            }
        }
        else
        {
            x = 0;
        }
    }
    private double hipotenus()
    {
        Bolum1 bolum1 = (Bolum1) getWorld();
        Ninja ninja = bolum1.getNinja();
        int x = Math.abs(getX() - ninja.getX());
        int y = Math.abs(getY() - ninja.getY());
        double x_dogrusu = (double)x;
        double y_dogrusu = (double)y;
        return Math.hypot(x_dogrusu,y_dogrusu);
    }
    private int mesafe()
    {
        Bolum1 bolum1 = (Bolum1) getWorld();
        Ninja ninja = bolum1.getNinja();
        if(ninja.getY() != getY() && ninja.getX() != getX())
        {
            double hipot = hipotenus();
            int uzaklik = (int) Math.sqrt(hipot);
            return uzaklik;
        }
        else if(ninja.getY() == getY())
        {
            return Math.abs(ninja.getX() - getX());
        }
        else
        {
            return Math.abs(ninja.getY() - getY());
        }
    }
    public void act()
    {
        GreenfootSound ses = new GreenfootSound("bip.wav");
        Bolum1 bolum1 = (Bolum1) getWorld();
        Ninja ninja = bolum1.getNinja();
        Katman katman = bolum1.getKatman();
        duvar = getOneIntersectingObject(Duvar.class);
        move(2);
        if(mesafe() <= 10 && duvar == null)
        {
            if(duvar != null)
            {
                x++;
                if(x == 1)
                {
                    turn(180);
                }
            }
            else
            {
                x = 0;
            }
            turnTowards(ninja.getX(),ninja.getY());
            ses.setVolume(60);
            ses.play();
            katman.setAktif(true);
        }
        else
        {
         rastgele();
         katman.setAktif(false);
        }
    }
}

28 Kasım 2013 Perşembe

Kontrol Sistemi

Balık tutma oyunu için yapmaya çalıştığım kontrol sistemi.
import greenfoot.*;
import java.awt.Graphics2D;
import java.awt.Color;
public class Ark extends Actor
{
    private int obje_x;
    private int fare_x;
    private int uzunluk;
    public Ark()
    {
    }
    private int uzunluk_olc()
    {
        if(uzunluk < 0)
        {
            return Math.abs(uzunluk);
        }
        else
        {
            return uzunluk;
        }
    }
    public void act()
    {
        try
        {
            MouseInfo m1 = Greenfoot.getMouseInfo();
            if(getX() + Math.abs(uzunluk) == m1.getX())
            {
                System.out.println("Denklem doğru");
            }
            obje_x = getX();
            fare_x = m1.getX();
            uzunluk = obje_x - fare_x;
            GreenfootImage image = new GreenfootImage(uzunluk_olc(),200);
            Graphics2D g2 = image.getAwtImage().createGraphics();
            g2.setColor(Color.BLACK);
            g2.drawArc(0,0,uzunluk_olc(),200,-180,-180);
            setImage(image);
        }
        catch(NullPointerException e){}
        catch(IllegalArgumentException e){}
    }
}

14 Ekim 2013 Pazartesi

1. Senem

Bu kadar uzun süre yazacağımı tahmin edemezdim. Neyse LEGEPE'nin 1. yıldönümü kutlu olsun!

21 Ağustos 2013 Çarşamba

Greenfoot ile Top Sektirme Oyunu

Bu yazıda sizlere bir top sektirme oyunu üzerinden fare olaylarını anlatmaya çalışacağım. Öncelikle fareyi kontrol etmek için hangi sınıfların hangi metodlarını kullanacağımıza bir göz atalım.

Greenfoot sınıfının mousePressed() metodu farenin tuşlarından birine basıldığında true değer döndürür. Bir önceki cümleden anlaşıldığı üzere boolean bir metoddur. Parametre olarak this veya null değerini alır. This değerini alırsa sadece fare kendi üzerine tıklarsa koşul gerçekleşir. Null değerindeyse herhangi bir yere tıklandığında koşul gerçekleşmiş olur.
turnTowards(fare.x,fare.y) metodu nesnenin açısını farenin açısına eşitler.
mouseClicked() metodu mousePressed() metoduna benzer. Aralarındaki fark şudur: mousePressed() metodunda farenin herhangi bir tuşuna basma ile çekme arasında sonsuz defa işlem yapabilir. Ancak mouseClicked() metodu bu arada sadece bir defa işlem yapar. Şimdi diğer sınıfımıza geçelim. MouseInfo sınıfını kullanabilmek için bir MouseInfo türünden bir referans oluşturmamız gerekir. Şu şekilde:

MouseInfo fare = Greenfoot.getMouseInfo();
Şimdi sınıfın metodlarına bakalım.

getX(): Farenin x koordinatı üzerindeki değerini geri döndürür.
getY(): Farenin y koordinati üzerindeki değerini geri döndürür.
getButton(): Farenin hangi tuşuna basıldığını gösterir. Eğer döndürdüğü değer bire eşitse sol tuşa, ikiye eşitse ortadaki tuşa ve üçe eşitse sağ tuşa bastığı anlamına gelir. Sınfıfların metodlarını gördüğümüze göre oyunumuzu yapmaya başlayabiliriz. Öncelikle yeni bir Greenfoot Projesi açıyoruz.

Hemen ardından "Top" adında bir aktör ve "Oyun" adında bir dünya yaratıyoruz. "Oyun" adlı dünyamıza çift tıklayıp açılan pencereye şu kodları yazıyoruz:

Oyun.java
import greenfoot.*;
import java.awt.Color;
public class Oyun extends World
{
public Oyun()
{
super(300,300,1); // 300x300 boyutlarında bir dünya yarattık.
getBackground().setColor(Color.GREEN);
getBackground().fill(); // arkaplanı yeşil yaptık.
Top top = new Top(); // top nesnesi oluşturduk.
addObject(top,150,150); // nesnemizi dünyaya ekledik.
}
}
Şimdi "Top" adlı aktörümüze çift tıklayıp açılan pencereye şu kodları
yazıyoruz:

Top.java
import greenfoot.*;
public class Top extends Actor
{
private int yercekimi;
public Top()
{
setImage("top.png");
}
private void yercekimi(int ekle) // bununla ilgili bir yazı yazmıştım.
{
yercekimi += ekle;
setLocation(getX(),getY() + yercekimi);
}
private void sektir()
{
if(Greenfoot.mouseClicked(this))
{
yercekimi = 0;
setLocation(getX(),getY() - 10);
}
}
public void act()
{
yercekimi(1);
sektir();
if(getY() >= getWorld().getHeight() - 1)
{ /* eğer y koordinatımız dünyamızın boyunun 1 eksiğine eşitse
ölürüz. */
getWorld().removeObject(this);
}
}
}
Gördüğünüz gibi öğrendiklerimizi uygulayarak basit bir oyun yaptık. Siz isterseniz oyuna skor ekleyebilir ve topun x koordinatında hareket etmesini de sağlayabilirsiniz.

17 Ağustos 2013 Cumartesi

Square Kart

Yapmaya çalıştığım yeni araba oyunu. Bugün ilk versiyonunu yayınladım ilk versiyon şu özelliklere sahip:
17/08/13
- Araba
- Tur ve güç göstergesi
- Bitiş çizgisi
- Fare veya klavyeyle kontrol sistemi
19/08/13
- Hata giderildi
- Motor sesi.
28/08/13
- Kontrol noktası sistemi yapıldı.
- Çimen deseni eklendi.
11/09/13
-Tur sayısını belirleme
-2 kişilik
-Daha fazla ses
Oyun bitmiştir, http://www.greenfoot.org/scenarios/9186 bu adresten oyuna erişebilirsiniz.

15 Temmuz 2013 Pazartesi

Lanetlenmiş Renkler

Aslında yaptığım oyunun adı Black-White ancak Türkçe film adı çevirilerine gönderme olsun diye başlığın adını Lanetlenmiş Renkler koydum ehehhhe
Oyunun açık kaynağına http://cl.ly/2P0r1Z3n2G0w adresinden ulaşabilirsiniz. Veya http://www.greenfoot.org/scenarios/9008 adresinden çevrimiçi olarak oynayabilirsiniz. İyi günler.

9 Haziran 2013 Pazar

Bilgisayar Oyunlarının Zaman Çizelgesi

1860 yılında Charles Babbage halka ve çarpı oynanabilecek bir oyun tasarlamıştı. Altı makineyi bir odaya koymayı ve çocuklara bu makinelerde oyun oynatmayı planlıyordu. Aslında fark etmeden de olsa, ortaya çıkmasından 100 yıl önce arcade oyunlarını bulan ilk kişi olmuştu…
1972
“Pong” adında bir oyun ABD’nin Seattle eyaletinde ortaya çıktı. Atari adında bir firma tarafından üretilen bu oyun kısa sürede çok popüler oldu. Aslında tenis oyununun elektronik uyarlamasıydı. İki oyuncu “sopalarını” kullanarak (bir kumandayla hareket ettirilen dikdörtgen biçiminde çubuklar) bir topa (ekrandaki beyaz bir nokta) ve ağın (ekranın ortasındaki bir çizgi) üzerinden geçirmeye çalışıyorlardı. Siyah beyaz olmasına ve üç dakikadan kısa sürmesine rağmen, Pong çok beğenilen bir oyun olmuştu.
1978
İlk savaş oyunu Space Invaders kısa sürede büyük bir başarı sağladı. Örümcek şekilli uzaylıları vurmak çok eğlenceliydi ve birçok insan oyunun tutkunu haline geldi. Hatta bu nedenle, bir milletvekili oyunu yasaklatmaya çalıştı.
1980
Atari, Commodore ve diğer Amerikan şirketleri evde oynanabilecek oyunlar piyasaya sürdü. Bu oyunlar ya kartuşlar olarak satılıyor ve özel oyun makinelerinde kullanılıyor ya da disket halinde kişisel bilgisayarlara yüklenebiliyordu. Bu oyunlar çok tutuldu ta ki…
1983
Artık kişisel bilgisayarlar daha ciddi işler için kullanılmaya başlandı ve oyunlar gözden düştü. Eskiden yılda 3 milyar dolar getiren oyun pazarı on iki ay içinde gücünü kaybetti.
1985
Nintendo adında bir Japon şirketi, Game-Boy adında küçük bir oyun aleti piyasaya sürdü ve oyuncuların yüzünü güldürdü. Aletle birlikte piyasaya çıkan Tetris adında bir oyun, 40 milyon adet satışa ulaştı.
1986
Aynı şirket bu kez ilk gerçek oyun konsolu olan Nintendo Entertainment System(NES)’i piyasaya sürdü ve ilk kez bir oyun kahramanı doğdu. Bu kahramanın adı Mario’ydu ve bir musluk tamircisiydi.
1989
PC oyunları artık CD-ROM’larda satılmaya başladı. Böylece oyunlarda daha karmaşık grafikler ve ses efektleri kullanılabilecekti. Ancak CD-ROM sürücüleri olan bilgisayarlar çok pahalıydı.
1991
Sega adlı başka bir Japon şirketi garip kahramana sahip yeni bir oyunu piyasaya sürdü. Kahraman Sonic adında mavi, zıplayıp dönen bir kirpiydi.
1994
Başka bir Japon şirketi Sony, Playstation konsollarıyla oyun pazarına dahil oldu. O tarihten beri, Nintendo, Sony ve Sega oyun konsolu pazarına egemen olmuştur.
1997
Nintendo N64 adındaki oyun konsolunu piyasaya çıkardı. Bu konsol o zamana dek yapılan en hızlı oyun konsoluydu.
1998
1980′de çıkan Atari oyunlarını toplayan oyun canavarları 5 sterline aldıkları oyunları koleksiyonculara 500 sterline satıyorlar.
Kaynak: Michael Coleman, 2009, Gıcık Bilgisayarlar, 4, Timaş

25 Mayıs 2013 Cumartesi

Greenfoot Gece Gündüz

Merhaba arkadaşlar uzun süredir yazmıyordum. Bu yüzden kusuruma bakmayın şimdi fazla uzatmadan konuya kodları yazıp açıklamamı yapayım.
import greenfoot.*;
import greenfoot.*;
public class Gece extends Actor
{
    GreenfootImage resim = new GreenfootImage(640,480);
    public Gece()
    {
        resim.fillRect(0,0,640,480);
        resim.setTransparency(0);
        setImage(resim);
    }
    public void act()
    {
        if(Greenfoot.isKeyDown("space"))
        {
            resim.setTransparency(140);
        }
        else if(!Greenfoot.isKeyDown("space"))
        {
            resim.setTransparency(0);
        }
    }
}
Gördüğünüz gibi öncelikle 640'a 480'lik(dünya nesnesinin width ve height'i oluyor bu) bir resim nesnesi oluşturuyoruz. Ve setTransparency metodu ile transparanlığını ayarlayarak gece ve gündüzmüş hissiyatı veriyoruz. Kolay gelsin.

25 Nisan 2013 Perşembe

Booci

Merhabalar, sizlere yaptığım yeni bir oyunu tanıtmak istiyorum. Oyunun adı Booci ve oyundaki amacınız size doğru gelen platformlara atlayarak ölmemeye çalışmak. Oyunu aşağı yön tuşu hariç diğer yön tuşları ile oynuyorsunuz. Ayrıca space tuşu ile Booci'yi oluşturabilirsiniz. Jar dosyası veya açık kaynak halinde oyunu indirebilirsiniz.

18 Nisan 2013 Perşembe

TDS Oyunu

Greenfoot ile yaptığım TDS oyununu sizlere tanıtmak istiyorum. Oyundaki amacınız zombileri vurarak puan toplamaktır. Karakteri kontrol etmek için wasd veya yön tuşlarını kullanmalısınız. Ateş etmek için fareye tıklamalısınız.
Link: http://www.greenfoot.org/scenarios/8038

23 Mart 2013 Cumartesi

Başka Sistemlerde Greenfoot Kurulumu

Ubuntu'nun attığı casus yazılım kazığını duyduktan sonra openSUSE kurdum. İlk defa .deb dışında başka bir paket ile haşır neşir olduğumdan Greenfoot'u kurmak biraz zaman aldı ancak araştırınca basit olduğunu öğrendim. Ve aranızda benim gibi başkaları olabilir diye paylaşmak istedim.
  • http://www.greenfoot.org/download adresinden "Pure Java" seçeneğine tıklayarak jar paketini indirin.
  • cd komutu ile paketi indirdiğiniz dizine gelin ve şu komutu yazın: java -jar Greenfoot-generic-221.jar
  • Açılan pencereden Greenfoot'u kuracağınız dizini ve JDK'nın dizinini belirleyin ve install butonuna basın.
  • Yine cd komutu ile Greenfoot'u kurduğunuz dizine gelin(ben masaüstünü tercih ettim) ve şu komutu yazın: sh ./greenfoot.sh
Not: Eğer greenfoot.sh adında bir dosya bulamıyorsa yüklediğiniz dizinden greenfoot dosyasını not defterinden açın ve greenfoot.sh adında kaydedin.
Kolay gelsin.

12 Mart 2013 Salı

Extreme Tux Racer

Extreme Tux Racer Linux platformunda oynayabileceğiniz eğlenceli bir yarış oyunudur. Oyunda campaign ve practice olmak üzere iki mod vardır. Campaign modunda amacınız seçtiğiniz campaign'i mümkün olduğunca kısa sürede ve çok balık toplayarak bitirmektir. Bu sizin sonraki bölümleri açabilmenizi sağlar. Practice modu ise oyuna yeni başlayanların girip oyunu keşfedebilmesi için gayet uygun bir mod. Bana kalırsa campaign modunda oyuna başlayın derim çünkü oyun sadece yön tuşlarıyla oynanıyor ve parkurlar o kadar zor değil. Zor değil dediysekte küçümsemeye gerek yok çünkü bölümleri bitirmek için 4 hakkınız var. Ben daha fazla uzatmadan kendi çektiğim gameplay videosunu göstereyim.
Gameplay videosu: https://vimeo.com/61580595
Oyunun web sayfası: http://extremetuxracer.com/

24 Şubat 2013 Pazar

Greenfoot Yerçekimi

Basit bir yerçekimi sistemi yazarak bir oyun yaptım. http://cl.ly/0o3l3F2p380e adresinden oyunun dosyalarını indirebilir ve inceleyebilirsiniz. Şimdi Oyuncu.java dosyasından başlayalım.
import greenfoot.*;
public class Oyuncu extends Actor
{
    // 1. bolum
    private static final int ivme = 1;
    private int baslangic_hizi = 0;
    public Oyuncu()
    {
        setImage("egg.png");
    }
    // 2. bolum
    public void act() 
    {
        kontroller();
        if(maksimumCevre())
        {
            baslangic_hizi = 0;
        }
        else
        {
            baslangic_hizi = baslangic_hizi+ivme;
            setLocation(getX(),getY()+baslangic_hizi);
        }
    }
    // 3.bolum
    private boolean maksimumCevre()
    {
        if(getY() < 1 || getY() >= getWorld().getHeight() - 30)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    private void kontroller()
    {
        if(Greenfoot.isKeyDown("left") || Greenfoot.isKeyDown("a"))
        {
            setImage("eggsol.png");
            setLocation(getX()-3,getY());
        }
        if(Greenfoot.isKeyDown("right") || Greenfoot.isKeyDown("d"))
        {
            setImage("egg.png");
            setLocation(getX()+3,getY());
        }
        if(Greenfoot.isKeyDown("up")  || Greenfoot.isKeyDown("w"))
        {
            setLocation(getX(),getY()-14);
        }
    }
}
Birinci bölüm: Bu bölümde değişkenlerimizi tanımladık ve Oyuncu sınıfının resmini egg.png olarak ayarladık.

İkinci bölüm: Burada maksimumCevre metodu ile y ekseninin sonuna gelip gelmediğimizi kontrol ediyoruz. Y ekseninin sonuna geldiysek baslangic_hizi değişkenini 0 yapıyor. Y eksenine gelmediysek yerçekimi devam ediyor.

Üçüncü bölüm: Bu bölümde ise maksimumCevre metodunu açıklamak istiyorum. Öncelikle bu bir boolean metoddur. Eğer y koordinatlarımız "dünyanın" uzunluğundan büyükse true değer gönderir, değilse false değer gönderir.

Anlatacaklarım bu kadar kolay gelsin.

18 Şubat 2013 Pazartesi

Matematik Kitapları Üzerine

Matematik Kitapları Üzerine Ali Nesin Geçen yaz [1992] Milli Eğitim Bakanlığı’nın çıkardığı matematik kitaplarını aldım. İlkokul 1’den lise 3’e dek tam onbir cilt... Okul kitabı yazmak, hele ilkokul kitabı yazmak, öyle küçümsenecek bir iş değildir. Bilimsel araştırmadan çok daha fazla sorumluluk isteyen bir uğraştır. Matematiğin yanısıra didaktik ve eğitbilim (pedagoji) de bilmek gerekir. Konuların nasıl işlenip, hangi sırayla sunulacağı, örneklerin, soruların, sözcüklerin seçimi, resimle yazı arasındaki oran, geçmişte bizim ve başka ülkelerin deneyimleri gibi önemli noktaların üstünde uzun uzun durulması, hatta herbirinin birer araştırma konusu olması gerekir. Örneğin ilkokul birinci sınıf öğrencilerine aritmetiği mi, geometriyi mi, yoksa küme kavramını mı öğretmeli ilk? Belki de “altında, üstünde, yanında, kenarında” gibi yedi yaşındaki bir çocuğa daha “doğal” gelebilecek kavramlara öncelik tanımalı. Yoksa ne öğretildiğinden çok, soru sorma alışkanlığını aşılamak mı önemlidir? Bu işe yıllarını verenlerin bile bu birincil soruların yanıtlarında anlaştıklarını sanmıyorum. Kısacası, bu iş öylesine karmaşık, öylesine zordur ki, kusursuz diyebileceğimiz bir okul kitabı yazmak nerdeyse olanaksızdır. Zorluğun bilincindeyim, ve amacım kesinlikle satın aldığım kitapları eleştirmek değil. Haddime mi? Uzmanlar bile bu konuda anlaşamazken... Benimkisi salt merak... Matematik eğitiminin nasıl yapılması konusunda tam bir uzlaşma sağlamak güç olabilir. Gene de matematik eğitiminde uzman olsun olmasın herkesin uzlaştığı biriki nokta vardır sanırım. Örneğin, matematik eğitiminin amacını saptamak pek zor olmasa gerek. Nedir matematik eğitiminin amacı, ya da amaçları? Matematiğin güzelliğini, yalınlığını ve gücünü göstermek, düşünmesini, yani bağımsız ve doğru düşünmesini öğretmek, bir alışkanlık haline getirmek. Unuttuklarım, okurun eklemek istedikleri olabilir. Pek önemli değil. Üç aşağı beş yukarı hepimizin matematik eğitiminin amacında birleşeceğimize eminim. Matematik kitaplarından rastgele birini açtım. Gözlerime inanamadım: İlk sayfada çatık kaşlı bir mehmetçik, göklerde dalgalanan bir bayrak ve İstiklal Marşı var. Atatürk’ün bir portresi ikinci, Gençliğe Söylevi üçüncü sayfada... Söylev günümüzün Türkçesine çevrilmemiş... Muhafaza’lı, müdafaa’lı, şerait’li ve de cebir’li! Neden çocuklarımızın anlayacağı dile çevirmemişler? Yoksa matematik kitabına Atatürk’ün Gençliğe Söylevi’ni koyanların amacı çocuklara Atatürk’ü anlatmak ve sevdirmek değil mi? Belli ki değil... Bir başka matematik kitabına Türkiye haritası koymuşlar. Bir an kuşkuya düşüp yanlışlıkla coğrafya kitabı aldığımı sandım. Hayır, yanılmamışım, kitabın kapağında İlkokullar İçin MATEMATİK I yazıyor. Her kitabın sonunda bir de Öğretmen Marşı var. Öğrenciler için yazılmış bir kitapta... Buyrun öğretmen marşına! Bu kadarla da yetinmemişler. İlkokul dörtlerin matematik kitabının aşağı yukarı tam ortasına bir okuma parçası koymuşlar: Atatürkçü Düşüncede Özellik Taşıyan Önemli Yaklaşımlar. Otuz sayfa ötede Tehdit başlıklı bir başka okuma parçası var. Türkiye’nin jeopolitik önemi diyor ve tahmin ettiğiniz gibi düşmanlarımızdan, yani Romanya, Bulgaristan ve Rusya’dan, sözediyor. Kitap 1991’de yazılmış1. Matematiğin yukarıda sıraladığımız amaçlarıyla yakından uzaktan hiçbir ilgisi olmayan bu resim ve yazıları matematik kitabına koyanların amacı ne olabilir? Acaba çocuklara Atatürk’ü ve yurdumuzu sevdirmek mi istiyorlar? Aklı başında kime sorulursa sorulsun, bir matematik kitabına Atatürk resminin konulmasını beyin yıkama olarak nitelendirir. Oysa Atatürk’ü sevdirmek ve anlatmak için, Atatürk’ün değerini kavratmak için, beyin yıkamaya gerek yoktur. Atatürk’ün Türkiye için yaptıklarını anlatmak yeterlidir. Hitler’i, Mussolini’yi, Pinochet’yi, Stalin’i sevdirmek için beyin yıkamaya gerek duyulabilir, ama Atatürk buna gereksinmez. Tam tersine, beyin yıkama, Atatürk’ü gençliğin gözünde yozlaştırır. Kaldı ki, matematik düşünmeyi öğretir. Sloganların, milliyetçiliğin, İstiklal Marşı’nın, bayrağın, askerin yeri değildir bir matematik kitabı. Hele beyin yıkamanın hiç ama hiç yeri yoktur matematik kitaplarında. Bu kitaplarla matematik okuyan çocuk ne matematiği, ne de Atatürk’ü sevebilir. Amaç bu mu? Matematik kitabında yeri olmayan bu resimleri, bu okuma parçalarını koymak kimin aklından çıkmıştır? Kimini tanıdığım yazarların, yani matematikçi arkadaşlarımın, böyle bir saçmalıkta parmakları olduğunu sanmıyorum. Hiçbir matematikçi böyle bir yönteme başvurmaz. Bu saçmalık, eğitim, matematik ve Atatürkçülükle kıyısından köşesinden en küçük bir ilgisi olmayan kişilerin eseri olmalı. Matematik kitabına resim ve okuma parçası konulmaz mı? Konulur. Örneğin düşündüren eğlenceli oyunlar, bilmeceler konulabilir. Ünlü matematikçilerin resimleri, yaşamöyküleri, oturdukları evin, çalıştıkları masanın, yazdıkları kalemin fotoğrafları konulabilir. Ünlü yapıtlardan alıntılar da yapılabilir. Çok da iyi olur. Böylece öğrenci hem rahat bir soluk alır, hem de kuramlarını okuduğu matematikçilerle içli dışlı olur, onlara yabancılık duymaz, bilimde yenilik yapanların kendisi gibi insan olduklarını görür. Eğer öğrencinin ülkesinden gurur duyması isteniyorsa hocamız Cahit Arf‘tan sözedilsin. İlla Atatürk’ten sözetmek gerekiyorsa, eski Türkçe Söylev’i değil, Atatürk’ün yaşamının son yıllarında öztürkçe bir geometri kitabı yazdığını, “üçgen, dikey, açı” gibi onlarca sözcüğü dilimize kazandırdığını anlatan bir okuma parçası konulsun. Milli Eğitim Bakanımız iki aydır Sayın Nahit Menteşe’dir2. Yılların deneyimi olan bir bakan. Bu saçmalıkların matematik kitaplarından kaldırılması gerektiğini düşündüğünden kuşkum yok. Umarım önümüzdeki yıllarda çocuklarımız ve gençlerimiz, aptallığın tüm çıplaklığıyla gözler önüne serilmediği matematik kitaplarından eğitim görürler. 2 Şimdi Milli Eğitim Bakanımız Sayın Nevzat Ayaz’dır. Sonradan (1999) eklenmiş not: O zamandan bu zamana, sosyal demokrattan ortanın sağına, ortanın sağından İslamcısına dek siyaset yelpazesinin hemen hemen her derecesinden bakan geldi geçti. Ders kitaplarında hâlâ daha bir değişiklik yok.

29 Ocak 2013 Salı

Işın Bisikleti Oyunu

Merhaba arkadaşlar. Kendi bilgilerim ve http://greenfoot.org adresinden aldığım yardımlarla yaptığım basit bir oyunun sistemini sizlere anlatmak istiyorum. Öncelikle oyunun açık kaynağını http://yadi.sk/d/sMqXmQND2AvXv adresinden indirerek dosyalara ulaşabilirsiniz. Şimdi gelelim kodlara:

import greenfoot.*;
import java.awt.Color;
public class Oyuncu1 extends Actor
{
    private boolean sol;
    private boolean sag;
    // bolum 1
    public Oyuncu1()
    {
        GreenfootImage g = getImage();
        g.drawRect(0,0,30,30);
        g.setColor(Color.BLUE);
        g.fill();
    }
    public void act() 
    {
        // bolum 2
        move(2);
        Oyuncu1Cizgi o = new Oyuncu1Cizgi();
        getWorld().addObject(o,getX(),getY());
        kontroller();
        if(carpisma())
        {
            getWorld().removeObjects(getWorld().getObjects(Oyuncu1Cizgi.class));
            getWorld().removeObject(this);
        }
    }    
    // bolum 3
    private boolean carpisma()
    {
        Actor Oyuncu2;
        Actor Oyuncu2Cizgi;
        Oyuncu2 = getOneObjectAtOffset(0,0,Oyuncu2.class);
        Oyuncu2Cizgi = getOneObjectAtOffset(0,0,Oyuncu2Cizgi.class);
        if(Oyuncu2 != null || Oyuncu2Cizgi != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    // bolum 4
    private void kontroller()
    {
        if(!sol && !Greenfoot.isKeyDown("left"))
        {
            sol = true;
        }
        if(sol && Greenfoot.isKeyDown("left"))
        {
            turn(-90);
            sol = false;
        }
        if(!sag && !Greenfoot.isKeyDown("right"))
        {
            sag = true;
        }
        if(sag && Greenfoot.isKeyDown("right"))
        {
            turn(90);
            sag = false;
        }
    }
}
Birinci Bölüm: İlk bölümümüzde sınıfımızın nasıl görüneceğini tanımladık. drawRect metodu ile bir kare çizdik, çizilen kareyi setColor metodu ile mavi yaptık ve son olarak fill metodu ile ekrana çizdirdik.
İkinci Bölüm: Bu bölüm daha çok dışardaki sınıflar ve içerdeki metodlar ile ilişkili. Burada move metodu ile hareket etmesini ve gittiği her yere Oyuncu1Cizgi sınıfını oluşturmasını istedik, ve diğer metodlarımızı çağırdık.
Üçüncü Bölüm: Burada Greenfoot'un Actor sınıfının getOneObjectAtOffset adlı metodunu kullanarak çarpışma kontrolü yaptırdık. Eğer çarpışma varsa true yoksa false değer geri döndürmesini istedik.
Dördüncü Bölüm: Burada ise sınıfımızı kontrol etmemizi sağlayacak kodlar var. isKeyDown metodu işi biraz "seriye" bağladığından dolayı burada sol ve sag adlı boolean değerlerimize değer atayarak bu sorunu gidermeyi denedik. Eğer sol yön tuşuna basılmıyorsa ve sol = true değilse koşul gerçekleşmiş yani sol = true olacaktı. Bu sayede basıldığı ve sol değerinin true olduğu zaman ise sol = false olacaktı ve böylece seri bir şekilde hareket edemeyecekti.
Evet oyunun sistemleri bu kadardı, umarım iyi bir şekilde anlatabilmişimdir. Sorunuz olursa çekinmeden sorabilirsiniz. Kolay gelsin.

16 Ocak 2013 Çarşamba

Greenfoot Hareket Sistemi

Merhaba arkadaşlar. Bir önceki dersimizde klavye olaylarından bahsetmiştik. Bu dersimizde ise klavye olayları ve birkaç metod yardımıyla oyunlarımızda çoğu zaman kullanacağımız bir sistem yapacağız. Şimdi kullanacağımız metodlara bakaraktan dersimize başlayalım.
move metodu: Bu metod sınıfımızın hareket etmesini sağlar. move() şeklinde kullanılır ve tek parametrelidir. O tek parametre ise hızı belirler.
turn metodu: Sınıfımızı 0 ile 360 derece(saat yönünde) döndürmemize yarar. turn() şeklinde kullanılır ve move metodu gibi tek parametrelidir. Aldığı parametre ise kaç derece döneceğini belirler.

import greenfoot.*;
public class Hareket extends Actor
{
    public void act() 
    {
        move(2);
        String key = Greenfoot.getKey();
        if("left".equals(key))
        {
            turn(-90);
        }
        else if("right".equals(key))
        {
            turn(90);
        }
    }    
}
Burada move metodu ile hareket edip turn metodu ile dönerek hareket ediyoruz. İstersek setLocation, getX ve getY metodlarını kullanarak aynı işlemi biraz daha farklı bir şekilde yapabilirdik. Şu şekilde:

import greenfoot.*;
public class Hareket extends Actor
{
    public void act() 
    {
        if(Greenfoot.isKeyDown("up"))
        {
            setLocation(getX(),getY()-3);
        }
        else if(Greenfoot.isKeyDown("down"))
        {
            setLocation(getX(),getY()+3);
        }
        else if(Greenfoot.isKeyDown("left"))
        {
            setLocation(getX()-3,getY());
        }
        else if(Greenfoot.isKeyDown("right"))
        {
            setLocation(getX()+3,getY());
        }
    }    
}
Burada setLocation metodu iki parametre alır. Bunlardan birisi x diğeri ise y'dir ve yeni bir değer vermemizi sağlar. Biz burada getX ve getY metodu ile var olan x ve y değerine değer ekleyerek yeni koordinatlarımızı belirlemiş olduk. Ayrıca Greenfoot'da koordinat sistemi biraz daha farklıdır. Orijin ekranın sol üst köşesindedir. Orijinden Sağ tarafa gidildikçe x değeri artar, aşağıya doğru gidildikçe y değeri artar.

4 Ocak 2013 Cuma

Gidin ve Oyun Yapın!

Kaynak Yazı
Herkese merhabalar. Adım Paolo Pedercini ve 2003den beri Mollindustria adı altında alternatif oyunlar geliştiriyorum. Bir yerde "Molleindustria muhtemelen yurtdışında en iyi bilinen İtalyan video oyun studiosu" diye birşey okudum. Aslında bunla gurur duymalıyım, ama asıl fikir boş zamanını flash oyun yapmakla geçiren 29 yaşındaki adamların "Bu ülkenin dünyaya sunabileceği en önemli şey" olması beni gerçekten üzüyor.
İtalya'nın oyun endüstirisnde gerçek bir varlık göstermeye ihtiyacı var. Kim bir grup Kanadalı'ya bizim Rönesans'ımız hakkında birşeyler söyleme hakkını verdi ? [=> Ubisoft'un Assasin's Creed : Brotherhood] Ve niye biz bir grup Amerikalı gerizekalının acıklı bir "İlahi Komedi" (Divine Comedy) adaptasyonuna tabi olalım ? [=> Electronic Arts'ın Dante's Inferno'su.] Ve neden hiçbir İtalyan kuruluşu bize organize suçların şiddet ve trajedisi hakkında bilgi vermiyor ve bunun yerine neden dersimizi holywood filmleri ve dizileri tarafından üretilen klişelerden çıkaralım ? [=> Electronic Arts'ın The Godfather'ı]
Bu hikayeyi çok kez duydum: İtalya'da "tam" bir oyun endüstrisi yok. Altyapısı yok. Biz nasıl yapılacağının eksikliğini çekiyoruz. Yatırım yok. Ve tek çözüm ABD'deki büyük şehirlerde bulunan önde gelen stüdyolara kaçmak gibi gözüküyor. Peki, Ben birkaç yıldır ABD'de yaşıyorum ve size şunları diyebilirim ki buradaki hiçbirşey sizin düşündüğünüz gibi sessiz sakin/rahat (cennet gibi) değil. Ve ben siz İtalyanların hayal bile edemeyeceği şeyler gördüm. Burada gördüm ki 25 yaşındaki adamlar Rockstar Games'teki işinden istifa ediyorlar. GTA'nın 3D modelcileri yoruluyor ve sadece mimarlık şirketlerinde rendering yapmak için ayrılıyor yani biliyorsunuz, onların da bir sosyal hayatı var. Ve yine gördüm ki Electronic Arts'daki programcılar kendi projelerini geliştirme şansları olmadığı için işlerinden ayrılıyorlar. Ve yine gördüm ki büyük stüdyolardan gelen iş tekliflerini geri çeviren genç oyun dizayncıları var.
Ve iyi haber ise bizim oyun geliştirmek için başka bir büyük oyun endüstrisine ihtiyacımız yok. Oyun şirketlerinin 15 yıl önce başlayan konsantrasyon süreci şimdi yavaşlamaya veya tersine dönmeye başladı. Moore Yasasının gerektirdiği ezici üretim modeli yaratmayı denemek, bir anlam ifade etmiyor. Oyunlarda innovasyon (Yenileşme) demek projenizde son teknolojiyi kullanmaktan veya elektronik tablolarda mantık aramaktan daha fazlasıdır.
Ayrıca, oyuncuların zevkleri ve hassasiyetleri değişmeye başladı. Bir çok insan için, bugünlerde, ekrandaki poligon sayısı gerçekten hiç önemli değil. Prodüksiyon araçları artık daha ucuz ve ulaşılabilir olmaya başladı. Artık genç geliştiriciler için sahneye çıkmak çok daha kolay. Herşeyden önce, dağıtım kanalları çoğalıyor. Kim kutulardan oluşan bir mağazaya ihtiyaç duyar ? Kim cesaretsiz,korkak,eski kafalı,yenilikten korkan ve raflara gidenlerin ve gitmeyenlerin üzerinde kontrol sahibi bir aracıya ihtiyaç duyarki ? Biz sadece bir şey geliştirmek için şirket başlatmak için, bir patrona kendimizi esir etmeye ihtiyacımız yok.Ve tahmin edin ? Son birkaç yıldaki en iyi, en ilgi çekici oyunlar küçük,bağımsız ofisi olmayan takımlar tarafından yapıldı.

Ve İtalya'ya geri dönersek, bu istikrarsızlığı, yüksek düzeydeki işsizliği, kelimenin tam anlamıyla parçalanan/yıkılan bir akademik sistem bize veriyor, paradoksal, hepsinden önce en önemli hammadde; boş zamandır. Kendi projelerinizi geliştirmek için, bağımsızca... Projeler belki başarısız olur, eminim, ama başarısızlık ille de kötü değildir, başarısızlık öğrenmenin, birşeyleri denemenin bir aşamasıdır.İnsanlarla tanışmak, bağlantılar kurmak için iyi bir yoldur.
İtalya'da eğer 30 yaş altındaysanız ortak olan şey; geleceğinizin olmadığıdır. Ve yine de, bu ülke,bu ülkenin mafyası, ırkçıları, şarlatanları, size hiç beklemediğiniz mucizelerin çalışarak yapıldığını dünyaya kanıtlamıştır.Neorealizm hareketini düşünün, İtalya'nın sinemaya yaptığı en önemli katıkıdır. Sinema endüstrisi harabe iken 2.Dünya savaşından hemen sonra başladı. Neorealist yönetmenler profesyönel olmayan aktörleri kiraladı ve elindeki araçlar ile film yapmaya başladı, gişe canavarlarını ve efsanevi yapımları ortaya çıkardı, ve onlar şehirlerinin sokaklarında ne gördülerse filmlerinde ona karar verdiler. İtalyan Neorealizm'inin Fransız Nouvelle Vague üzerindeki etkisi, İngiliz Serbest Sineması için muazzam oldu. Bugün bile, dünyanın her yerinden belgesel film yapımcılarına ilham vermeye devam ediyor.
Tabii ki, çağdaş İtalya, savaş sonrası İtalyası'ndan farklıdır. Burada gerçek bir gerginlik yok, statükoyu değiştirmek için gerçek bir arzu yok. Burada hiç demokrasiyi benimseme dürtüsü yok, ama bu dürtü çatışma sonrası çok canlı bir şekilde hissedildi. Biz 30 yıldan fazladır Berlusconi'nin üstünlüğü- Videocracy'si tarafından oluşturulan kültürel bir çölün ortasında yaşıyoruz.
Ama kültür endüstrilerinin bir vakumlama faaliyeti olmadığını unutmayalım (Ne biçim bir cümledir bu ?). Ama onlar birbirinden ayrılmadı. İnnovasyon (yenileşme) sadece bir bağlamda ortaya çıkabilir. Örneğin, Vespa scooter bir dünya fenomen olduğunda, [Carlo Emilio] Gadda RAIcorporation'da çalışıyordu. [Italo] Calvino ve [Cesare] Pavese Einaudi yayıncılık şirketinde ve Almanya gibi filmlerde çalışıyordu. "Year Zero" yerli film tiyatrosunda sahne alıyordu.
Berlusconi çağının sonuna geliniyor olabilir. Veya gelinmiyordur. Her neyse, bu sinen/yayılmacı ahmaklığa direnen tüm kültürel enklavlar ile birlikte bağlılık kurma açısından çok önemlidir. Eğer İtalya'da değerli/geçerli oyun dizayncıları bulamazsanız, etrafınıza bakın, dizaynörler,çizgi film grafikerleri,müzisyenler ile çalışmaya başlayın... İndie scene içindeki en iyi şeyler ilginç,acayip küçük oyunlar yaratmak değildir. Gerçek ürünler arkadaşlıklar,ilişkiler,durumlardır... Bu kargaşa etkinlikler,sergiler,konferanslar,toplantılar, forumlar, yarışmalar ve game jamler aracılığıyla çevrimiçi ve çevrimdışı yer alıyor ...
Demek istediğim, İsveçi örnek alın. Ve Neredeyse elle tutulur hiçbir scene yapmamış inanılmaz sayıda genç geliştiricisi olan İskandinav ülkelerini ele alın... İtalya bu adamlardan ilham almalıdır. Yani İtalya'nın alt tabakasındaki "Kaybetme Zihniyeti"nin var olması için hiçbir sebep yok. Punkların KY (Kendiniz Yapın / DIY / Do It Yourself) zihniyetini ele alın: "İşte bu bir akor,işte bir diğeri,buradaki de üçüncü. Hadi bir grup kuralım.". Benim teklifim ? "İşte bir bilgisayar, işte bir internet bağlantısı, işte biraz bedava yazılım, ve hadi oyun yapalım.
Ve lütfen İngilizce Öğrenin.
Paolo Pedercini, İtalyanca'dan İngilizce'ye çeviri Matteo Bittanti.
İngilizce'den Türkçe'ye çeviri Atahan Bozkurt.

3 Ocak 2013 Perşembe

Greenfoot Klavye Olayları

İlk yazımızda Greenfoot'un ne olduğundan kısaca bahsetmiştik. Umarım verdiğim linkten Greenfoot'u indirip arayüzünü kurcalamışsınızdır. Çünkü basit bir arayüzü olduğundan anlatmaya ihtiyaç duymuyorum ve ilk dersimize klavye olayları ile başlıyorum. Bu konumuzda temel olarak iki metoda ihtiyaç duyacağız. Bunlar isKeyDown ve getKey metodları olacak. Her iki metodda Greenfoot sınıfının metodlarıdır ve statik metodlardır. isKeyDown metodu boolean bir metoddur ve string değer alır. getKey metodu ise string bir metoddur ve equals ile beraber kullanılır.
Örnek Kullanım:
if(Greenfoot.isKeyDown("left")) // şeklinde kullanılabilir. isKeyDown metodu boolean bir metod olduğundan koşul gerçekleşince true değer üretecektir.
Örnek Kullanım:
String key = Greenfoot.getKey();
if("space".equals(key)) burada ise boolean değeri equals üretir. getKey ise string ile koşulu belirler
İkisinin arasındaki farkı anlamanız için birde örnek hazırladım. Buradan indirebilirsiniz.

Greenfoot Nedir

Greenfoot Greenfoot Team tarafından oluşturulmuş Java programlama dilini kullanan bir oyun motorudur. Oyun motoru olmasına rağmen Java'nın tüm sınıflarını erişilebilir kılar, ama kendisi World, Actor, Greenfoot, GreenfootImage, GreenfootSound ve MouseInfo olmak üzere 6 sınıftan oluşur. Ubuntu,Debian,Mac OS X,Windows ve JDK'nın kurulu olduğu tüm sistemlerde sorunsuzca çalışabilir. Yaptığınız oyunları ister jar dosyası halinde ister applet sayesinde html sayfasına gömülü bir şekilde yayınlayabilirsiniz. Ben bu kategoride elimden geldiğince Greenfoot hakkında dersler yayınlayacağım. Eğer sizde benimle birlikte uğraşmak isterseniz http://www.greenfoot.org adresinden sisteminize uygun olan kurulum dosyasını indirip kurabilirsiniz. Yararlı olması dileğimle.