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
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 :D ) 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_
 
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

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