Gta San Andreas MultiPlayer (samp) HUN
Navigation
     
Account
Felhasználónév:

Jelszó:
SúgóSúgó
Regisztráció
Elfelejtettem a jelszót
     
Kép
Szerver
Legyen ennek a weboldalnak saját samp szervere?

Igen
Nem
Szavazás állása
Lezárt szavazások
     
Friss

Utolsó módosítás
2013 máj. 19.
12:17

 

     
Más weblapok
 SA:MP Fórum
SA:MP Wiki
Google

     

PAWN Eszközök
     
Cikklusok

Egy szép leírás ChuckNorristól sampforum.hu-ról

A ciklusok használata

Üdvözlök mindenkit,szeretném leirni nektek a ciklusok használatát ebben a kis leírásban.
Először is,bevezetőnek:
Ciklust akkor használunk, ha ugyanazt a feladatot többször kell elvégezni egymás után. 
Háromféle ciklus létezik.Ezeket egyenként fogom bemutatni példákkal.
2 nagyobb fajta ciklus van : elöltesztelős (for,while) és hátultesztelős (do-while) ciklus.

A program az elöltesztelős ciklusba csak akkor lép be, ha a feltétel teljesül. A feltétel a ciklus elején található. 
A hátultesztelős ciklus használatakor a program mindenképpen belép a programba és mindaddig ismétli, amíg a feltétel nem teljesül. 

Kezdjük is el:


for ciklus

Ez a legegyszerübb és a leggyakrabban használt ciklus,és szerintem ezt mindenkinek ismernie kell.
Ez egy elöltesztelős ciklus.
Nézzük a ciklus felépítését.

for(ciklusváltozó;ciklusfeltétel;posztfix) //vagy prefix
i++ = posztfix
++i = prefix

Külömbség: ebben a konkrét példában( for ciklus ) ugyan nincs, de a prefixes alak használatánál a léptetés művelet feldolgozása előtt lejátszódik, így a változó már az új értékkel vesz részt a folyamatban.

Kód:
new x, y = 5;
x = ++y;
//Az x, és az y értéke is 6 lesz

Kód:
new x, y = 5;
x = y++;
//Az x értéke 5, az y értéke 6 lesz

//Észrevételt köszönöm Fade-nak,szép megfogalmazást ZeRo-nak.

Példa:

for(new i = 0;i < 10;i++) // Vagy ++i
{
 //Ez a ciklustörzs,ide jönnek a feladatok. 
 printf("Az i értéke %d",i); // A printf fügvényel írunk a konzolba.
}

Ez egy nagyon egyszerű kis kód,ami azt eredményezné,hogy addig írjuk ki az i változót a konzolba,ameddig annak értéke kisebb mint 10.Tehát,a ciklus addig fut le amíg a változónk értéke kisebb mint 10.
Mindig azok az utasítások hajtódnak végre,amik a ciklustörzsben vannak.
Ez akkor hasznos a gyakorlatban,hogyha pl. végig akarunk menni az összes játékoson,akik a szerveren tartózkodnak.NEM csak erre lehet használni!

/* Érdekesség:

Egyes paraméterek elhagyhatók,de a pontosvesszőt ( ; ) mindig ki kell rakni!
Példa:

for(;ciklusfeltétel;értékváltoztatás)

Itt elhagyuk a ciklusváltozót,a ciklus viszont így is működik!

*/


Példa a gyakorlatra:

for(new i = 0;i < GetMaxPlayers();i++) 
{
 SpawnPlayer(i); // Újraspawnoljuk az i-azonosítójú játékost.
}

Ez a példa a gyakorlatban lespawnolja a összes játékost.
Magyarázat:
GetMaxPlayers(); //Ezel a fügvényel lekérjük a szerver maximum férőhelyét.Nem vesz fel paramétert.
SpawnPlayer(playerid); //Ezzel a fügvényel újra lespawnolhatunk egy játékost.Egyetlen paramértere a játékos azonosítója.

A többi szerintem érthető,amíg az i értéke kisebb mint GetMaxPlayers();  visszatérési értéke (Pl. 30,vagy 50 stb...),Addig 1 el növeljük és végrehajtjuk a feladatokat,amejeket a ciklustörzsbe írtunk.Magyarul ha van egy 30 slotos szerverünk,akkor ez a ciklus végigmegy mind a 30-játékoson,és újraspawnolja őket.A ciklus viszont mindenképp lefut 30-szor,akkoris ha az adott azonosítojú játékos nincs csatlakozva.Ezt könyen megelőzhetjük.

for(new i = 0;i < GetMaxPlayers();i++) 
{
 // Spawn előtt ellenőrizzük,hogy a játékos csatlakozva van-e.
 if(IsPlayerConnected(i)) SpawnPlayer(i); 
}

Így a SpawnPlayer fügvény nem fut le ha a játékos nincs csatlakozva.

while ciklus

Ez a ciklus nagyon hasonlít a feltételes utasításhoz (if).
Ez egy elöltesztelős ciklus.

if(feltétel)
while(feltétel)

Legalábbis a szerkezete,ugyanis a feltételes utasítás nem fut le ha a feltétel nem teljesül.
while ciklus ponthogy fut mindaddig,amíg a feltétel teljesül.

Példa: 

new i = 0;
while(i != 10) printf("i étéke: %d",i);

Tehát,amíg az i értéke nem 10,addig lefut a ciklus.Talán egyeseknek feltünhetett valami,mégpedigaz,hogy ez a ciklus hibás.Mivel ez egy végtelen ciklus!Magyarázat:Nem modosítjuk megfelelő módon az i értékét,tehát soha nem lesz az értéke 10!
for ciklusban ez autómatikus,itt magunknak kell figyelnünk rá!

