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
Jak przejśc jeden z poziomów CeeBot 4PL
Autor Wiadomość
KamykPL 


Wiek: 21
Dołączył: 06 Gru 2011
Posty: 2
Skąd: nieJestemBotem
Wysłany: 06-12-2011, 20:30   Jak przejśc jeden z poziomów CeeBot 4PL

Witam z tej strony KamykPL
Mam problem w grze CeeBot 4 PL z poziomem 6.3 (Znajdowanie drogi> Droga bez goto(); )
Robie wszystko wg. instrukcji i nie mogę tego przejść pomoże ktoś ?
Dziękuje za pomoc.

CeeBot4PLMisja6.3.jpg
Część pierwsza instrukcji
Plik ściągnięto 2552 raz(y) 140,55 KB

CeeBot4PLMisja6.3_cz.2.jpg
Część druga instrukcji.
Plik ściągnięto 2552 raz(y) 134,92 KB

 
     
Raptor 
Clever Girl


Twoja ulubiona misja: Raptorowanie
Pomógł: 4 razy
Wiek: 24
Dołączył: 26 Cze 2010
Posty: 432
Skąd: Isla Nublar
Wysłany: 06-12-2011, 21:48   

Kod:
extern void object::Solution()
{
    object item; // Definicja Zmiennej.
   
    repeat(7) // Powtarzaj 7 razy instrukcje w klamrach.
    {
        item = radar(BlueFlag, 0, 180, 1, 1000); // Znajdź niebieską flagę w promieniu od 1 do 1000 m, szukając 90 st. w lewo i prawo, i zapisz informacje do Zmiennej.
        turn(direction(item.position)); // Obróć się do pozycji zapisanej w Zmiennej.
        move(distance(this.position, item.position)); // Oblicz odległość między tobą a pozycją zapisaną w zmiennej i pokonaj wyliczony dystans.
    }
}

Dawno tego nie robiłem, ale miło mi pomóc. Warto przeanalizować moje komentarze i dopasować sobie do składni pojedynczych poleceń. W taki sposób się tego uczyłem: interpretacja komentarzy.

Ponaddto, cieszymy się, że ktokolwiek gra w ulubioną grę społeczności PPC. Witamy Serdecznie!
_________________
- Stężenie czekolady we krwi: 93‰
- Ja to bym zjadł jeszcze batona...


 
     
KamykPL 


Wiek: 21
Dołączył: 06 Gru 2011
Posty: 2
Skąd: nieJestemBotem
Wysłany: 07-12-2011, 15:24   

Wielke dzięki za pomoc :)
 
     
Raptor 
Clever Girl


Twoja ulubiona misja: Raptorowanie
Pomógł: 4 razy
Wiek: 24
Dołączył: 26 Cze 2010
Posty: 432
Skąd: Isla Nublar
Wysłany: 07-12-2011, 16:33   

Nie ma za co. Sam też nie jestem zbyt dobry w programowaniu i zatrzymałem się chyba w 9 rozdziale... Ale cóż, nie mam talentu...
_________________
- Stężenie czekolady we krwi: 93‰
- Ja to bym zjadł jeszcze batona...


 
     
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: 07-12-2011, 16:36   

Talent to tylko 10% sukcesu.
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
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: 07-12-2011, 20:25   

Zeby dobrze programowac trzeba zrozumiec pare rzeczy. Kompilator nie bedzie sie domyslac, o co ci chodzi, masz mu ta sprawe postawic jasno. Zamiana miejscami 2 funkcji moze zmienic caly program, bo robot najpierw zacznie jechac naprzod, a pozniej sie odwroci zamiast odwrotnie. Jak juz opanujemy podstawowe funkcje, mozemy wziac sie za konkretniejsze zadania. Wezmy np. problem jakim jest dojechanie do okreslonego miejsca poruszajac sie po znacznikach.

1) Wypisujemy sobie wszystkie informacje z jakich mozemy korzystac. Jako, ze ja nie chce powtarzac Raptora, a ty powinienes miec jakas wiedze jesli chodzi o matematyke, utrudnie sobie zadanie.

Otoz moge obracac moim robotem za pomoca funkcji turn(). Moge ruszac nim za pomoca move().

