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
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 :P

///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

 
 
 
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

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