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

Defensywa - Phazer A-A

Przemq - 30-08-2010, 11:07
Temat postu: Phazer A-A
Mój prosty program do obrony przeciwlotniczej. Przystosowany do współpracy dwóch Dział Fazowych. Jestem słaby w CBot, ale mam nadzieję, że na tym forum się doszkolę. :-)

Ps.: Dodałem parę usprawnień

Kod:

extern void object::PhazerAA()
{
    object item;           
   
    aim(45);                 
   
    while ( true )           
    {
        item = radar(AlienWasp);
        if ( item != null )
        {
           
            if (distance(position, item.position) < 55)
            {
                turn(direction(item.position));
                fire(0.1);       
            }
        }
        wait(0.2);             
    }
}

Berserker - 31-08-2010, 16:11

Sam program mimo, ze nie ma jakichs specjalnych fajerwerkow jest dobrze napisany, ale ja tu za cholere nie widze przystosowania do wspolpracy dwoch dzial :P
Bartek c++ - 31-08-2010, 18:32

Jednak musze cie ostrzec że nie zawsze "aim(45);" wystarcza czasami gdy ukształtowanie terenu sie zmieni osa zniża lub podnosi swój pułap.
Przemq - 31-08-2010, 19:51

Berserker napisał/a:
Sam program mimo, ze nie ma jakichs specjalnych fajerwerkow jest dobrze napisany, ale ja tu za cholere nie widze przystosowania do wspolpracy dwoch dzial :P


Chodziło mi o to, że gdy są dwa działa lepiej się sprawdzają (tzn.: Mniejsze prawdopodobieństwa że osa się przebije).

Ps.: Program testowałem na programie wasp03 bodajże. Z 40 os nic nie zostało.

Berserker - 31-08-2010, 19:59

Cytat:
Chodziło mi o to, że gdy są dwa działa lepiej się sprawdzają (tzn.: Mniejsze prawdopodobieństwa że osa się przebije).

Ale to nie jest jeszcze wspolpraca miedzy robotami, logika podpowiada, ze jak sa 2 roboty to jest lepiej, 3 to jeszcze lepiej etc, ale wspolpraca to cos wiecej :)

Bartek c++ - 01-09-2010, 08:54

dla współpracy powinieneś zrobić jakiś sprawdzacz jego osi odczytuje jego oś aby sie w niego nie obrócić i go nie zestrzelić
Przemq - 01-09-2010, 09:30

Bartek c++ napisał/a:
dla współpracy powinieneś zrobić jakiś sprawdzacz jego osi odczytuje jego oś aby sie w niego nie obrócić i go nie zestrzelić


Eee... Można prościej? Najlepiej z przykładem.

Bartek c++ - 01-09-2010, 09:42

Sam nie pamiętam narazie nie mam czasu ale jak będe miał to znajde
Przemq - 01-09-2010, 11:23

Jak zrobić aby oba Phazery nie waliły w jedną osę? Przy atakach z jednego kierunku program radzi sobie dobrze, ale gdy atak nadchodzi z kilku stron... BUM,, BUM i bazy ni ma... :-/
adiblol - 01-09-2010, 11:59

Przemq napisał/a:
Jak zrobić aby oba Phazery nie waliły w jedną osę?

Musisz dzielić dane o obiektach między robotami, najlepiej do tego nadają się statyczne pola klasy.

Algorytm w pseudokodzie:
Kod:

while(true) {
 minlen=0;
 do {
  osa = radar(category=AlienWasp, minimalny_dystans=minlen);
  if (osa==null) break;
  minlen = dystans_do(osa)+0.001;
 while (osa należy do publiczna_klasa.obcy);
 if (osa==null) { czekaj_zeby_nie_przeciazyc_CPU; continue; }
 dodaj do publiczna_klasa.obcy element osa;
}

// algorytm poprawiony 2010-09-01 16:54 -adiblol

Teoretycznie taki algorytm powinien zadziałać na nieskończenie wielkiej liczbie robotów. publiczna_klasa.obcy to zbiór, może zostać zaimplementowany jako tablica.

Berserker - 01-09-2010, 14:48

Jesli klasy, pola etc to narazie za wysoki poziom, to mozna po prostu kazdemu robotowi przydzielic pewien kat ktory ma bronic. Np mamy 3 roboty, wiec kazdy broni swoje 120°. Czyli piszemy sobie funkcje ktora wyszukuje cel
Kod:

object object::getTarget(float range, int n, float len)
{
object p;
p = radar(AlienWasp, range/2+(n-1)*range-orientation), range, 0, len);
return p;
}

range - kat wyszukiwania;
n - numer robota (by bylo wiadomo ktora strefe ma przeszukiwac);
len - max odleglosc;

I mamy minimalna wspolprace miedzy robotami.


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