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

Zasoby - RechargeCell (Czyli naładuj ogniwo)

Schocker - 01-06-2009, 15:59
Temat postu: RechargeCell (Czyli naładuj ogniwo)
Pierwszy program, na który miałem jakiś pomysł. Dzisiaj postaram się go usprawnić, ale coś mi się dzieje z kompem... Przydało by się go poprawić, był testowany dosłownie chwilę. Może się komuś przyda... Ah, jak zwykle za bardzo się rozpisuję...
Kod:

extern void object::RechargeCell()
{
    point  start;         
    object ogni;       
    object elek;
   
    start = position;     
   
    elek = radar(PowerStation);
    ogni = radar(PowerCell);
   
    goto(ogni.position);
    grab(InFront);
   
    if (ogni.energyLevel < 1 )
    {
        goto(elek.position);           
    }
   
    else
    {
        drop(InFront);
        goto(start);
        message("Najblizsze ogniwo jest juz naladowane!", DisplayWarning);
    }
   
    while (ogni.energyLevel < 1 )
    {
        wait(1);
    }
   
    if (ogni.energyLevel == 1 )
    {
        goto(start);
        message("Ładowanie zakończone!", DisplayInfo);
    }
}


adiblol - 01-06-2009, 16:17

"grab();" daj między "if (ogni.energyLevel < 1 ) { " i "goto(elek.position);". I po "message("Najblizsze ogniwo jest juz naladowane!", DisplayWarning);" daj "return;", to się program zakończy.
Schocker - 01-06-2009, 16:52

Ah, mój błąd. Właśnie o tym m.in. mówiłem.

Version 2.0! xD

Kod:
extern void object::RechargeCell2()
{
    point  start;         
    object cell;           
    object item;
    object odgr;
   
    start = position;     
   
    item = radar(PowerStation);
    cell = radar(PowerCell);
   
    if( item == null )
    {
        odgr = radar(PowerCaptor);
    }
    if ( odgr == null )
    {
        message("Nie znaleziono elektrowni ani odgromnika!", DisplayError);
                return;
    }
    else
    {
       
       
        if (cell.energyLevel < 1 )
        {
            goto(cell.position);
            grab(InFront);
            goto(item.position);           
        }
       
        else
        {
            goto(start);
            message("Najblizsze ogniwo jest juz naladowane!", DisplayWarning);
    return;
        }
       
        while (cell.energyLevel < 1 )
        {
            wait(1);
        }
       
        if (cell.energyLevel == 1 )
        {
            goto(start);
            message("Ładowanie zakończone!", DisplayInfo);
        }
    }
}


1) Przy pisaniu programu używam raczej nazw angielskich, jakoś tak się przyzwyczaiłem. :P
2) Teraz, najpierw szuka Elektrowni, gdy nie znajdzie jej, szuka Odgromnika. W wypadku braku i tego, wyświetla wiadomość i kończy program.
3) Ah, jeśli wszystkie ogniwa w pobliżu są naładowane, robot już nie "idzie" do żadnego, tylko po prostu pokręci się przez parę sekund, wyświetli wiadomość i zatrzyma program.

Korniszon - 04-10-2010, 13:28

Schocker napisał/a:
extern void object::RechargeCell2()
{
point start;
object cell;
object item;
object odgr;

start = position;

item = radar(PowerStation);
cell = radar(PowerCell);

if( item == null )
{
odgr = radar(PowerCaptor);
}
if ( odgr == null )
{
message("Nie znaleziono elektrowni ani odgromnika!", DisplayError);
return;
}
else
{


if (cell.energyLevel < 1 )
{
goto(cell.position);
grab(InFront);
goto(item.position);
}

else
{
goto(start);
message("Najblizsze ogniwo jest juz naladowane!", DisplayWarning);
return;
}

while (cell.energyLevel < 1 )
{
wait(1);
}

if (cell.energyLevel == 1 )
{
goto(start);
message("Ładowanie zakończone!", DisplayInfo);
}
}
}


Program , jeśji wykryje stację energytyczną, wykrzaczy się i wyświetli "Zmienna nie została zainicjowana".

Poprawa:
Kod:
extern void object::RechargeCell3()
{
    errmode(0);
    point  start;
    int list[], i=0;         
    object cell;           
    object item;

    list[i++]=PowerStation;
    list[i++]=PowerCaptor;
   
    start = position;     
   
    item = radar(list);
    cell = radar(PowerCell);
   
    if ( item == null )
    {
        message("Nie znaleziono elektrowni ani odgromnika!", DisplayError);
        return;
    }
    if( cell == null )
    {
        message("Nie znaleziono ogniwa elektrycznego",DisplayError);
        return;
    }
    else
    {
       
        if (cell.energyLevel < 1 )
        {
            goto(cell.position);
            grab();
            goto(item.position);           
        }
       
        else
        {
            goto(start);
            message("Najblizsze ogniwo jest juz naładowane!", DisplayError);
            return;
        }
       
        while (load.energyLevel < 1 )
        {
            wait(0.01);
        }
       
        if (load.energyLevel == 1 )
        {
            goto(start);
            message("Ładowanie zakończone!", DisplayInfo);
            drop();
        }
    }
}

Schocker - 04-10-2010, 15:19

Korniszon napisał/a:
Schocker napisał/a:
extern void object::RechargeCell2()
{
point start;
object cell;
object item;
object odgr;

start = position;

item = radar(PowerStation);
cell = radar(PowerCell);

if( item == null )
{
odgr = radar(PowerCaptor);
}
if ( odgr == null )
{
message("Nie znaleziono elektrowni ani odgromnika!", DisplayError);
return;
}
else
{


if (cell.energyLevel < 1 )
{
goto(cell.position);
grab(InFront);
goto(item.position);
}

else
{
goto(start);
message("Najblizsze ogniwo jest juz naladowane!", DisplayWarning);
return;
}

while (cell.energyLevel < 1 )
{
wait(1);
}

if (cell.energyLevel == 1 )
{
goto(start);
message("Ładowanie zakończone!", DisplayInfo);
}
}
}


Program , jeśji wykryje stację energytyczną, wykrzaczy się i wyświetli "Zmienna nie została zainicjowana".

Poprawa:
Kod:
extern void object::RechargeCell3()
{
    errmode(0);
    point  start;
    int list[], i=0;         
    object cell;           
    object item;

    list[i++]=PowerStation;
    list[i++]=PowerCaptor;
   
    start = position;     
   
    item = radar(list);
    cell = radar(PowerCell);
   
    if ( item == null )
    {
        message("Nie znaleziono elektrowni ani odgromnika!", DisplayError);
        return;
    }
    if( cell == null )
    {
        message("Nie znaleziono ogniwa elektrycznego",DisplayError);
        return;
    }
    else
    {
       
        if (cell.energyLevel < 1 )
        {
            goto(cell.position);
            grab();
            goto(item.position);           
        }
       
        else
        {
            goto(start);
            message("Najblizsze ogniwo jest juz naładowane!", DisplayError);
            return;
        }
       
        while (load.energyLevel < 1 )
        {
            wait(0.01);
        }
       
        if (load.energyLevel == 1 )
        {
            goto(start);
            message("Ładowanie zakończone!", DisplayInfo);
            drop();
        }
    }
}


Dziwne... U mnie nic takiego się nie działo. Ale program jest stary i w ogóle. :P A na forum mogę wejść tylko z komórki.

Tapnięto z Samsunga Galaxy Spica.


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