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
Titanium Collector

Wasza ocena
Świetny
60%
 60%  [ 3 ]
Przeciętny
40%
 40%  [ 2 ]
Słaby
0%
 0%  [ 0 ]
Głosowań: 5
Wszystkich Głosów: 5

Autor Wiadomość
Mrocza 


Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy
Wiek: 26
Dołączył: 29 Sie 2011
Posty: 249
Skąd: Lublin
Wysłany: 12-01-2012, 22:31   

Czyli problem leży w języku Cbot?

A można tak:
Kod:
point flag;
flag = radar(Titanium).position;
goto(flag);

Jeżeli tak też się nie da to problem tkwi nie w goto() tylko w zapisie radar(Titanium).position
 
 
     
Emxx52 
W istocie


Twoja ulubiona misja: Tropica
Dołączył: 04 Kwi 2010
Posty: 207
Skąd: Z istotnych pobudek
Wysłany: 12-01-2012, 23:08   

Tak też nie można, ale mogę się mylić... Myślę, że to powinno być:
object cos=radar(Titanium);
point lol=cos.position
Sorry, ze bez kodu i coś mi w tym moim nie pasuje, chyba raczej
point lol;
lol.x=cos.position.x
lol.y=cos.position.y
_________________
Windows w szacie Linuxa
 
     
Berserker 
Dark Ness


Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy
Wiek: 24
Dołączył: 24 Mar 2009
Posty: 496
Skąd: Bigos
Wysłany: 13-01-2012, 00:00   

Nie mozna tak, watpie, zeby w normalnym C++ sie tak dalo. To, ze funkcja zwraca wynik w jakims typie nie oznacza, ze mozna (jesli jest to typ zlozony jak object czy point) odwolywac sie do poszczegolnych pol tego wyniku od razu z funkcji. Nie jest to wina w zadnym wypadku goto(), po prostu zapis
Kod:

point c;
c = radar(Titanium).position;

Jest bledny, gdyz funkcja nie daje informacji o charakterystyce typu wyniku. Nie wie, ze typ object ma pole position i nie mozna sie do niego w taki sposob odwolac. Podobnie jest z zapisem.
Kod:

float x;
x = space(position).x;

Trzeba wynik zapisac w jakiejs zmiennej by miec dostep do takich rzeczy.
_________________
 
 
     
Mrocza 


Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy
Wiek: 26
Dołączył: 29 Sie 2011
Posty: 249
Skąd: Lublin
Wysłany: 13-01-2012, 14:22   

Poprawiona funkcja recharge(). W końcu!
Ale nie testowałem tego zbytnio więc nie mam pewności czy teraz jest lepiej.

Kod:

// TitaniumCollector 13.01.12
// Created by MROCZA

