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

Problemy [programowanie] - Nalot

Zibo - 25-12-2008, 19:02
Temat postu: Nalot
Męczę się i męczę i nie mogę odnaleźć pożądanej funkcji, dzięki której mógłbym wydać rozkaz bot'owi, aby po namierzeniu celu zbliżył się do niego utrzymując ustaloną odległość.

A dokładniej pragnę napisać jakiś ubogi programik dla Shooter'a, aby po ustaleniu pozycji mrówki poleciał do niej i zatrzymał x metrów przed nią.

Jak to osiągnąć?
Halp!

///Pokemonizm! - DeiDara

DemoLisH - 26-12-2008, 00:21
Temat postu: RE: Nalot
if(distance(twojaPoz.position, robak.position)<50)
// jeśli dystans dzielący ciebie od mrówki jest mniejszy od 50 to...
{
motor(0,0) // zatrzymuje się
}

///Błędy! - DeiDara

Zibo - 26-12-2008, 18:09
Temat postu: RE: Nalot
No właśnie interesują mnie wcześniejsze instrukcje. W ten sposób nie przyniesie skutku zastosowanie powyższego, bo polecenie goto() musi zostać wykonane do końca (czyli bot siądzie wrogowi na łeb ;] ), aby móc przejść do kolejnego.

Nie robimy tego chyba przy pomocy motor(), bo tracimy możliwość omijania przeszkód (jak przy goto), prawda..?

Wciąż poszukuję kodu do stworzenia masakratora szukającego wroga i strzelającego do niego z ust. odległości. :-]

adiblol - 02-01-2009, 19:17
Temat postu: RE: Nalot
Nie możesz używać polecenia goto...

Kod:
float DIST = 40; //podstawiasz odległość przy której się zatrzyma

turn(direction(enemyPos));
if (distance(position,enemyPos)>DIST) motor(1,1); else motor(0,0);
wait(0.1);


Tylko jest jeden problem - nie wyszukuje automatycznie drogi, ale to jest raczej nieistotne w robotach latających.

WRIM - 10-01-2009, 17:19
Temat postu: RE: Nalot
Rozwiązanie znajduje się na ostatniej misji na Nowej Ziemi w programie osłaniacza. Oblicza on za pomocą pewnych funkcji pozycję 5 metrów za działem fazowym i na tę pozycję się udaje. Generalnie najprościej można zmodyfikować ten program, aby zamiast działa fazowego liczył pozycję mrówki, a dystans wynosił 50m. Jednak tak duża odległość wymagałaby jeszcze kilku poprawek, ale od biedy taki program może być.
adiblol - 11-01-2009, 12:03
Temat postu: RE: Nalot
Można też obliczać pozycję tą funkcją: http://colobotpl.pastebin.com/f87a6acc
I sprawdzić jaki kąt powoduje najmniejszą drogę, a później to już tylko goto.

float bestdist=10000;
float bdangle=0;
float dist;
for (float i=0;i<360;i+=10) {
dist=distance(position,PosInFront(enemyPos, i, 40));
if (dist<bestdist) { bestdist=dist; bdangle=i; }
}
goto(PosInFront(enemyPos, bdangle, 40));

Problem pojawia się gdy wyliczenie padnie na miejsce gdzie znajduje się jakaś przeszkoda. Dlatego można zamienić ostatnią linijkę na:

point pos=PosInFront(enemyPos, bdangle, 40);
errmode(0);
while (goto(pos)!=0) {
pos=space(pos);
wait(0.5);
}
errmode(1);

Program nie był testowany.


Powered by phpBB modified by Przemo & WRIM © 2003 phpBB Group