new i = 0;
while(i != 10) printf("i étéke: %d",i),i++;

Na ez a ciklus a céljának megfelelően működik,lefut 10 szer.

Összefoglalva,ez a ciklus addig fut le amíg a feltétel nem teljesül.
Gyakorlatban,mondjuk fájlok olvasásánál használjuk,de ezzel is megoldható a for ciklusnál használt kis spawn kód.

new i = 0;
while(i != GetMaxPlayers())
{
 if(IsPlayerConnected(i)) SpawnPlayer(i); 
 i++;
}

do-while ciklus

Ez a ciklus ugyanúgy műküdik mint a while ciklus,anyi különbséggel,hogy az itt leírt utasítások 1X-mindenképp lefutnak,ha teljesül a feltétel,ha nem.
Ez egy hátultesztelős ciklus.

Szerkezet:

new i = 1;
do
{
 printf("i értéke %d",i);
while(i != 1)

Ez egy egyszerű példa,létrehozunk egy i változót mejnek kezdőértéke 1.
Lefut a ciklus,majd ellenőrizzük hogy az i egyenlő e 1-el.Ha nem,a ciklus újra lefut,amíg a feltétel nem teljesül.
Ha igen,a ciklus véget is ért.
A feltétel már teljesült,a cikus mégis lefutott egyszer.

//A gyakorlatban ne feletsük el megváltoztatni a megfelelő módon az i-értékét,vagy végtelen ciklust kapunk.

Nézzük csak a spawnolós kódunkat.

new i = 0;
do
{
 if(IsPlayerConnected(i)) SpawnPlayer(i); 
 i++;
while(i != GetMaxPlayers())

Utószó

Egyenlőre enyit a ciklusokról,ha valamit elírtam/nem jól fogalmaztam,hibáztam stb.
Akkor kérlek jelezzétek a topicban.

Ha eszembe jut még valami a ciklusokról,akkor aztis hozzáírom a leíráshoz.

Próbáltam egyszerűen leirni,hogy a kezdők is teljesen megértsék.

Még nincs hozzászólás.
     
Nézettség
Indulás: 2010-02-26
     
PAWN/Szkriptek
     
Tutorialok
     
Óra
     
Chat
Kérlek, felesleges dolgokat ne írj a chatbe!
Név:

Üzenet:
:)) :) :@ :? :(( :o :D ;) 8o 8p 8) 8| :( :'( ;D :$
     

Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168 Hívjon!    *****    A legfrissebb hírek a Super Mario világából és a legteljesebb adatbázis a Mario játékokról.Folyamatosan bõvülõ tartalom.    *****    Gigágá! Márton napján is gyertek a Mesetárba! Nemcsak libát, de kacsát is kaptok! Játsszatok velünk!    *****    A Nintendo a Nintendo Music-kal megint valami kiváló dolgot hozott létre! Alaposan nagyító alá vettem, az eredmény itt.    *****    Leanderek, Parfümök, Olajok, és Szépségápolási termékek! Használd a LEVI10 kupont és kapj 10% kedvezményt!Megnyitottunk    *****    Megjelent a Nintendo saját gyártású órája, a Nintendo Sound Clock Alarmo! Ha kíváncsi vagy, mit tud, itt olvashatsz róla    *****    Megnyílt a webáruházunk! Parfümök, Szépségápolási termékek, Olajok mind egy helyen! Nyitási akciók, siess mert limitált!    *****    Az általam legjobbnak vélt sportanimék listája itt olvasható. Top 10 Sportanime az Anime Odyssey-n!    *****    Pont ITT Pont MOST! Pont NEKED! Már fejlesztés alatt is szebbnél szebb képek! Ha gondolod gyere less be!    *****    Megnyílt a webáruházunk! NYITÁSI AKCIÓK! Tusfürdõ+Fogkrém+Sampon+Izzadásgátló+multifunkcionális balzsam most csak 4.490!    *****    Új mese a Mesetárban! Téged is vár, gyere bátran!    *****    Veterán anime rajongók egyik kedvence a Vadmacska kommandó. Retrospektív cikket olvashatsz róla az Anime Odyssey blogban    *****    Parfümök, Olajok, Párologtatók mind egy weboldalon! Siess mert nyitási AKCIÓNK nem sokáig tart! Nagy kedvezmények várnak    *****    Dryvit, hõszigetelés! Vállaljuk családi házak, nyaralók és egyéb épületek homlokzati szigetelését! 0630/583-3168 Hívjon!    *****    Aki érdeklõdik a horoszkópja után, az nem kíváncsi, hanem intelligens. Rendeld meg most és én segítek az értelmezésben!    *****    A Múzsa, egy gruppi élményei a színfalak mögött + napi agymenések és bölcseletek    *****    KARATE OKTATÁS *** kicsiknek és nagyoknak *** Budapest I. II. XII.kerületekben +36 70 779-55-77    *****    Augusztus 26-án Kutyák Világnapja! Gyertek a Mesetárba, és ünnepeljétek kutyás színezõkkel! Vau-vau!    *****    A horoszkóp elemzésed utáni érdeklõdés, nem kíváncsiság hanem intelligencia. Rendeld meg és nem fogod megbánni. Katt!!!    *****    Cikksorozatba kezdtem a PlayStation történelmérõl. Miért indult nehezen a Sony karrierje a konzoliparban?