extern void object::TitaniumCollector()
{
   
    object  item;
    object  convert;
    point   flag (0,0);
    int     i = 0;
    float   e0=0,e1=0,e2=0,e3=0;  // e-energia na petli
    float   f0=0,f1=0,f2=0,f3=0;  // f-energia na trasie do stacji
   
    errmode(0);
   
    item = radar(RedFlag);
    if ( item != null )
    {
        message("Tytan składowany przy czerwonej fladze",DisplayInfo);
        flag = item.position;
    }
   
    convert = radar(Converter);
    if ( convert == null )
    {
        message("Brak huty",DisplayError);
        return;
    }
   
    e0 = energyCell.energyLevel;  // energia poczatkowa
   
    while (true)
    {
        if(load == null or load.category != TitaniumOre)
        {
            if(load != null)
            {
                goto(space(position));
                drop();
            }
           
            while(true)
            {
                item = radar(TitaniumOre);
                if ( item != null ) break;
                if ( i % 100 == 0 ) message("Nie znaleziono więcej tytanu");
                i++ ;
                wait(0.1);
            }
           
            if(goto(item.position) == 211)
            {
                message("Ruda niedostępna",DisplayError);
                return;
            }
           
            if( grab() != 0 ) continue;
        }
       
        while(true)
        {
            if (goto(convert.position) == 000 ) break;
            if (goto(convert.position) == 212 ) continue;
            message("Huta niedostępna",DisplayError);
            return;
        }
       
        errmode(1);
       
        item = radar(Titanium,0,59,0,3);
        if ( item == null )
        {
            drop();
            move(-2);
            wait(10);
        }
        else
        {
            turn(60);
            drop();
            turn(-60);
            grab();
            turn(-60);
            drop();
            turn(120);
            grab();
            turn(-60);
            drop();
            turn(-60);
            grab();
           
            errmode(0);
           
            if ( flag.x == 0 )
            {
                goto(space(position,6,50,6));
                flag = position;
            }
            else
            {
                while(goto(flag) == 212) wait(1);
            }
           
            stock();
        }
       
        e1 = e1 + (e0 - energyCell.energyLevel); // laczne zuzycie
        e2 = e2 + 1;
        e3 = e1 / e2; // srednie zuzycie
       
        //////////////////////////////////////////////////////
       
        if (energyCell.category == PowerCell and energyCell.energyLevel < e3+f3+0.1) //dodaje zapas energii
        {
            item = radar(PowerStation);
            if(item != null)
            {
                f0 = energyCell.energyLevel;
               
                while(true)
                {
                    if (goto(item.position) == 000 ) break;
                    if (goto(item.position) == 212 ) continue;
                    message("Stacja energetyczna niedostępna",DisplayError);
                    return;
                }
               
                f1 = f1 + (f0 - energyCell.energyLevel); // laczne zuzycie
                f2 = f2 + 1;
                f3 = f1 / f2; // srednia na trasie do stacji
               
                while( energyCell.energyLevel < 1 ) wait(0.1);
            }
            else
            {
                message("Niski stan baterii",DisplayError);
                return;
            }
           
           
        }
       
        if (energyCell.category == NuclearCell and energyCell.energyLevel < e3+0.05) //dodaje zapas energii
        {
            float min = 0;
           
            if(category == Subber)
            {
                message("Niski stan baterii",DisplayError);
                return;
            }
           
            while (true)
            {
                item = radar(NuclearCell,0,360,min,1000);
               
                while(true)
                {
                    if ( item != null ) break;
                    if ( i % 100 == 0 ) message("Nie znaleziono więcej ogniw");
                    item = radar(NuclearCell);
                    i++ ;
                    wait(0.1);
                }
               
                if (item.energyLevel >= e3*5) break;
                min = distance (item.position, position) + 0.02;
            }
           
            while(true)
            {
                if (goto(item.position) == 000 ) break;
                if (goto(item.position) == 212 ) continue;
                message("Ogniwo atomowe niedostępne",DisplayError);
                return;
            }
           
            errmode(1);
           
            grab (InFront);
            goto (space(position));
            drop (Behind);
            grab (EnergyCell);
            drop (InFront);
            grab (Behind);
            drop (EnergyCell);
        }
    }
}

//////////////////////////////////////////////////////////////////////

void object::stock()
{
    object item;
    float  angle;
    int    i, j;
   
    errmode(0);
   
    item = radar(Converter);
   
    if(direction(item.position) > 0)
    {
        turn(direction(item.position)-180);
    }
    else
    {
        turn(direction(item.position)+180);
    }
   
    jet(1);
    wait(0.5);
    move(4);
    jet(-1);
    wait(0.6);
   
    errmode(1);
   
    while(true)
    {
        angle = 0;
       
        if(category == WingedGrabber) j=9;
        else                          j=7;
       
        for(i=0; i<j; i++)
        {
            if( i % 2 == 0 )
            {
                item = radar(Titanium,angle,30,0,3);
                if ( item == null )
                {
                    turn(angle);
                    while(drop() == 106) wait(0.1);
                    turn(-180 - angle);
                    if(j == 7) move(3);
                    return;
                }
               
                angle = angle / -1 + 40;
            }
           
            else
            {
                item = radar(Titanium,angle,30,0,3);
                if ( item == null )
                {
                    turn(angle);
                    while(drop() == 106) wait(0.1);
                    turn(180 - angle);
                    if(j == 7) move(3);
                    return;
                }
               
                angle = angle / -1;
            }
           
        }
       
    }
   
}


//////////////////////////////////////////////////////////////////////
 
 
     
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