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
Kolejny program do zbierania smieci.
Autor Wiadomość
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: 08-02-2011, 00:57   Kolejny program do zbierania smieci.

Program pozwala wybrac, czy chcemy tworzyc ogniwa elektryczne, atomowe, czy kostki tytanu. Ma wlasny niesamowicie prymitywny sposob liczenia potrzebnej energii, jest bledoodporny (jak go testowalem to na kazda niebezpieczna sytuacje ktora udalo mi sie znalezc staralem sie zrobic dzialanie dzieki ktorym robot moze kontynuowac program normalnie). Robot zostawia uran w wyznaczonym miejscu (za pomoca odpowiedniej flagi). Ma tez pare innych fajnych rzeczy.

Kod:
extern void object::Zlomiarz()
{
    object p, pc, c, obj, flag;
    point s, start = position;
    int i, count, datasize, station[];
    int plant, target, ore, fcat;
    int r, e = 0;
    float elvl;
    string type;
    bool on;
    //Parametry
    target = Titanium;
    count = 10;
    datasize = 3;
    //--------------
    i = 0;
    float elvl_data[datasize];
    station[i++] = PowerStation;
    station[i++] = PowerCaptor;
    for(i = 0; i < datasize; i++) elvl_data[i] = 0.3;
    on = false;
    if(target == NuclearCell)
    {
        fcat = YellowFlag;
        plant = NuclearPlant;
        ore = UraniumOre;
        type = "load";
        on = true;
    }
    if(target == PowerCell)
    {
        fcat = GreenFlag;
        plant = PowerPlant;
        ore = Titanium;
        type = "load";
        on = true;
    }
    if(target == Titanium)
    {
        fcat = RedFlag;
        plant = Converter;
        ore = TitaniumOre;
        type = "search";
        on = true;
    }
    if(on != true) return;
    errmode(0);
    while(radar(fcat) == null)
    {
        if(on)
        {
            message("Waiting until target site is assigned ("+strlower(fcat+"")+" requiered)");
            on = false;
        }
        wait(1);
    }
    on = true;
    flag = radar(fcat);
    pc = radar(station);
    elvl = 0.7;
    while(true)
    {
        i = 0;
        while(Count(target) < count)
        {
            wait(2);
            p = radar(ore);
            if(p == null)
            {
                don(flag.position);
            }
            else
            {
                if(load != null && load.category != ore && load.category != target) drop();
                elvl = elvl_data[e%datasize];
                elvl_data[e%datasize] = energyCell.energyLevel;
                stage1(ore, flag.position);
                Recharge(pc, elvl*2);
                stage2(ore, plant, target, type, flag.position, elvl*2, pc);
                stage3(target, flag.position);
                elvl_data[e%datasize] -= energyCell.energyLevel;
                if(elvl_data[e%datasize] > elvl) elvl_data[e%datasize] = elvl;
                e++;
            }
            for(elvl = 0, i = 0; i < datasize; i++)
            {
                elvl += 0.2*elvl_data[i];
            }
            Recharge(pc, elvl*2);
        }
        Recharge(pc, 0.9);
        don(flag.position);
       
    }
   
}
int object::Count(int cat)
{
    object item;
    int total = 0;
    int i = 0;
   
    while ( true )
    {
        item = retobject(i++);
        if ( item == null )  return total;
       
        if ( item.category == cat and item.position.z != nan)
        {
            total ++;
        }
    }
}
void object::stage1(int ore, point c)
{
    if(load == null)
    {
        object p = radar(ore);
        if(p == null) don(c);
        else
        {
            go(p.position);
            grab();
        }
    }
}
void object::stage2(int ore, int plant, int target, string type, point c, float elvl, object pc)
{
    bool on = true;
    point s;
    while(radar(plant) == null)
    {
        if(on) message(plant+" not found. Standing by...");
        on = false;
        don(c);
       
    }
    object p = radar(plant);
    if(load != null && load.category == ore)
    {
        go(p.position);
        drop();
        move(-4);
        s = position;
        Recharge(pc, elvl);
        don(s);
        try
        {
            WFP(target, p, type);
        }
        catch(1)
        {
            return;
        }
        go(p.position);
        grab();
    }
}
void object::stage3(int target, point c)
{
    if(load != null && load.category == target)
    {
        go(space(c));
        drop();
    }
}
void object::WFP(int cat, object plant, string type)
{
    float time = lifeTime;
    if(plant == null) return;
    if(strfind(type, "load") != nan)
    {
        while(true)
        {
            if(plant.load != null)
            {
                if(plant.load.category == cat) break;
            }
            if(plant.energyCell != null)
            {
                if(plant.energyCell.category == cat) break;
            }
            wait(1);
            if(lifeTime-time > 40)
            {
                throw(1);
                break;
            }
        }
        return;
    }
    if(strfind(type, "search") != nan)
    {
        object p;
        do
        {
            p = search(cat, plant.position);
            wait(1);
            if(lifeTime-time > 40)
            {
                throw(1);
                break;
            }
        }
        while(p == null or distance2d(p.position, plant.position) > 1);
    }
}
int object::Recharge(object s, float lvl)
{
    if(energyCell.energyLevel > lvl) return 0;
    errmode(0);
    if(s == null || energyCell.category == NuclearCell)
    {
        s = SFC(energyCell.category);
        if(s == null)
        {
            return 1;
        }
        go(s.position);
        grab();
        drop(Behind);
        grab(EnergyCell);
        drop();
        grab(Behind);
        drop(EnergyCell);
    }
    else
    {
        while(go(s.position) != 0) wait(1);
        while(energyCell.energyLevel < 1) don(s.position);
    }
    return 0;
}
object object::SFC(int cat)
{
    float d = 0;
    object p = null;
    do
    {
        if(p != null) d = distance2d(p.position, position);
        p = radar(cat, 0, 360, d+0.2);
    }
    while(p != null && p.energyLevel < 0.5);
    return p;
}
int object::go(point c)
{
    errmode(0);
    point dest = c;
    int err;
    err = goto(c);
    if(err == 0) return 0;;
    if(err == 212)
    {
        if(distance2d(position, dest) > 20)
        {
            dest = space(dest);
            don(dest);
        }
        return 1;
    }
    else
    {
        dest.x = dest.x*0.5+position.x*0.5;
        dest.y = dest.y*0.5+position.y*0.5;
        go(dest);
    }
    return 0;
}
void object::don(point c)
{
    errmode(0);
    if(distance2d(c, position) > 2) goto(c);
    wait(1);
}
_________________
 
 
     
