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
Program do naładowania pobliskiej baterii
Autor Wiadomość
LooC


Wiek: 23
Dołączył: 18 Gru 2008
Posty: 2
Skąd: Rotmanka
Wysłany: 18-12-2008, 16:15   Program do naładowania pobliskiej baterii

Witam, przedwczoraj zacząłem zabawę z colobotem. Chciałem napisać mały programik dla robota żeby sie nie nudził na ładowanie pobliskiej baterii.
Oto owoc mojego pisania:

Kod:
extern void object::charge_nearest_powercell()
{
object bateria;
point start;
object elektrownia;
point startbateria;

start=position;

elektrownia=radar(PowerStation);

startbateria=bateria.position;
bateria=radar(PowerCell);
goto(bateria.position);
grab();
goto(elektrownia.position);
wait(5);
goto(startbateria);
drop();
goto(start);




}

Wiem że wszystko jest tu bez sensu ale jakie umiejętności taki program :P .
Po naciśnięciu buttona żeby robot wykonał zadanie, po prostu nie reaguje.
Poza tym chciałbym ten program udoskonalić by ładował wszystkie baterie poniżej 100% naładowania. Proszę o pomoc, razem z wytłumaczeniem.
Pozdro.


///Błędy, "Zacząłem" a nie "Zaczełem" ! - DeiDara
Ostatnio zmieniony przez DeiDara 26-02-2009, 08:44, w całości zmieniany 1 raz  
 
 
 
DemoLisH
Zbanowany


Wiek: 24
Dołączył: 20 Kwi 2008
Posty: 273
Skąd: Poznań
Wysłany: 18-12-2008, 22:47   RE: Program do naładowania pobliskiej baterii

to

bateria=radar(PowerCell);

musisz dać przed

startbateria=bateria.position;


a poziom baterii możesz odczytać za pomocą
this.energyCell.energyLevel

this to wskaźnik do aktualnego obiektu(tak poza tym nie jest to potrzebne ale program wygląda bardziej przeszyjcie)

energyCell to aktualna bateria w robocie

energyLevel zwraca wartość poziomu naładowania baterii( w wartości od 0 do 1, np. 0.49 to 49%, 1 to 100%)
chyba o niczym nie zapomniałem


///Puk puk!!Polskie znaki istnieją - DeiDara
_________________
Compiling [Gość.exe]...

Zapraszam na grę zwaną League of Legends:
http://signup.leagueofleg...e98cec278372604
Ostatnio zmieniony przez DeiDara 26-02-2009, 08:46, w całości zmieniany 1 raz  
 
 
 
Piter


Twoja ulubiona misja: Na wulkani analiza badań
Dołączył: 17 Paź 2008
Posty: 48
Wysłany: 19-12-2008, 11:09   RE: Program do naładowania pobliskiej baterii

Demolish ma rację
_________________
CoLoBoT jest COLL!!!!
Proszę piszcie solucje
 
 
 
LooC


Wiek: 23
Dołączył: 18 Gru 2008
Posty: 2
Skąd: Rotmanka
Wysłany: 19-12-2008, 12:55   RE: Program do naładowania pobliskiej baterii

Ale program ma lądować wszystkie baterie które nie są używane i są poniżej 100% naładowania. A nie te które ma w sobie


///Błędy! - DeiDara
Ostatnio zmieniony przez DeiDara 26-02-2009, 08:48, w całości zmieniany 2 razy  
 
 
 
Zibo


Dołączył: 24 Gru 2008
Posty: 8
Wysłany: 24-12-2008, 14:34   RE: Program do naładowania pobliskiej baterii

Witam.

Również przybywam na to forum z podobnym problemem, jak założyciel tematu.
A mianowicie:

Czy jest możliwość wykrycia baterii, która ma określony już poziom energii?
(chcę zaprogramować robota, aby wymieniał zużyte baterie w innych pajacach)
Jeśli nie, to czy poprzez funkcję radar() można wykrywać po kolei obiekty w strefie od najbliższego do najbardziej oddalonego?
Lub może jeszcze jakieś inne rozwiązanie?


Pozdrawiam.


///Błędy! - DeiDara
Ostatnio zmieniony przez DeiDara 26-02-2009, 08:49, w całości zmieniany 2 razy  
 
 
DemoLisH
Zbanowany


Wiek: 24
Dołączył: 20 Kwi 2008
Posty: 273
Skąd: Poznań
Wysłany: 24-12-2008, 15:38   RE: Program do naładowania pobliskiej baterii

