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 |
|
|
CBOT Language - parę pytań |
Autor |
Wiadomość |
Phitherek_
Twoja ulubiona misja: Nie wiem, bo nie znam wszystkich jeszcze...
Pomógł: 2 razy Wiek: 25 Dołączył: 09 Lip 2011 Posty: 19 Skąd: Krk
|
Wysłany: 09-07-2011, 19:50 CBOT Language - parę pytań
|
|
|
Mam parę pytań, które nasunęły mi się w związku z CBOT Language (tak na marginesie: próbuję napisać do każdej misji programy, aby parę kliknięć wystarczyło do ich przejścia - w wersji demo - i stąd się one wzięły):
1. Po pierwsze i najważniejsze - REFERENCJA! To, co jest w pomocy jest według mnie niewystarczające. Nie mogłem tam na przykład znaleźć tak często używanego parametru this.powerCell.powerLevel (musiałem doczytać tutaj) - a pewnie jest więcej takich nieopisanych opcji. Czy zna ktoś jakąś dobrą referencję języka CBOT? A może to wina tego, że korzystam z wersji DEMO?
2. Czy CBOT daje jakąkolwiek możliwość interakcji z użytkownikiem, np. wyświetlenia okna wprowadzenia danych? Czasem by się to przydało do bardziej uniwersalnych programów...
3. To już bardziej do konkretnych funkcji - czy istnieje sposób, aby zmusić bota, żeby dostał się w jakieś miejsce (GOTO) na około, a nie wyświetlał komunikaty typu "Goto: destination inaccessible?". Po przesunięciu bota często program zaczyna działać normalnie...
4. Czy jest jakiś sposób, aby jeżeli miejsce na położenie przedmiotu jest zajęte, bot przesunął się obok, a nie wyświetlał "Destination occupied"?
Na razie to tyle. Pewnie wkrótce nasunie mi się więcej pytań... Proszę o pomoc.
A może po prostu zbyt dużo wymagam? |
_________________ Posted by Phitherek_ |
|
|
|
|
Simbax
Mod
Twoja ulubiona misja: Wszystkie na Krystalii
Pomógł: 6 razy Wiek: 22 Dołączył: 07 Sie 2009 Posty: 473 Skąd: z Leszna
|
Wysłany: 09-07-2011, 20:06
|
|
|
Nie jestem ekspertem, ale na kilka pytań mogę odpowiedzieć:
1. W czasie tworzenia misji do Colobota 2 bodajże ktoś pozmieniał pliki pomocy do cbota i pododawał nowe rzeczy.
2. Nie. To boli...
3. Raczej nie, chociaż kiedyś był taki parametr... E, nie ważne. Zawsze można napisać własne goto
4. Tak, starczy trochę pokombinować i mieć kontrolę nad błędami.
Jak pisałem - nie jestem ekspertem. Pewnie zaraz mnie Berserker/adiblol/krzys_h skrytykują. A jeśli to prawda (WOW ) to niech oni zrobią do tego solucje ^^ |
_________________ http://projektsimbax.blogspot.com/ <- Taki sobie blog |
|
|
|
|
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: 09-07-2011, 21:53
|
|
|
3. errmode(0) i sprawdzaj wartość zwracaną przez goto(...).
4. space(...) |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Phitherek_
Twoja ulubiona misja: Nie wiem, bo nie znam wszystkich jeszcze...
Pomógł: 2 razy Wiek: 25 Dołączył: 09 Lip 2011 Posty: 19 Skąd: Krk
|
Wysłany: 09-07-2011, 22:33
|
|
|
Dziękuję, przyglądnę się temu... |
_________________ Posted by Phitherek_ |
|
|
|
|
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: 10-07-2011, 15:22
|
|
|
Kod: | 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); // tutaj jest funkcja ktora nie robi nic (czeka)
}
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;
} |
Do dwoch ostatnich punktow, moze wreszcie ktos zrozumie ta funkcje bo napisalem ja, a za cholere nie wiem o co w niej chodzi |
_________________
|
|
|
|
|
Phitherek_
Twoja ulubiona misja: Nie wiem, bo nie znam wszystkich jeszcze...
Pomógł: 2 razy Wiek: 25 Dołączył: 09 Lip 2011 Posty: 19 Skąd: Krk
|
Wysłany: 10-07-2011, 22:39
|
|
|
Tak więc z tego, co widzę:
1. Masz funkcję, która zwraca wartość int i w argumencie przyjmuje wartość point, czyli punkt przestrzeni, a ponadto jest zawarta w klasie object... Tak jakbyś chciał jej użyć z jakimś obiektem i punktem przestrzeni...
2. Wyłączasz obsługę błędów z gry - i dobrze, bo potem sam sprawdzasz kody błędów i je oprogramowujesz.
3. Kopiujesz argument funkcji do zmiennej dest tego samego typu.
4. Inicjujesz zmienną przechowującą kod błędu i uruchamiasz goto do punktu c.
5. Jeżeli się powiodło - kończysz z 0.
6. Jeżeli kod błędu to 212 (tutaj jeszcze nie doszedłem, co on oznacza - skąd go wytrzasnąłeś?), to jeżeli odległość bota od punktu x jest większa od 20 to znajdujesz w pobliżu wolne miejsce i zapisujesz je do dest, następnie program czeka, a potem kończy się z kodem 1 (tego momentu nie rozumiem, hmmm...).
7. Jeżeli kod błędu jest inny, to wywołujesz rekurencyjnie funkcję dla punktu, który jest środkiem odległości między botem i poprzednim punktem.
8. Ostatecznie kończysz funkcję z kodem 0 po kroku 7.
To była moja krótka analiza kodu. Co ta funkcja miała robić - nie mam pojęcia, prawdopodobnie chodziło o jakieś ulepszenie funkcji goto, aby nie wywalała błędu tylko mimo wszystko szła do przodu (po połowie dystansu, jeżeli nie da się całego), chyba że błąd to to magiczne 212, gdzie szukasz w pobliżu wolnego miejsca, a potem - robisz dokładnie nic...
Może to pomoże Ci jakoś zrozumieć, o co Ci chodziło... a jeżeli nie, to myślę, że ktoś Ci jeszcze pomoże... |
_________________ Posted by Phitherek_ |
|
|
|
|
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: 11-07-2011, 00:41
|
|
|
212 to liczba zwracana przez goto() kiedy miejsce docelowe jest zajete. Sprawdzone prostym kodem za pomoca message().
Zwracanie wartosci 1 jest po to, zeby w glownym kodzie programu podjac odpowiednie dzialania (czyli sprawdzenie czy miejsce juz sie zwolnilo i wywolanie znowu funkcji go())
Funkcja jest (jesli dobrze pamietam) po to, by roboty nie pchaly sie na stacje energetyczna tylko grzecznie czekaly obok. |
_________________
|
|
|
|
|
Phitherek_
Twoja ulubiona misja: Nie wiem, bo nie znam wszystkich jeszcze...
Pomógł: 2 razy Wiek: 25 Dołączył: 09 Lip 2011 Posty: 19 Skąd: Krk
|
Wysłany: 11-07-2011, 01:02
|
|
|
Już rozumiem... To ma za zadanie stworzyć kolejkę do stacji energetycznej . Fajny pomysł... |
_________________ Posted by Phitherek_ |
|
|
|
|
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|