|
Polski Portal COLOBOTa COLOBOT Polish Portal |
|
Programy - CollectTitaniumOre
Korniszon - 09-10-2010, 11:42 Temat postu: CollectTitaniumOre A oto program:
Kod: | extern void object::CollectTitaniumOre()
{
while(true)
{
if(energyCell.energyLevel<0.4) lado();
ruda();
huta();
tytan();
spa();
}
}
void object::ruda()
{
object item;
while((item=radar(TitaniumOre))==null)
{
Message("Nie znaleziono rudy. Czekam.");
wait(1);
}
mygoto(item.position);
grab();
}
void object::huta()
{
object conver;
while((conver=radar(Converter))==null)
{
Message("Nie znaleziono huty. Czekam.");
wait(1);
}
mygoto(conver.position);
drop();
move(-2.5);
}
void object::tytan()
{
object titan;
Message("Czekam na wytworzenie tytanu");
do
{
titan=radar(Titanium,0,45,0,5);
}
while(titan==null);
mygoto(titan.position);
grab();
}
void object::spa()
{
Message("Idę do wolnej pozycji");
mygoto(space(position));
errmode(0);
drop();
while(load!=null)
{
Message("Upuszczenie tytanu nie powiodło się");
mygoto(space(position));
drop();
}
Message("Upuszczenie tytanu powiodło się.");
errmode(1);
}
void object::lado()
{
Message("Niski poziom energii. Szukam zasoby energytyczne.");
while(!A() and !B())
{
Message("Uwaga. Nie znaleziono zasobów energytycznych.");
wait(1);
}
Message("Ładowanie zakończone");
}
bool object::A()
{
object station;
int sta[];
sta[0]=PowerStation;
sta[1]=PowerCaptor;
station=radar(sta);
if(station!=null)
{
mygoto(station.position);
while(energyCell.energyLevel<1);
return true;
}
return false;
}
bool object::B()
{
object cell=radar(PowerCell);
if(cell!=null)
{
if(cell.energyLevel>0.75)
{
mygoto(cell.position);
grab();
drop(Behind);
grab(EnergyCell);
drop();
grab(Behind);
drop(EnergyCell);
return true;
}
}
return false;
}
void object::mygoto(point pos)
{
errmode(0);
while(goto(pos)!=0);
errmode(1);
}
void object::Message(string msg)
{
message("(RT) "+category+": "+msg);
}
|
Program działa kojelno etapami:
extern void object::TitaniumC()
{
while(true)
{
Sprawdza stan baterii
Szuka rudę i bierze ją
Szuka huty, jedzie tam, i zostawia rudę
Czeka na tytan i go bierze
Zostawia tytan w wolnym miejscu
}
}
UWAGA: Program był testowany i działa.
adiblol - 09-10-2010, 11:52
Proszę o wklejenie z wcięciami bo tak nic z tego nie rozumiem.
1. zapisz program z poziomu Colobota
2. otwórz odpowiedni plik: ścieżka\do\colobota\program\nazwa_pod_jaką_zapisałeś.txt
3. skopiuj i wklej na forum w tagu [ code ]
Korniszon - 09-10-2010, 11:58
Dzięki
Albo:
scieżka_do_colobota/savegame/nazwa_użytkownika/Program/nazwa_programu.txt
Berserker - 09-10-2010, 12:07
Kod: | void object::mygoto(point pos)
{
errmode(0);
while(goto(pos)!=0);
goto(pos);
errmode(1);
} |
Bez sensu, wykonujesz goto() 2 razy.
Kod: | while(goto(space(position))!=0) |
Wypadaloby wlaczyc moze errmode(0)...
Bardzo mi sie podoba twoj uroczy angielski, zwlaszcza te wstawki "No find...", nie ma to jak poszanowanie dla gramatyki Poza tym, po co te wszystkie message()? To ja musze wiedziec co moj robot wlasnie robi?
Simbax - 09-10-2010, 13:34
@Korniszon Po co się z ang. bawisz, mieszkamy w końcu w Polsce i swój język mamy. Sam używam ang. nazw do zmiennych itd. Ale "mesycze" wypadałoby już po polsku...
Korniszon - 10-10-2010, 09:30
@Simbax Poprawiłem
Simbax napisał/a: | mesycze |
Pisze się message'e
@Berserker Poprawiłem. A z tymi message'ami: chciałem sobie żeby mi wyświetlało. Dzięki temu wiem co teraz robot robi.
Apus - 10-10-2010, 14:19
Jakby uruchomić ten program na kilku robotach to by wiadomości od nich tak szybko były zastępowane nowymi że zanim by którąś przeczytał to by znikła z ekranu.
Berserker - 10-10-2010, 15:20
Dla mnie jak robot ma wyeliminowac osy to cecha dobrego programu jest to, ze uruchamiam ten program i o nim zapominam, a chwile pozniej tych os nie ma. Jakby mi spamowal wiadomosciami to bym go w koncu wylaczyl i sam wybil te osy:)
Simbax - 11-10-2010, 16:52
Korniszon napisał/a: | Pisze się message'e |
OK, dzięki za informację. Właśnie się tak zastanawiałem jak to napisać
Korniszon - 23-10-2010, 08:59
@Apus & Berserker:
Jak chcecie, mogę wykasować te message'e "spamowe"(jak to Berserker napisał)
Berserker - 23-10-2010, 12:48
Nie tyle, ze chcemy zebys dla nas je wykasowal tylko, zebys nauczyl sie radzic sobie bez nich
Zreszta nie wiem jak ty to wytrzymujesz:
Kod: | while(goto(space(position))!=0)
{
mesage("Wolna pozycja jest zablokowana.");
wait(1);
} |
Co sekunde dowiadujesz sie, ze nie ma robot gdzie pojsc, ciebie w ogole by to obchodzilo?
adiblol - 23-10-2010, 13:59
Najlepiej napisać funcję debug(string msg), która odwoływałaby się do message(...) dodając prefiks - nazwę robota, ale gdybyśmy nie chcieli oglądać komunikatów to można by zawartość funkcji debug(...) wykomentować.
Korniszon - 24-10-2010, 11:35
@Berserker:
Dobra, dobra, ja umiem posługiwać się bez nich, ale ten program tak ma i już.
|
|