Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 
Polski Portal COLOBOTa
COLOBOT Polish Portal

Zasoby - Sniffer

colobotwymiiata - 14-03-2009, 20:15
Temat postu: Sniffer
A to mój program do "wąchania" :lol: . idzie cały czas naprzód i "wącha" co 5 metrów. Gdy znajdzie jakieś złoże do "Znaleziono miejsce na kopalnię" dopisze, czy tytanu, czy uranu. Jak będzie miał przed sobą wodę(lub lawę) skręca, to samo z owadami i przedmiotami. Niestety nie jest doskonały, są sytuacje, kiedy głupieje(np.: owady+woda). Ale mam nadzieję, że się Wam spodoba :-) .

Kod:
extern void object::Sniff()
{
    point posprzod,posbokl,posbokr,start;
    int alien[],a;
    float orient;
    a=0;
    alien[a++]=AlienAnt;
    alien[a++]=AlienSpider;
    alien[a++]=AlienWorm;
    alien[a++]=AlienWasp;
    alien[a++]=AlienQueen;
    errmode(0);
    while(true)
    {
        posprzod.x = position.x + cos(orientation) * 8;
        posprzod.y = position.y + sin(orientation) * 8;
        if(topo(posprzod)<0)
        {
            posbokl.x = position.x + cos(orientation+90) * 8;
            posbokl.y = position.y + sin(orientation+90) * 8;
            posbokr.x = position.x + cos(orientation-90) * 8;
            posbokr.y = position.y + sin(orientation-90) * 8;
            if(topo(posbokl)>0)
            {
                turn(90);
                move(5);
                sniff();
            }
            if(topo(posbokr)>0)
            {
                turn(-90);
                move(5);
                sniff();
            }
        }
        if(radar(0,0,50,0,5)!=null)
        {
            object proba=radar(0);
            if(proba.category!=TitaniumSpot and proba.category!=UraniumSpot and proba.category!=PowerSpot)
            {
                if(radar(0,90,50,0,5)==null)
                {
                    while(radar(0,0,50,0,5)!=null)
                    {
                        motor(-1,1);
                    }
                }
                if(radar(0,-90,50,0,5)==null)
                {
                    while(radar(0,-90,50,0,5)!=null)
                    {
                        motor(1,-1);
                    }
                }
            }
        }
        if(radar(alien,0,180,0,50)!=null)
        {
            if(radar(alien,90,180,0,50)==null)
            {
                turn(90);
            }
            if(radar(alien,-90,180,0,50)==null)
            {
                turn(-90);
            }
        }
        move(5);
        sniff();
        if(radar(TitaniumSpot,0,360,-1,5)!=null)message("...tytanu",DisplayInfo);
        if(radar(UraniumSpot,0,360,-1,5)!=null)message("...uranu",DisplayInfo);
        if(energyCell.energyLevel<0.5)
        {
            if(energyCell.category==PowerCell)
            {
                if(radar(PowerStation)!=null)
                {
                    start=position;
                    orient=orientation;
                    object q=radar(PowerStation);
                    goto(q.position);
                    do
                    {
                        wait(0.1);
                    }
                    while(energyCell.energyLevel!=1);
                    goto(start);
                }
            }
            message("Mam połowę atomowego ogniwa!",DisplayWarning);
        }
    }
}


PS.: Zapomniałem dodać, że program sam ładuje baterię, tylko nie wiem jak po wróceniu do pozycji wyjściowej przywrócić dawną orientację, może Wy wiecie?

Abadon - 14-03-2009, 20:29

Bardzo przemyślany programik.

Cytat:
PS.: Zapomniałem dodać, że program sam ładuje baterię, tylko nie wiem jak po wróceniu do pozycji wyjściowej przywrócić dawną orientację, może Wy wiecie?


Z tym to mogę podpowiedzieć (żebyś trochę pogłówkował) że odpowiedz znajdziesz w jednym z programów z SatComa. Jeden z nich właśnie dotyczy ładowania baterii i następnie robot po naładowaniu wraca do wcześniejszej pozycji (ale z tym to nie wiem dokładnie ponieważ mam problemu z uruchomieniem Colobota).

COLOBOT - 14-03-2009, 21:03

Tak, jest to program Recharge2, żeby jeszcze się obrócić w odpowiednie miejsce można użyć parametru this.orientation albo coś podobnego.
colobotwymiiata - 14-03-2009, 22:28

próbowałem
Knight_in_Fire - 29-08-2010, 20:41

Ma też coś na barierki? Bo chcę go odpalić na misji w Ceebocie.

Powered by phpBB modified by Przemo & WRIM © 2003 phpBB Group