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