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

Hiç yorum yok:

Yorum Gönder