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
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
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 :-P .
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
Wysłany: 27-03-2009, 09:55   

lepiej skorzystać z retobject.
_________________
1Tbps Project && Telecomix Network

 
 
     
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 ;]
_________________
 
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012