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 |
|
|
[poradnik]funkcje 'główne' i poboczne |
Autor |
Wiadomość |
shoter
Dołączył: 24 Gru 2008 Posty: 56
|
Wysłany: 24-08-2009, 21:27 [poradnik]funkcje 'główne' i poboczne
|
|
|
widziałem że jeden z nas sobie z tym nie radzi
Funkcja - jest kodem programu który piszemy jeden raz a możemy wywoływać podając nazwe funkcji i jej parametry(pewnie nie jasno napisałem )
prtotyp funkcji
<extern/public> <Zwracany typ> <object> [nazwa funkcji] (parametry)
{
//kod funkcji
}
powiedzmy że chcemy zrobić funkcje która zwraca nam zmienną logiczną.Zwraca wartość TRUE jeśli prześlemy jej parametr(int) który jest większy niz 10
Kod: | bool czy_wiekszy_od_10(int liczba)
{
if(liczba > 10) return true;
return false;
}
|
zwracanym typem jest bool
jeśli chodzi o nazwe funkcji to nie może zaczynać się od liczby i musi być 1 wyrazem(nie można używać spacji ale można użyć '_')
return powodu przerwanie funkcji i ewentualne zwrócenie wyniku(jeśli coś za nim jest) np
możemy także wpisać samo return które zakończy funkcje
funkcje wywołujemy tak :
Kod: | czy_wieksza_od_10(20); //zwroci wartosc TRUE
czy_wieksza_od_10(-524); //FALSE |
są to wywołania w innej funkcji np w głównej.Jak widzisz nie musimy pisać 'bool' przed wywołaniem.wystarczy nazwa i parametr.
czym dokładnie jest parametr?Jest on przesyłaną daną(powiedzmy obrazkiem) którą dajemy funkcji(funkcja coś z tym obrazkiem może zrobić,namalować coś na nim etc.)
funkcja korzystającą z funkcji poruszających robotem(move,turn,goto,aim,fire etc.)
żeby funkcja korzystała z tych funkcji musisz postawić object:: przed definicją funkcji(nie wywołaniem)
Kod: | void object::jedz(int ile)
{
move(ile);
} |
funkcja ta korzysta z poruszania sie i pojedzie o tyle metrow ile podamy jej w parametrze.
typem zwracanym jest void,w CBOT można go spokojnie nazwać 'niczym',w c++ jeszcze mógłby posłużyć do wskaźników ale nie w CBOT .
funkcja główna - funkcja która jest wywoływana jako funkcja startowa(czyli że robot wykona ją po naciśnieciu guzika),może być tylko jedna taka funkcja w kodzie.
aby to zrobić należy wstawić słowo EXTERN przed zwracanym typem
przykład :
Kod: | extern void object::funkcja_glowna()
{
if(czy_wiekszy_od_10(12))
jedz(12);
} |
zauważ że program zmienil nazwe na pasku programów w dolnej prawej części na HUDzie na 'funkcja glowna'
teraz czas na public -
public - jest stawiany przed zwracanym typem,informuje program o tym czy mogą go wykonywać inne roboty(może być także po nim lub przed nim extern).Nie ma wiele tłumaczenia po prostu jeśli macie funkcje :
Kod: | public extern void object::funk()
{
turn(720);
} |
to możecie ją wykonać w innym robocie wpisując funk()
UWAGA!!!Żadna inna funkcja nie może mieć już nazwy funk()(chyba że będzie miała inne parametry,działą to w cbocie?Te inne parametry?)
parametr domniemany - jest także parametrem,tyle że można go pominąc przy wywoływaniu i będzie miał domyślną warotść ustaloną przez nas(po parametrze należy postawić znak równości i wartość jaką ma zawierać parametr po 'nie wpisaniu')
przykład
Kod: | void funkcja(int liczba_nie_dom,int liczba_dom = 15)
{
} |
kilka wywołan :
funkcja(2,10); //poprawne,liczba_nie_dom ma wartosc 2 , a liczba_dom wartość 10 ponieważ podaliśmy jej wartość
funkcja(2); //liczba_nie_dom = 2,liczba_bom = 15
funkcja(); //nie da sie ponieważ parametr 1-szy nie jest domniemany
jeśli chcecie więcej to...piszcie ![/code] |
Ostatnio zmieniony przez shoter 25-08-2009, 21:11, w całości zmieniany 1 raz |
|
|
|
|
pipok
Dołączył: 24 Cze 2009 Posty: 53
|
Wysłany: 25-08-2009, 14:47 Re: [poradnik]funkcje 'główne' i poboczne
|
|
|
shoter napisał/a: | jeśli chodzi o nazwe funkcji to nie może zaczynać się od liczby | Od cyfry!
shoter napisał/a: | funkcja korzystającą z move,turn itd.
żeby funkcja korzystała z tych funkcji musisz postawić object:: przed definicją funkcji(nie wywołaniem) | Dokładnościowo. Nasza funkcja może korzystać z funkcji odnoszących się do obiektu, na którym została uruchomiona (bota, technika, mrówki itd.). Słowo "object" w deklaracji funkcji umożliwia odwołanie się do cech własnych obiektu. Nie tylko do funkcji - metod tego obiektu, jak move czy fire, ale także do zmiennych tego obiektu - jak shieldLevel albo temperature.
shoter napisał/a: | możecie ją wykonać w innym robocie wpisując funk()
UWAGA!!!Żadna inna funkcja nie może mieć już nazwy funk()(chyba że będzie miała inne parametry,działą to w cbocie?Te inne parametry?) | Tak, działa. Na przykład, w taki sposób można inaczej zaimplementować domyślną wartość argumentu funkcji: Kod: | void object::Jeden()
{
Jeden(0.15);
}
void object::Jeden(float moj_param)
{
...
} | Funkcję Jeden() można wtedy wywołać albo bez argumentu, albo z jednym argumentem - zmiennoprzecinkowym. Wywołanie bez argumentu daje dokładnie ten sam efekt (nie licząc większego stosu wywołań ), co wywołanie z argumentem 0.15. |
|
|
|
|
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|