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
Nalot
Autor Wiadomość
Zibo


Dołączył: 24 Gru 2008
Posty: 8
Wysłany: 25-12-2008, 19:02   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
Ostatnio zmieniony przez DeiDara 26-02-2009, 08:59, w całości zmieniany 2 razy  
 
 
DemoLisH
Zbanowany


Wiek: 24
Dołączył: 20 Kwi 2008
Posty: 273
Skąd: Poznań
Wysłany: 26-12-2008, 00:21   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
_________________
Compiling [Gość.exe]...

Zapraszam na grę zwaną League of Legends:
http://signup.leagueofleg...e98cec278372604
Ostatnio zmieniony przez DeiDara 26-02-2009, 08:59, w całości zmieniany 1 raz  
 
 
 
Zibo


Dołączył: 24 Gru 2008
Posty: 8
Wysłany: 26-12-2008, 18:09   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. :-]
Ostatnio zmieniony przez Zibo 26-12-2008, 18:09, w całości zmieniany 1 raz  
 
 
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 02-01-2009, 19:17   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.
_________________
1Tbps Project && Telecomix Network

 
 
 
WRIM


Dołączył: 10 Lut 2008
Posty: 4
Wysłany: 10-01-2009, 17:19   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ć.
Ostatnio zmieniony przez WRIM 10-01-2009, 17:23, w całości zmieniany 1 raz  
 
 
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 11-01-2009, 12:03   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.
_________________
1Tbps Project && Telecomix Network

Ostatnio zmieniony przez adiblol 11-01-2009, 12:03, w całości zmieniany 1 raz  
 
 
 
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012