Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
|
Forum - Polski Portal COLOBOTa |
|
|
Naprawa |
Autor |
Wiadomość |
colobotwymiiata
Zjem cię
Twoja ulubiona misja: Swobodna na Krystalii
Pomógł: 6 razy Wiek: 20 Dołączył: 02 Lut 2009 Posty: 329 Skąd: Oleśnica
|
Wysłany: 20-02-2009, 22:43 Naprawa
|
|
|
Program służy do naprawy botów i budynków w promieniu x metrów.Niezbyt doskonały, szczególnie funkcja "idz()" domaga się poprawienia. Uwaga, im większy promień wykrywania botów, tym wolniejsza reakcja!
Kod:
Kod: | extern void object::Sanitariusz()
{
object q;
point start;
int qcat,to[],t;
t=0;
to[t++]=WheeledGrabber;
to[t++]=TrackedGrabber;
to[t++]=WingedGrabber;
to[t++]=LeggedGrabber;
to[t++]=WheeledShooter;
to[t++]=TrackedShooter;
to[t++]=WingedShooter;
to[t++]=LeggedShooter;
to[t++]=WheeledOrgaShooter;
to[t++]=TrackedOrgaShooter;
to[t++]=WingedOrgaShooter;
to[t++]=LeggedOrgaShooter;
to[t++]=WheeledSniffer;
to[t++]=TrackedSniffer;
to[t++]=WingedSniffer;
to[t++]=LeggedSniffer;
to[t++]=Subber;
to[t++]=Shielder;
to[t++]=PhazerShooter;
to[t++]=Thumper;
to[t++]=Recycler;
to[t++]=Houston;
to[t++]=BotFactory;
to[t++]=ResearchCenter;
to[t++]=RadarStation;
to[t++]=ExchangePost;
to[t++]=RepairCenter;
to[t++]=DefenseTower;
to[t++]=AutoLab;
to[t++]=PowerStation;
to[t++]=PowerPlant;
to[t++]=NuclearPlant;
to[t++]=Converter;
to[t++]=Derrick;
to[t++]=PowerCaptor;
to[t++]=Vault;
start=position;
errmode(0);
while(true)
{
if(shieldLevel<1)
{
while(shieldLevel<1)
{
shield(1,10);
}
shield(0,0);
}
for(float od=0;od<1000;od=od+1)
{
q=radar(to,0,360,od-1,od);
if(q!=null)
if(q.shieldLevel!=1)
{
qcat=q.category;
idz(q,qcat);
shield(1,10);
while(q.shieldLevel<1)wait(0.1);
shield(0,0);
goto(start);
}
}
}
}
object object::idz(object q, int qcat)
{
while(radar(qcat,0,360,0,9)==null)
{
turn(direction(q.position));
motor(1,1);
if(radar(0,0,360,0,5)!=null)
{
turn(-90);
move(3);
turn(90);
}
}
motor(0,0);
} |
|
|
|
|
|
Abadon
Administrator forum Administrator
Pomógł: 3 razy Dołączył: 11 Sie 2008 Posty: 586
|
Wysłany: 21-02-2009, 09:39
|
|
|
Ciekawy programik, to coś takiego jakby osłaniacz (pewnie działa na podobnych zasadach ten bot). Jak na to wpadłeś?? |
_________________
|
|
|
|
|
colobotwymiiata
Zjem cię
Twoja ulubiona misja: Swobodna na Krystalii
Pomógł: 6 razy Wiek: 20 Dołączył: 02 Lut 2009 Posty: 329 Skąd: Oleśnica
|
Wysłany: 21-02-2009, 10:37
|
|
|
a... był gdzieś temat o znajdywaniu tylko pełnych ogniw, i pomyślałem, że przerobie to na szukanie zniszczonych botów |
|
|
|
|
Sioner
Ubuntu user
Dołączył: 23 Mar 2009 Posty: 152
|
Wysłany: 26-03-2009, 15:48 od poczontku
|
|
|
Ja od początku gdy osłaniacza miałem już to robiłem żeby się naprawić |
|
|
|
|
colobotwymiiata
Zjem cię
Twoja ulubiona misja: Swobodna na Krystalii
Pomógł: 6 razy Wiek: 20 Dołączył: 02 Lut 2009 Posty: 329 Skąd: Oleśnica
|
Wysłany: 26-03-2009, 16:13
|
|
|
Ten program robiłeś? Czy co? |
|
|
|
|
Sioner
Ubuntu user
Dołączył: 23 Mar 2009 Posty: 152
|
Wysłany: 26-03-2009, 16:54 only
|
|
|
tylko osłone uruchamialem |
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 26-03-2009, 16:58
|
|
|
Nie lubie tego...
Kod: |
...
for(float od=0;od<1000;od=od+1)
{
q=radar(to,0,360,od-1,od);
if(q!=null)
...
|
Sprawdzanie pierscieni o roznicy promieni 1m jest troche pamieciochlonne...
1) Ustalic pozycje najdalszego robota, i odleglosc od niego ustawic jako granice.
2) Nie sprawdzac po kolei tych pierscieni tylko przeskakiwac od robota do robota. Robotow jest po dluzszym czasie grania 30, a pierscieni? 300. |
_________________
|
|
|
|
|
colobotwymiiata
Zjem cię
Twoja ulubiona misja: Swobodna na Krystalii
Pomógł: 6 razy Wiek: 20 Dołączył: 02 Lut 2009 Posty: 329 Skąd: Oleśnica
|
Wysłany: 26-03-2009, 19:40
|
|
|
Z tym od najdalszego do najbliższego to się sam zorientowałem, tyle że przed napisaniem programu .
A wogóle to napisałem ten program nie z myślą na naprawianiu wszystkich botów, tylko botów w obrębie bazy(pod "od<1000" dajemy promień bazy, 1000 jest przykładową liczbą).
PS.: Powiedz, jak przeskakiwać od robota do robota, to chętnie wstawie to do programu. |
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 26-03-2009, 22:22
|
|
|
Kod: |
...
dist = 1;
target = radar(list, 0, 360, 0, 1000, -1, FilterOnlyLanding);
if(target == null) break;
max = distance(target.position, position);
while(dist < max+1)
{
target = radar(list, 0, 360, dist-1, max, 1, FilterOnlyLanding);
if(target.energyCell.energyLevel > 0.2)
{
dist = distance(position, target.position) + 1.5;
}
...
|
Skopiowane na surowo z programu. Raczej sie zorientujesz co i jak.
Program raczej teoretyczny. bo narazie robot siedzi na "wait(0.1);" ;]
A mapa chyba ma max wspolrzedne od 400 do -400 |
|
|
|
|
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
|
|
|
|
|
Berserker
Dark Ness
Twoja ulubiona misja: Ofrenia
Pomógł: 16 razy Wiek: 24 Dołączył: 24 Mar 2009 Posty: 496 Skąd: Bigos
|
Wysłany: 27-03-2009, 14:13
|
|
|
Retobject to funkcja, o ktorej sie praktycznie dowiaduje w tym samym momencie co o produce, tylko pozniej sie zaczyna rozumiec o co w niej chodzi. W sumie o tym nie pomyslalem ;] |
_________________
|
|
|
|
|
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|