|
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" . 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.
|
|