2 Şubat 2014 Pazar

BDI

Bir kelimede bulunan ünlü harfler sadece kendisinden önceki veya sonraki kelimenin nasıl seslendirileceğini belirlerler. Örneğin içinde hiç ünlü harf bulunmayan bir kısaltma seçelim. Kısaltmamız PKK olsun. PKK'ya doğru bir şekilde söylendiğinde "pekeke" şeklinde okunur. Çünkü Türkçe'nin telaffuz kuralları bu şekildedir. Telaffuz kuralları her ünsüzün arasına e ünlüsünü koyar. Bu şekilde birinci kuralda ne demek istediğimi anlatabildiğimi düşünüyorum. Durum buyken bir kelimeyi diğerlerinden ayırmak için ünlü harfleri kullanmak pek mantıklı sayılmaz. Ayrım yapmak için ünsüz harfin kelimenin kaçıncı harfi olduğunu belirlememiz gereklidir. Buradan alınan bir değer bir çift boyutlu diziye atılarak karşılaştırma yapılabilir.(ünsüz_harf,kacinci_harf şeklinde) Harfler karşılaştırıldıktan sonra benzeyen harfler ile tüm harfler oranlanır ve bu oran yüzdeye çevrilir. Oran yüzde elliden büyükse çıktı verilir.

Kelimeyi Harflerine Ayırma

import java.util.Scanner;
public class Harf{
    private StringIndexOutOfBoundsException xse;
    private int i = 0;
    private StringBuffer kelime = new StringBuffer();
    private char[] harfler = new char[10];
    private void girdi(){
        Scanner s1 = new Scanner(System.in);
        System.out.print("Kelimeyi giriniz: ");
        kelime = kelime.append(s1.nextLine());
    }
    public void harflerine_ayirma(){
        girdi();
        try{
            while(this.xse == null){
                harfler[i] = kelime.charAt(i);
                i++;
            }
        }
        catch(StringIndexOutOfBoundsException xse){
            this.xse = xse;
        }
    }
    private char harf_goruntule(int sira_no){
        return harfler[sira_no];
    }
    private void uygulama(){
        harflerine_ayirma();
        System.out.println(harf_goruntule(3));
    }
    public static void main(String[] args){
        Harf h1 = new Harf();
        h1.uygulama();
    }
}

28 Ocak 2014 Salı

Droidfoot

Greenfoot oyunlarını Android ortamında oynanılabilir hale getirmenizi sağlayan araç. http://www-is.informatik.uni-oldenburg.de/~dibo/teaching/pkjava/droidfoot/ adresinden nasıl kullanıldığına bakabilir ve indirebilirsiniz.

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!