ostatni argument funkcji radar:

way: float (domyślna wartość: 1)
Określa sposób wykrywania obiektu. Przy wartości 1, znajduje najbliższy obiekt w podanej strefie. Przy wartości-1, znajduje najdalszy obiekt w strefie.

poczytaj sobie o funkcji radar
_________________
Compiling [Gość.exe]...

Zapraszam na grę zwaną League of Legends:
http://signup.leagueofleg...e98cec278372604
 
 
 
shoter


Dołączył: 24 Gru 2008
Posty: 56
Wysłany: 24-12-2008, 16:05   RE: Program do naładowania pobliskiej baterii

Cytat:
Zibo napisał/a:

Czy jest możliwość wykrycia baterii, która ma określony już poziom energii?
(chcę zaprogramować robota, aby wymieniał zużyte baterie w innych pajacach)
Jeśli nie, to czy poprzez funkcję radar() można wykrywać po kolei obiekty w strefie od najbliższego do najbardziej oddalonego?
Lub może jeszcze jakieś inne rozwiązanie?
Pozdrawiam.

poziom baterii w robocie :
<OBJECT>.energyCell.energyLevel
zużyta :( w ponad 10%)
<OBJECT>.energyCell.energyLevel < 0.9
radarem można wykrywać coraz dalsze obiekty...wystarczy pętla for ;)


///Błędy! - DeiDara
Ostatnio zmieniony przez DeiDara 26-02-2009, 08:50, w całości zmieniany 1 raz  
 
 
Zibo


Dołączył: 24 Gru 2008
Posty: 8
Wysłany: 24-12-2008, 18:50   RE: Program do naładowania pobliskiej baterii

Hyyy, zmienna way jest typu float. To w pełni rozwiązuje sprawę ;'].

Cytat:
DemoLisH napisał/a:
Określa sposób wykrywania obiektu. Przy wartości 1, znajduje najbliższy obiekt w podanej strefie. Przy wartości-1, znajduje najdalszy obiekt w strefie.


Przeoczyłem typ tego argumentu, a opis został tak napisany, że byłem przekonany, iż możemy w to miejsce wklepać tylko 2 wartości.


Pozdrawiam.


PS. Miło widzieć, że ta gra wciąż żyje.


EDIT: Problem rozwiązałem trochę innym sposobem, gdyż powyższy sprawiał trudności. Szukanie obiektu spełniającego ustalone warunki wokół bota rozwiązałem konstrukcją:

object wykryty = null;
for( float odleglosc = 0.0; odleglosc <= 20.0; odleglosc += 0.05 )
{
      wykryty = radar( PowerCell, 0, 360, 0, odleglosc, -1 );
      if( wykryty.energyLevel < 1 )
      {
            // co robimy z baterią <100% energii
      }
}


(to chyba rozwiązanie dla autora tematu - jeśli jakieś pytania co do tego, to odpowiem bardzo chętnie :-7 )
Ostatnio zmieniony przez Zibo 24-12-2008, 22:04, w całości zmieniany 1 raz  
 
 
Zibo


Dołączył: 24 Gru 2008
Posty: 8
Wysłany: 24-12-2008, 23:31   RE: Program do naładowania pobliskiej baterii

Ah, skoro już ten temat jest... :)

Wykrywanie wolno stojących pustych baterii jest raczej mało przydatnym algorytmem - z tej racji, że zużyte baterie zazwyczaj zużywają się w bot'ach/budynkach - a z wykryciem takowej baterii mam nie lada kłopot...

Staram się napisać programik dla bota naładowywacza-pustych-baterii ;->. Lecz! Jak sprawdzić stan baterii w JAKIMKOLWIEK bocie? Bo przecież napisanie blisko 20'u funkcji radaru(dla każdego typu bota) i do tego bot.energyCell.energyLevel jest raczej szalone?

Jest jakieś rozwiązanie tego problemu?


///Błędy! - DeiDara[/color]
Ostatnio zmieniony przez DeiDara 26-02-2009, 08:52, w całości zmieniany 3 razy  
 
 
DemoLisH
Zbanowany


Wiek: 24
Dołączył: 20 Kwi 2008
Posty: 273
Skąd: Poznań
Wysłany: 24-12-2008, 23:46   RE: Program do naładowania pobliskiej baterii

