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
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
Przesunięty przez: Abadon
20-02-2010, 14:27
Sniffer
Autor Wiadomość
colobotwymiiata 
Zjem cię


Twoja ulubiona misja: Swobodna na Krystalii
Pomógł: 6 razy
Wiek: 20
Dołączył: 02 Lut 2009
Posty: 329
Skąd: Oleśnica
Wysłany: 14-03-2009, 20:15   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 
Administrator forum
Administrator


Pomógł: 3 razy
Dołączył: 11 Sie 2008
Posty: 586
Wysłany: 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 
Administrator sieci
Założyciel portalu


Twoja ulubiona misja: Obie na Orfenii
Pomógł: 1 raz
Dołączył: 07 Lut 2008
Posty: 353
Skąd: Jarocin
Wysłany: 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.
_________________
Bykom STOP
A niechaj narodowie wżdy postronni znają, iż Polacy nie gęsi, iż swój język mają.
 
 
     
colobotwymiiata 
Zjem cię


Twoja ulubiona misja: Swobodna na Krystalii
Pomógł: 6 razy
Wiek: 20
Dołączył: 02 Lut 2009
Posty: 329
Skąd: Oleśnica
Wysłany: 14-03-2009, 22:28   

próbowałem
 
 
     
Knight_in_Fire 


Wiek: 27
Dołączył: 29 Sie 2010
Posty: 19
Skąd: Rybnik
Wysłany: 29-08-2010, 20:41   

Ma też coś na barierki? Bo chcę go odpalić na misji w Ceebocie.
 
     
Wyświetl posty z ostatnich:   
Nie możesz pisać nowych tematów
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012