|
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.
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. A na forum mogę wejść tylko z komórki.
Tapnięto z Samsunga Galaxy Spica.
|
|