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 |
|
|
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
|
|
|
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
@up
Widzisz, zawsze to dobra motywacja
-----------------
Ok, a teraz konkrety. Kto uruchomil, komu nie dzialalo, kto ma jakies zastrzezenia? Przydalyby mi sie jakies uwagi. |
_________________
|
|
|
|
|
|
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
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|