Cytat:
Lecz! Jak sprawdzić stan baterii w JAKIMKOLWIEK bocie?

sam sobie odpowiedziałeś bot.energyCell.energyLevel

///Błędy! - DeiDara
_________________
Compiling [Gość.exe]...

Zapraszam na grę zwaną League of Legends:
http://signup.leagueofleg...e98cec278372604
Ostatnio zmieniony przez DeiDara 26-02-2009, 08:53, w całości zmieniany 1 raz  
 
 
 
Zibo


Dołączył: 24 Gru 2008
Posty: 8
Wysłany: 25-12-2008, 01:08   RE: Program do naładowania pobliskiej baterii

Nie rozumiemy się.
Mam taki algorytm szukania pustych baterii:

object emptyCell = null;
for( float odleglosc = 0.0; odleglosc <= 20.0; odleglosc += 0.05 )
{
      emptyCell = radar( PowerCell, 0, 360, 0, odleglosc, -1 );
      if( emptyCell.energyLevel == 0 )
      {
            // instrukcje
      }
}


Jak już pisałem - jest to mało użyteczne, bo baterie wsadzone w boty nie są wykrywane (aby je wykryć, to jedyne co mi przychodzi do głowy, to napisanie ~20 różnych funkcji radar( dokładna_nazwa_bota ) i wtedy pobrać stan baterii na których jeżdżą)...
 
 
DemoLisH
Zbanowany


Wiek: 24
Dołączył: 20 Kwi 2008
Posty: 273
Skąd: Poznań
Wysłany: 25-12-2008, 01:11   RE: Program do naładowania pobliskiej baterii

nie prawda bo zamiast nazwy bota, w radar możesz użyć 0 :)
i sprawdzić co ma w sobie wsadzone albo sprawdzić czy to jest bateria


///Błędy!(Co ma w sobie wsadzone tak:)) - DeiDara
_________________
Compiling [Gość.exe]...

Zapraszam na grę zwaną League of Legends:
http://signup.leagueofleg...e98cec278372604
Ostatnio zmieniony przez DeiDara 26-02-2009, 08:56, w całości zmieniany 3 razy  
 
 
 
DemoLisH
Zbanowany


Wiek: 24
Dołączył: 20 Kwi 2008
Posty: 273
Skąd: Poznań
Wysłany: 25-12-2008, 01:15   RE: Program do naładowania pobliskiej baterii

object emptyCell = null;

for( float odleglosc = 0.0; odleglosc <= 20.0; odleglosc += 0.05 )
{

emptyCell = radar( 0, 0, 360, 0, odleglosc, -1 );

if( emptyCell.category == PowerCell )
{
// instrukcje
}
else if( emptyCell.energyCell.category == PowerCell )
{
// instrukcje
}

}
_________________
Compiling [Gość.exe]...

Zapraszam na grę zwaną League of Legends:
http://signup.leagueofleg...e98cec278372604
Ostatnio zmieniony przez DemoLisH 25-12-2008, 01:22, w całości zmieniany 1 raz  
 
 
 
Zibo


Dołączył: 24 Gru 2008
Posty: 8
Wysłany: 25-12-2008, 01:52   RE: Program do naładowania pobliskiej baterii

To już wygląda na coś przydatnego. B)
"Jutro" przetestuję niezawodność powyższego.
Dzięki.
 
 
Zibo


Dołączył: 24 Gru 2008
Posty: 8
Wysłany: 25-12-2008, 13:42   RE: Program do naładowania pobliskiej baterii

Cytat:
(...)
else if( emptyCell.energyCell.category == PowerCell )
(...)


Niestety. Jeśli wykryty obiekt będzie np. budynkiem i będziemy z niego chcieli wyciągnąć składową .energyCell program automatycznie jest przerywany, gdyż, zdaje się, jest to niedopuszczalne.

(pomijam oczywiście, że wykryty obiekt musi być niezerowy - bo i bez tego program wylatuje w powietrze po 1-wszym obronie pętli)

Wygląda na to, że będę musiał wstukać 21 alternatyw w warunku... :<


EDIT: Rozwiązanie można przeżyć - trochę więcej operacji dla procka... :

EC_Switcher


(jedną kategorię botów ominąłem)

Mam nadzieję, że komuś się przyda.


Pozdrawiam.
Ostatnio zmieniony przez Zibo 25-12-2008, 18:31, w całości zmieniany 1 raz  
 
 
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

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