Poprzedni temat «» Następny temat
<! Instrukcja warunkowa "switch" !>
Autor Wiadomość
Fire Dragon 
Wymiatacz



Wiek: 30
Dołączył: 6281 dni temu
Posty: 710
Skąd: jesteś ?

Punkty: 265
Wysłany: 2009-03-07, 22:12   <! Instrukcja warunkowa "switch" !>

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 :)
 
 
     
Gesior7 
Administrator
I <3 Chiquita



Wiek: 35
Dołączył: 6568 dni temu
Posty: 2607
Skąd: Białystok

Punkty: 39724
Wysłany: 2009-03-15, 13:41   Re: <! Instrukcja warunkowa "switch" !>

Kod:
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. ツ

 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Style created by Matej from mStyles modified by Drool
statystyka