Mam podana orientacje i pozycje zarowno mojego robota, jak i kazdego znacznika.

Dla utrudnienia nie zamierzam korzystac z funkcji distance() i direction(), bo rozwiazanie wyjdzie za proste i nie pokaze jak powinienes myslec :)

Teraz majac narzedzia zaczynam zastanawiac sie, co musze zrobic zeby zadanie wyszlo. Otoz zeby dojechac do tego obszaru, moge wykorzystac wlasnie te znaczniki. Tak wiec moge ten problem traktowac jako rozwiazany, bo wiem juz co zrobic by cel osiagnac.

Problemem staje sie dojechanie do kazdego znacznika. Otoz zeby dojechac do znacznika musze:

Kod:

Obrocic sie w jego kierunku: turn(dir);
Pojechac o dokladnie tyle, ile wynosi odleglosc od robota do danego znacznika: move(len)


Otoz teraz wiemy jak dojechac do znacznika. Brakuje nam tylko informacji, o jaki kat trzeba skrecic (dir) i ile pojechac (len). I to sa nasze kolejne podproblemy.

Dystans latwo policzyc. Trzeba korzystajac z informacji na temat pozycji zarowno punktu, jak i swojej obliczyc odleglosc miedzy punktami. Czyli pitagoras 3D. Zestaw instrukcji pozwalajacy to policzyc to:
Kod:

object p = radar(BlueFlag, 0, 180, 2, 1000);
float len = sqrt(pow(p.position.x-position.x, 2) + pow(p.position.y-position.y, 2) + pow(p.position.z-position.z, 2));


Z katem bedzie lepsza zabawa. Zalozmy, ze mamy robota ustawionego z losowym kierunku. Fajnie jest wiec miec jakis punkt odniesienia i podzielic to na dwie czesci: 1) policzenie kata miedzy punktem docelowym i punktem odniesienia oraz 2) policzenie kata miedzy kierunkiem w ktorym patrzy nasz bot i punktem odniesienia.
Otoz CBOT daje nam automatycznie wygodny punkt odniesienia, czyli os x w kierunku wschodnim. Jako, ze wiemy, ze kat miedzy osia x a kierunkiem patrzenia bota jest this.orientation (w koncu na poczatku wypisalismy wszystkie informacje, nie? ;) ) A wiec co zrobic, zeby robota odwrocic do tego punktu zerowego? Po godzinach zastanawiania sie mozna dojsc do wniosku, ze wystarczy sie obrocic o wartosc przeciwna do wartosci this.orientation. Wiec mamy:
Kod:
dir = -orientation + costam;

To costam to jest kat miedzy samym punktem docelowym a osia x. W sumie tutaj moga zaczynac sie schody. Tutaj z zaleznosci trygonometrycznych w ukladzie wspolrzednych wynika, ze
Kod:

costam = asin((p.position.y-position.y)/len); // zbior mozliwych wartosci wyklucza niejednoznacznosc tych funkcji, jakby adiblol chcial sie czepiac :>


Wiec
Kod:

dir = asin((p.position.y-position.y)/len) - orientation



Wiem, troche chaotycznie napisane. Nie chcialem pokazac jak powinno sie zrobic to cwiczenie, szpanowac matma tez nie, bo tu nic trudnego nie ma. Chcialem zasugerowac, jak powinno sie myslec podczas tworzenia algorytmow lub programow. Trzeba sie zastanowic, co jest problemem. Kiedy juz sie wie, to dzieli sie ten problem na czesc, ktora wiemy jak rozwiazac i czesc, ktora wydaje sie nie rozwiazywalna. To pierwsze zapisujemy gdzies na boku, to drugie staje sie naszym problemem, ktory rozwiazujemy tak samo. W koncu dostajemy kwintesencje tego, czego nie umiemy. Nad tym zaczynamy sie faktycznie zastanawiac i dopiero z tym idziemy prosic o pomoc na forum. Nie z calym zadaniem.


Pisalem ten post 1,5h. Ciekawe czy ktos go przeczyta i zrozumie aluzje :>
_________________
 
 
     
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: 07-12-2011, 21:00   

