|
Polski Portal COLOBOTa COLOBOT Polish Portal |
|
Eliminacja obcych - OsaDead
Emxx52 - 06-11-2010, 22:14 Temat postu: OsaDead Właśnie napisałem prosty program do zabijania os. A oto on:
Kod: | extern void object::OsaDead()
{
object item;
float angle,ab;
aim(0);
while (true)
{
while (radar(AlienWasp, 0, 360, 0, 20) == null)
{
item = radar(AlienWasp);
turn(direction(item.position));
motor(1,1);
jet(0);
if(position.z-1 > item.position.z)
{
jet(-0.3);
point a=this.position;
point b=item.position;
aim(0);
aim(distance(position,item.position)-50);
}
ab=item.position.z-position.z;
if(position.z-topo(item.position)>0.7 or
position.z+topo(item.position)<0.7)
{
aim(0);
}
if(position.z+1 < item.position.z)
{
point a=this.position;
point b=item.position;
jet(0.7);
aim(0);
aim(+50);
}
if(position.z!=item.position.z+ab or position.z!=item.position.z-ab and distance(position,item.position)<15)
{
jet(ab);
}
if(distance(position,item.position)<15)
{
motor(0,0);
jet(ab);
goto(position.x, position.y, item.position.z);
turn(direction(item.position));
}
wait(0.2);
}
item = radar(AlienWasp);
angle = direction(item.position);
turn(angle);
if (angle < 0)
{
motor(1,0.5);
}
else
{
motor(0.5,1);
}
wait(0.01);
fire(0.1);
}
}
|
Podoba się?
edit: Program poprawiony
edit2: Kolejna poprawka
Berserker - 07-11-2010, 01:35
Niestety, ale musze cie powiadomic, ze program solucyjny z 2 cwiczenia z zestrzeliwywania os jest skutezniejszy
A teraz czepianie sie teoretyki:
1) Brak uwzglednienia sytuacji w ktorej chwilowo os nie ma
2)
Po cholere tyle spacji?
3)
Kod: | aim(distance(a,b)-50); | i Kod: | aim(distance(a,b)+50); |
Tjaaaa...
4) Nie operujesz wysokoscia i lufa na biezaco podczas celowania, pare razy osa zmienila poziom lekko i zatoczyla pare kolek wokol robota - z 10% ogniwa atomowego poszlo
Korniszon - 07-11-2010, 08:10 Temat postu: Drobne poprawki
Berserker napisał/a: | program solucyjny z 2 ćwiczenia z zestrzeliwania os jest skuteczniejszy |
Zgadzam się z tobą.
A do programu:
Emxx52, czyżby nie wiesz, że this.position to to samo co position.
Przy item.position jest już OK.
Kod: | ...
item = radar(AlienWasp);
angle = direction(item.position);
turn(angle);
fire(0.1);
if (angle < 0)
{
motor(1,0.5);
}
else
{
motor(0.5,1);
}
... |
Lepiej by było:
Kod: | ...
item = radar(AlienWasp);
angle = direction(item.position);
turn(angle);
if (angle < 0)
{
motor(1,0.5);
}
else
{
motor(0.5,1);
}
wait(0.01);
fire(0.1);
... |
Aha, na początku popracuj se nad programami do zabijania mrówek(są łatwiejsze ).
Emxx52 - 07-11-2010, 13:53
Korniszon napisał/a: | Emxx52, czyżby nie wiesz, że this.position to to samo co position. | Wiem, ale this.positon ladniej wygląda. A tych spacji to nie dawałem tylko już były.
Korniszon - 07-11-2010, 18:26
Aha...
Emxx52 napisał/a: | ladniej |
Nie powinno być ładniej
Berserker - 07-11-2010, 18:48
@up a co za roznica?
Emxx52 - 07-11-2010, 21:29
@topic: Program poprawiony
Berserker - 07-11-2010, 22:32
Twoj program ma 1 zalete: dzieki niemu przestalem uwazac swoj program za beznadziejny bo potrafil spudlowac wiecej niz 2 razy i zmarnowac wiecfej niz 3% ogniwa atomowego na II cwiczenie z osami
Odpusc sobie machanie lufa bo to cos ci slabo idzie (albo jesli wiesz o co chodzi z funkcjami trygonometrycznymi wyprowadz sobie wzor na to). Skup sie na wyrownywaniu wysokosci z osa - raz robot zmarnowal 50% ogniwa na 1 ose, bo znalazla sie w zasiegu kiedy on byl z 20m pod nia i zaczal strzelac nie wyrownujac wysokosci, strzelal przez jakas minute )
Kod: | if(position.z==item.position.z+0.5 or position.z==item.position.z-0.5) |
Jesli to ma byc sprawdzenie, czy sa na rownej wysokosci, to troche zle to wykombinowales bo warunek zwroci wartosc false jesli np bedzie position.z == item.position.z
Emxx52 - 10-11-2010, 20:55
gdy wyłączyłem kompa to dopiero przypomniałem sobie o kilku błędach Spróbuję jeszcze poprawić
edit: No i poprawiony
|
|