Wiele osób u¿ywa instrukcji warunkowej "if", w miejsu gdzie mo¿e u¿yæ "switch". "Switch" bardzo u³atwia pracê. W przedstawiê zaraz podstawowe miejsca u¿ycia "switch'a".
| Budowa ogólna |
Kod:
switch(zmienna)
{
case 0(...): //W momencie gdy zmienna wyniesie 0 to.
case 1(...):
{
//W momencie gdy zmienna wyniesie 1 to wykonuje wiêcej ni¿ jedn± akcjê
}
}
| Zastosowanie|
Mo¿emy "switchowaæ" wiele rzeczy. Mo¿emy zastosowaæ "switch'a" w bardzo wielu miejscach. Od playerid, a¿ do obiektów.
| Przyk³ady|
Podczas pod³±czani'a siê graczy:
Kod:
public OnPlayerConnect(playerid)
{
switch(playerid)
{
case 0,3,5,7,9: SetPlayerName(playerid, "Qpa_qau");
case 1,2,4,5,8: SetPlayerName(playerid, "Kau_twardy");
}
return 1;
}
Gdy chcemy zrobiæ kolejno pokazuj±ce siê checkpointy:
Kod:
public OnPlayerEnterRaceCheckpoint(playerid)
{
new zmienna[MAX_PLAYERS];
switch(zmienna[playerid])
{
case 0:
{
SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nexz);
++zmienna[playerid];
}
case 1:
{
SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nexz);
++zmienna[playerid];
}
case 2:
{
SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nexz);
++zmienna[playerid];
}
case 3:
{
SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nexz);
++zmienna[playerid];
}
case 4:
{
print("Fire Dragon i tak wygra³");
}
}
return 1;
}
Lub gdy chcemy zrobiæ nazwê skina przy skinie:
Kod:
public OnPlayerRequestClass(playerid, classid)
{
switch(classid)
{
case 0: GameTextForPlayer(playerid, "tekst skina 1", 500, 3);
case 1: GameTextForPlayer(playerid, "tekst skina 2", 500, 3);
case 2: GameTextForPlayer(playerid, "tekst skina 3", 500, 3);
}
return 1;
}
| Podsumowanie|
U¿ywanie "switch'a" bardzo u³atwia pracê na pojedynczych zmiennych, czy to jest menu, czy "wybiera³ka" znajomo¶æ tej instrukcji warunkowej napewno wam siê przyda
switch(zmienna[playerid])
{
case 0:
{
SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nexz);
++zmienna[playerid];
}
case 1:
{
SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nexz);
++zmienna[playerid];
}
case 2:
{
SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nexz);
++zmienna[playerid];
}
case 3:
{
SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nexz);
++zmienna[playerid];
}
Przecie wszystko to jest to samo. U¿ywaj lepiej etykiety 'default'.
Ja jeszcze chcia³em wspomnieæ o ró¿nicy miêdzy PAWN, a ANSI C. W Pawn etykieta case mo¿e mieæ wiele warto¶ci, aby siê nie powtarza³y w innych miejcach instrukcji 'switch'. Pop przej¶ciu do jednej z tych etykiet program wykonuje zadanie z zakresu, i na tym koñczy dzia³anie. W jêzyku C natomiast etykiety 'case' mog± mieæ pojedyñcze warto¶ci sta³e, a skoki do etykiet s± takie, jak przy standardowych skokach. Ca³y program w instrukcji switch êdzie wykonany w C od miejsca, w którym by³a pierwsza zgodna etykieta, wiêc, je¿eli 'switch' ma etykietê case, do któej program trafi, a za t± etykiet± bêd± nastêpne, wtedy one tak¿e zostan± wywo³ane. W PAWN dzia³a to bardziej na zasadzie pojedyñczych zakresów, taj, jakby z³o¿yæ to z pojedyñczych instrukcji 'if'. Etykieta 'default' jest domy¶ln± etykiet±, do której program w C zawsze trafi, nawet, je¿eli nie bêdzie odpowiedniej etykiety 'case'. W PAWN natomiast jest to raczej zakres, który bêdzie wykonany, je¿eli po drodze nie bêdzie napotkana ina etykieta. Default zwykle jest na koñcu instrukcji 'switch', w PAWNO jest to konieczne do prawid³owego skompilowania programu.
_________________
In ancient times some random phpbb devs programed a mystic power named: Search button.
Only the chosen ones know how to use it. ツ
Nie mo¿esz pisaæ nowych tematów Nie mo¿esz odpowiadaæ w tematach Nie mo¿esz zmieniaæ swoich postów Nie mo¿esz usuwaæ swoich postów Nie mo¿esz g³osowaæ w ankietach Nie mo¿esz za³±czaæ plików na tym forum Nie mo¿esz ¶ci±gaæ za³±czników na tym forum