Berserker napisał/a:
Ciekawe czy ktos go przeczyta i zrozumie aluzje


I did it! Choć nie jestem pewien, czy dobrze zrozumiałem.
_________________
http://projektsimbax.blogspot.com/ <- Taki sobie blog
 
     
Raptor 
Clever Girl


Twoja ulubiona misja: Raptorowanie
Pomógł: 4 razy
Wiek: 24
Dołączył: 26 Cze 2010
Posty: 432
Skąd: Isla Nublar
Wysłany: 07-12-2011, 21:02   

Ja przeczytałem. Nie wiem tylko, o jakie dokładnie aluzje Ci chodzi. Masz rację w tym, że należy sobie utrudnić proste zadanie, aby zacząć myśleć w najbardziej prawidłowy dla programowania sposób. Niestety, z matematyki jestem haniebnie zły i tego, co napisałeś tutaj i wcześniej w innych tematach, kompletnie nie rozumiem... Jeśli chodzi o programowanie, to widzę, że mój styl (i nie tylko mój, ale również solucji autorstwa EPSITEC, na której bazowałem) jest bardziej prosty i naiwny. Wystarczy zdać się na automatykę poszczególnych poleceń i gotowe. Do tego prawie żadnej matematyki nie potrzeba, ale jak przyjdzie co do czego, to z danym problemem sobie nie poradzę...
_________________
- Stężenie czekolady we krwi: 93‰
- Ja to bym zjadł jeszcze batona...


 
     
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: 07-12-2011, 21:13   

@up & @2up
Jesli dokladnie przeczytaliscie to znacie ta aluzje, najwyzej nie wiecie, ze akurat to jest ta aluzja.

@up
Nie musisz pamietac wszystkich twierdzen. Ba, tak naprawde nawet nie musisz umiec dodawac/odejmowac. Od tego jest komputer. Dobry programista to nie jest programista, ktory zna wszystkie funkcje, skladnie i niewiadomo co jeszcze. Dobry matematyk nie musi znac wszystkich funkcji, twierdzen czy zaleznosci. Natomiast obydwaj powinni wiedziec, co akurat potrzebuja i gdzie to znalezc. Masz do czynienia z katami? Najczesciej bedziesz szukal w jakims spisie zaleznosci trygonometrycznych i twierdzen w geometrii na plaszczyznie. Ja akurat mam bardzo dobra pamiec (a raczej polapalem sie, o co chodzi w tym wszystkim i najczesciej jestem w stanie zgadnac cale wzory w fizyce :> ). W CBocie akurat bardzo czesto sie wykorzystuje rozne zaleznosci w ukladzie wspolrzednych i np. warto od tego zaczac szukac. Trzeba tylko dobrze wiedziec, co sie ma i co sie chce miec.
_________________
 
 
     
Mrocza 


Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy
Wiek: 26
Dołączył: 29 Sie 2011
Posty: 249
Skąd: Lublin
Wysłany: 08-12-2011, 07:08   

Wzory fizyczne da się zazwyczaj wyliczyć z jednostki. Nasz wykładowca z chemii każe anm się uczyć na pamięć tablicy Melendejewa, to jest dopiero ciekawe.

Co do CEEBOTa to zrobiłem pare programów ale mnie to jakoś tak nie wciągnęło.

[ Dodano: 08-12-2011, 07:11 ]
Ale za to na zajęciach w laboratorium dostajemy tablice z pierwiastkami i wzory.
 
 
     
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: 08-12-2011, 17:36   

@up
Tablica Mendelejewa? Znaczy wszystkie elektroujemnosci i masy pierwiastkow tez? :)
_________________
 
 
     
Mrocza 


Twoja ulubiona misja: Swobodna na Ziemi
Pomógł: 4 razy
Wiek: 26
Dołączył: 29 Sie 2011
Posty: 249
Skąd: Lublin
Wysłany: 08-12-2011, 23:26   

NIE tylko nazwy i położenie. np wymień wszystkie borowce. Jeżeli chodzi o elektroujemności to nie musimy znać wartości dokładnych. Masy musimy znać dla najczęściej spotykanych w zadaniach.
 
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

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