Sebastian12345
Neokid


Dołączył: 30 Sty 2011
Posty: 51
Wysłany: 08-02-2011, 15:05   

:shock:

Kod:

       if(on)
        {
            message("Waiting until target site is assigned ("+strlower(fcat+"")+" requiered)");
            on = false;
        }
        wait(1);


PO ANGIELSKU! kto by pisał program dla polaków a text który by wyświetlał mial byc po angielsku ?
_________________
 
     
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: 08-02-2011, 16:06   

Jak patrzę na tak ambitne programy to aż chce się CWorld robić żeby zaimplementować...
_________________
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: 08-02-2011, 16:30   

Cytat:
PO ANGIELSKU! kto by pisał program dla polaków a text który by wyświetlał mial byc po angielsku ?


W ten sposob skutecznie eliminuje wiekszosc kretynow ktorzy by nie umieli uruchomic takiego programu :D

@up
Widzisz, zawsze to dobra motywacja :)

-----------------
Ok, a teraz konkrety. Kto uruchomil, komu nie dzialalo, kto ma jakies zastrzezenia? Przydalyby mi sie jakies uwagi.
_________________
 
 
     
Wyświetl posty z ostatnich:   
Nie możesz pisać nowych tematów
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum

Wersja do druku

Skocz do:  

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