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