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 |
|
|
pytanie |
Autor |
Wiadomość |
shad321
Dołączył: 02 Mar 2008 Posty: 1
|
Wysłany: 02-03-2008, 14:32 pytanie
|
|
|
Hej mam pytanko czy istnieje jakiś sposób by podczas wyszukiwania na radarze przedmiotu poprzez funkcje radar, dać mu jakieś kryteria jakie musi spełnić by wyświetlił wynik ?
Coś jak
Radar(PowerCell) "where" PowerCell.EnergyLevel >0.75 ; // Czy coś kolo tego
///Błędy - DeiDara |
Ostatnio zmieniony przez DeiDara 25-02-2009, 21:54, w całości zmieniany 1 raz |
|
|
|
|
YanPL
Dołączył: 12 Lut 2008 Posty: 32
|
Wysłany: 02-03-2008, 15:44 RE: pytanie
|
|
|
nie da się. ale zobacz, co można zrobić
Kod: |
object battery;
float dist;
dist=0;
while(true)
{
battery=radar(PowerCell,360,360,dist);
if(battery==null)
{
message("no battery");
return;
}
dist=distance(position,battery.position)+0.001;
if(battery.energy>0.75)
break;
}
|
|
_________________
|
|
|
|
|
Kubus11
Wiek: 24 Dołączył: 13 Lut 2008 Posty: 36 Skąd: Warszawa
|
Wysłany: 02-03-2008, 16:26 RE: pytanie
|
|
|
Też ostatnio nad tym myślałem i napisałem swoją wersję programu SwitchCell (specjalnie nazwaną Swicz Cel ) Radar wykrywa ogniwo, a gdy nie jest ono pełne, wykrywa inne. Może nie jest to jakiś super program, ale mi wystarcza
Kod: | extern void object::SwiczCelv3()
{
int A[], i = 0, err;
object item;
float dist;
A[i++] = PowerCell;
A[i++] = NuclearCell;
item = radar(A);
while (true)
{
turn(direction(item.position));
if (item.energyLevel == 1)
{
message("Jadę wymienić baterię", DisplayInfo);
goto(item.position);
grab();
drop(Behind);
grab(EnergyCell);
drop();
grab(Behind);
drop(EnergyCell);
message("Koniec", DisplayInfo);
break;
}
else
{
message("Ta bateria się nie nadaje", DisplayWarning);
dist = distance(position, item.position);
item = radar(A, 0, 360, dist+1);
}
}
} |
|
|
|
|
|
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: 23-04-2008, 19:08 RE: pytanie
|
|
|
Może się tak zdarzyć, że istnieje naładowana bateria, która jest dalej niż ta nienaładowana. W takim przypadku:
Kod: |
// ta funkcja testuje FindFullCell(), wymieniając baterię.
extern void object::Test() {
object item=FindFullCell(false, 0.8);
goto(item.position);
grab();
drop();
grab(EnergyCell);
drop(Behind);
grab();
drop(EnergyCell);
}
/*
func: false=wyszukiwanie najblizszego, true=wyszukiwanie najbardziej naladowanego
min: minimalne naladowanie, tylko dla func rownego false.
*/
object object::FindFullCell(bool func, float min) {
int i=0;
object item;
float best;
if (func) best=0; else best=10000;
object nearestCell=null;
while(true){
item=retobject(i++);
if (item==null) break;
if (!func) {
if ((item.category==PowerCell) and (item.energyLevel>min) and (distance(position, item.position)<best)){
best=distance(position,item.position);
nearestCell=item;
}
} else {
if ((item.category==PowerCell) and (item.energyLevel>best)){
best=item.energyLevel;
nearestCell=item;
}
}
}
return nearestCell;
}
|
Uwaga! Tryb func=true jest niedoskonały, zwróci najbardziej naładowaną nawet jeśli znajduje się na drugim końcu świata. |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|