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 :$
     

Ha te is könyvkiadásban gondolkodsz, ajánlom figyelmedbe az postomat, amiben minden összegyûjtött információt megírtam.    *****    Nyereményjáték! Nyerd meg az éjszakai arckrémet! További információkért és játék szabályért kattints! Nyereményjáték!    *****    A legfrissebb hírek Super Mario világából, plusz információk, tippek-trükkök, végigjátszások!    *****    Ha hagyod, hogy magával ragadjon a Mario Golf miliõje, akkor egy egyedi és életre szóló játékélménnyel leszel gazdagabb!    *****    A horoszkóp a lélek tükre, nagyon fontos idõnként megtudni, mit rejteget. Keress meg és nézzünk bele együtt. Várlak!    *****    Dryvit, hõszigetelés! Vállaljuk családi házak, lakások, nyaralók és egyéb épületek homlokzati szigetelését!    *****    rose-harbor.hungarianforum.com - rose-harbor.hungarianforum.com - rose-harbor.hungarianforum.com    *****    Vérfarkasok, boszorkányok, alakváltók, démonok, bukott angyalok és emberek. A világ oly' színes, de vajon békés is?    *****    Az emberek vakok, kiváltképp akkor, ha olyasmivel találkoznak, amit kényelmesebb nem észrevenni... - HUNGARIANFORUM    *****    Valahol Delaware államban létezik egy város, ahol a természetfeletti lények otthonra lelhetnek... Közéjük tartozol?    *****    Minden mágia megköveteli a maga árát... Ez az ár pedig néha túlságosan is nagy, hogy megfizessük - FRPG    *****    Why do all the monsters come out at night? - FRPG - Why do all the monsters come out at night? - FRPG - Aktív közösség    *****    Az oldal egy évvel ezelõtt költözött új otthonába, azóta pedig az élet csak pörög és pörög! - AKTÍV FÓRUMOS SZEREPJÁTÉK    *****    Vajon milyen lehet egy rejtélyekkel teli kisváros polgármesterének lenni? És mi történik, ha a bizalmasod árul el?    *****    A szörnyek miért csak éjjel bújnak elõ? Az ártatlan külsõ mögött is lapulhat valami rémes? - fórumos szerepjáték    *****    Ünnepeld a magyar költészet napját a Mesetárban! Boldog születésnapot, magyar vers!    *****    Amikor nem tudod mit tegyél és tanácstalan vagy akkor segít az asztrológia. Fordúlj hozzám, segítek. Csak kattints!    *****    Részletes személyiség és sors analízis + 3 éves elõrejelzés, majd idõkorlát nélkül felteheted a kérdéseidet. Nézz be!!!!    *****    A horoszkóp a lélek tükre, egyszer mindenkinek érdemes belenéznie. Ez csak intelligencia kérdése. Tedd meg Te is. Várlak    *****    Új kínálatunkban te is megtalálhatod legjobb eladó ingatlanok között a megfelelõt Debrecenben. Simonyi ingatlan Gportal