Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
|
Forum - Polski Portal COLOBOTa |
|
|
Titanium Collector |
Wasza ocena |
Świetny |
|
60% |
[ 3 ] |
Przeciętny |
|
40% |
[ 2 ] |
Słaby |
|
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;
}
}
}
}
//////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
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
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|