|
Forum - Polski Portal COLOBOTa |
|
|
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
|
|
|
|
|
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. |
|
|
|
|
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|