Programmeerimise algkursus Harjutus 3

Allikas: Lambda
Redaktsioon seisuga 1. oktoober 2008, kell 11:48 kasutajalt Anttix (arutelu | kaastöö)
(erin) ←Vanem redaktsioon | Viimane redaktsiooni (erin) | Uuem redaktsioon→ (erin)
Mine navigeerimisribale Mine otsikasti

Esimene töö: valida siga, mis on meile kõige lähemal.

Selleks teeme radariga tiiru ära ja märgime tiiru jooksul kõige lähemal olnud sea kauguse ja peilungi muutujatesse sea_kaugus ja siga_sihikul.

Tuki keeramine ja laskmine toimuvad peale radari "scan"-i.

 
...

    double laksuTugevus = 2.0;

    double siga_sihikul;
    double sea_kaugus;

    public void run() {
        // Ära keera tukki koos kerega!

        setAdjustGunForRobotTurn(true);
        // Ära keera radarit koos tukiga
        setAdjustRadarForGunTurn(true);


        while(true) {
            // Otsimise alustamisel on sea kaugus teadmata
            sea_kaugus = Double.MAX_VALUE;

            turnRadarLeft(360);
            double keeramisnurk = arvutaKeeramisnurk(siga_sihikul);

            turnGunRight(keeramisnurk);
            fire(laksuTugevus);
        }
    }

    public void onScannedRobot(ScannedRobotEvent e) {
        double vastase_kaugus = e.getDistance();
        double vastase_peilung = e.getBearing();

        // Otsime kõige lähemal paiknevat vastast
        if(vastase_kaugus < sea_kaugus) {
            sea_kaugus = vastase_kaugus;
            siga_sihikul = vastase_peilung;
        }
    }

    public double arvutaKeeramisnurk(double vastase_peilung) {
        double tuki_suund = getGunHeading();
        double minu_suund = getHeading();

        double vastase_suund = minu_suund + vastase_peilung;
        double keeramisnurk = vastase_suund - tuki_suund;

        return normalRelativeAngle(keeramisnurk);
    }
...