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.