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);
        }
    }
}