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 - robot obronny

Bartek c++ - 10-12-2009, 14:29
Temat postu: robot obronny
To mój pierwszy w którym robot sam dobrze celuje.
Działa on na;osy,mrówki,pająki,robale.
To mój pierwszy taki program więc prosze go nie krytykować.
Program się przydaje gdy nie mamy surowców rzeby wybudawać wieżę obronną.

Kod:
extern void object::robotobronny()
{
    while ( true )
    {
        object wrog;
        point pos;
        float B,A,alfa;
        int alien[];
       
        alien[0] = AlienAnt;
        alien[1] = AlienWasp;
        alien[2] = AlienSpider;
        alien[3] = AlienWorm;
       
        wrog = radar(alien);
        pos = wrog.position;
       
        turn(direction(pos));
       
        B = pos.z - position.z-1.2*1.1;
        A = distance2d(pos, position);
        alfa = atan(B/A);
        aim(alfa);
        if (distance(position, wrog.position) < 40)
        {
            turn(direction(pos));
            fire(0.1);
           
           
        }
       
       
       
       
       
    }
   
   
}

FE4R - 10-12-2009, 19:11

Program jest dobry na płaskie, otwarte przestrzenie, czyli jak większość w Colobocie, ale miałem podobny program i wprowadzałem usprawnienia, aby zmniejszyć zużycie energii:

Kod:

fire(0.1);
wait(0.5);


Gdy zrobiłem 20 os(co nigdzie nie występuje, prócz USer Leveli :P ), robot nie nadążał za osami, a poza tym marnował energię na osy, które były za blisko.

Ale przechodząc do sedna sprawy. Gdy robot jest otoczony przez osy z różnych stron i nie może ich zestrzelić, będą potem za blisko, bo robot mógł je zestrzelić. Martwa strefa, to strefa powyżej robota(może on celować tylko pod kątem 30 stopni). Na razie nie wiem, jakie poprawki trzeba wprowadzić, aby robot nie strzelał w osy w martwej strefie.

Bartek c++ - 10-12-2009, 19:16

Ale program szybko reaguje około w 0.5 sekundy.
FE4R - 10-12-2009, 20:39

Bartek c++ napisał/a:
Ale program szybko reaguje około w 0.5 sekundy.

Ale obrót trochę zajmuje.

Berserker - 11-12-2009, 07:17

Kod:
if(abs(alfa)<20)

Warunek sprawdzający czy ose można trafić
Nie ludzcie się, ze tracicie ode w ten sposób bez odrobiny szczęścia

FE4R - 11-12-2009, 09:06

Pracuję nad trickiem, gdzie jeśli robot nie może trafić osy, to po prostu sprawdza czy jest latający i ugania się za nią, by nie dostać z materii organicznej.
Bartek c++ - 11-12-2009, 12:00

zrobiłem test tego programu zrobiłem programy dla os i mrówek, 2 roboty odparły atak były to;strzelec na kołach i działo organiczne na nogach ;) .

[ Dodano: 11-12-2009, 13:50 ]
tutaj daję lepszą wersję 8-)

Kod:
extern void object::RobotObronny()
{
 while ( true )
    {
        object wrog;
        point pos;
        float B,A,alfa;
        int alien[];
       
        alien[0] = AlienAnt;
        alien[1] = AlienWasp;
        alien[2] = AlienSpider;
        alien[3] = AlienWorm;
       alien[4] = AlienEgg;
       if( category==PhazerShooter )
   {
      alien[5] = AlienQueen;
   }
       
        wrog = radar(alien);
        pos = wrog.position;
       
        turn(direction(pos));
       
        B = pos.z - position.z-1.2*1.1;
        A = distance2d(pos, position);
        alfa = atan(B/A);
        aim(alfa-0.3);
 
       
        if (distance(position, wrog.position) < 40   )
        {
            turn(direction(pos));
            fire(0.1);           
        }
       
       if(category==PhazerShooter)
{
 
        if (distance(position, wrog.position) < 50   )
        {
            turn(direction(pos));
            fire(0.1);     
        }
}
       
       
       
    }
   


}


[ Dodano: 11-12-2009, 13:53 ]
FE4R napisał/a:
Na razie nie wiem, jakie poprawki trzeba wprowadzić, aby robot nie strzelał w osy w martwej strefie.
a ja wiem:robot musi się szybko odsunąć i strzelić :P
FE4R - 11-12-2009, 15:03

Bartek c++ napisał/a:
a ja wiem:robot musi się szybko odsunąć i strzelić :P

Nie wiesz jaki program ma osa. Jeśli ma ten kijowy z Episteca, co czeka 10 minut zanim zrzuci materię organiczną, to bez problemu, ale też pracuję nad bardziej zaawansowanym programem dla osy. :P

A poza tym napisałeś warunek w swoim programie, że jeśli robot jest działem fazowym, to może do wrogów również doliczyć Królową Obcy, ale tor pocisku działą fazowego jest paraboliczny i wymaga.... wiedzy, której nie posiadam. :mrgreen: :lol:

Bartek c++ - 11-12-2009, 15:31

patrz jak to narysowałem

działo fazowe

zwykłe działo

przepraszam że tak brzydko ale to na szybko zrobiłem.

[ Dodano: 11-12-2009, 15:34 ]
więc nie warzne jak nachylisz lufe zwykłego działa pociski lecą na tą samą odległość.
A w dziale fazowym jest tak że tym większy kąt nachylenia lufy ustawisz tym wyrzej i dalej pociski lecą.

[ Dodano: 11-12-2009, 15:36 ]
FE4R napisał/a:
Nie wiesz jaki program ma osa. Jeśli ma ten kijowy z Episteca, co czeka 10 minut zanim zrzuci materię organiczną, to bez problemu, ale też pracuję nad bardziej zaawansowanym programem dla osy.
ja mam dwa programy że jeśli wróg będzie w zasięgu 2 metrów rzuca materie, nie modli się nad wrogiem.Poza tym te programy epsiteca działają tak bo w programach os urzywane jest goto.

[ Dodano: 11-12-2009, 23:34 ]
a to filmik z działania tego programu
http://www.youtube.com/watch?v=yQZreVSs6oc

Berserker - 14-12-2009, 09:10

Fear, jeśli chcesz program dla os to możesz wziąć to co napisałem w temacie "nalot"
FE4R - 14-12-2009, 10:49

Berserker napisał/a:
Fear, jeśli chcesz program dla os to możesz wziąć to co napisałem w temacie "nalot"

Byłby świetny do testowania programów obronnych, gdyż te wasp01 czy 02 to beznadziejne programy.
Chociaż do osy jeden im się udał to ten waspe1.txt, którego używają w ćwiczeniach do zestrzelenia os. Przy 20 osach z takim programem latającemu działu organicznemu kończy się energia pod koniec.

Berserker - 14-12-2009, 10:56

Na to trzeba pisać programy które sprawdZają wiele warunków. Mam taki jeden który ma skuteczność 75%

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