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
[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 :D )

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
Kod:
return 10;

możemy także wpisać samo return które zakończy funkcje
Kod:
return;


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 :D ![/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.
 
     
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

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