Pętle i warunki w GM

Klikipedia - klikowa encyklopedia
Wersja z dnia 16:55, 13 lis 2006 autorstwa Morty (dyskusja | edycje)
(różn.) ‹Starsza wersja | zobacz obecną wersję (różn.) | Nowsza wersja› (różn.)
Skocz do: nawigacji, wyszukiwarki
Autor.jpg
Autorem tego artykułu jest
Tymon

Artykuł ten pokazuje, jak sterować działaniem programu za pomocą pętli i warunków - są one potrzebne przy niemalże każdym, nawet prostym algorytmie.

Operatory

W warunkach bądź pętlach potrzebna będzie ci znajomość operatorów porównania takich jak A równe B albo A mniejsze od B, pewnie znasz je z lekcji matematyki. Używamy w GMLu takich oto operatorów:

==
jeśli A jest równe B. Dość często użytkownicy GMLa stawiają pojedynczy znak '=', lecz program nie traktuje tego jako przypisania wartości zmiennej tylko jako znak równości, ale jest tak tylko w warunkach i pętlach (w PHP pojedynczy znak '=' zawsze oznacza przypisanie wartości zmiennej).
<
jeśli A jest mniejsze od B.
>
jeśli A jest większe od B.
>=
jeśli A jest większe równe od B. Pamiętaj ze zapis '=>' jest błędem!
<=
jeśli A jest mniejsze równe od B. Pamiętaj ze zapis '=<' jest błędem!
!=
jeśli A nie jest równe B.

Warunki

Co to jest warunek? W GML jest to element który musi zostać spełniony aby wykonać jakieś instrukcje. Aby sprawdzić czy warunek jest spełniony (bądź nie) używa się if (z ang. jeżeli), konstrukcja wygląda tak:

if (<warunek>) <instrukcja>;

Instrukcja zostanie wykonana, jeśli warunek został spełniony. Przy sprawdzaniu warunków potrzebne są operatory porównania.

Razem z 'if' można używać else (z ang. w przeciwnym razie) czyli jeśli warunek nie został spełniony to mają być pewne inne instrukcje. Konstrukcja wygląda tak:

if (<warunek>)
{ <instrukcje_1>; }
else
{ <instrukcje_2>; }

Operatory logiczne

Warunki można łączyć za pomocą specjalnych znaków, zwanych operatorami logicznymi:

&&
oznacza 'and' (jeśli oba warunki są spełnione).
||
oznacza 'or' (jeśli jeden z warunków jest spełniony).
^^
oznacza 'xor' (jeśli tylko jeden z warunków jest spełniony).

Teraz mały przykład:

//Wykona tylko jeśli wszystkie warunki są spełnione
if (wiek>=0)
&& (zycie<=0)
&& (imie=='Jasio')
{ /* Akcja */ }
//Wykona tylko jeśli jeden z warunków zostanie spełniony
if (wiek==100)
|| (zycie==0)
{ /* Akcja */ }

Przykłady

W każdej grze pojawia się naprawdę dużo tego typu warunków np. czy gracz wcisną klawisz albo czy ma 0 żyć. Wiec znajomość konstrukcji 'if' jest podstawą. Oto kilka innych przykładów żebyś zobaczył, jak to wygląda w praktyce:

if (energia<=0) { /*Akcja*/ } else { /*Inna akcja*/ } 
if (imie!='Jasio') { /*Akcja*/ }
if (czas==100) && (zycia>0) { /*Akcja*/ }

Przyjrzyjmy się jeszcze takiemu przykładowi:

if (posiada_przedmiot) { /*Akcja*/ }

Zostanie tutaj sprawdzone czy warunek nie ma wartość 'false' (fałsz). Jeszcze jedna ciekawostka, nie musisz używać nawiasów '(' i ')' choć tak wygląda to czytelniej :)

Switch

Kolejnym typem warunku jest switch (z ang. przełącznik). Jego konstrukcja wygląda tak:

switch (<warunek>)
{
case <wartosc_1>: <instrukcje_1>; ... ; break;
case <wartosc_2>: <instrukcje_2>; ... ; break;
...
default: <instrukcje>;
} 

Jego działanie wygląda następująco:

  1. Sprawdza <warunek> dla <wartosc_1>.
  2. Jeśli jest spełniony to wykonuje <instrukcje_1>.
  3. Kończy sprawdzanie kolejnych wartości dla warunku jeśli po instrukcjach znajduje się 'break' w przeciwnym wypadku powtarza kroki 1-3 aż do skończenia się wartości.
  4. Jeśli żaden z warunków nie został spełniony to wywołuje instrukcje znajdujące się po 'default' (Pol. domyślne).

Pętle

Pętla jest w pewnym stopniu warunkiem tylko ze tutaj instrukcje są wykonywane dopóki warunek jest spełniony. W pętlach używamy dwóch poleceń: break i continue. Break przerywa wykonywanie pętli a continue zaś ją kontynuuje. Pierwsze z pętli która chce omówić jest pętla 'while' (Pol. dopóki). Jej konstrukcja wygląda tak:

while (<warunek>) <instrukcje>;

Instrukcje w pętli będą wykonywane do momentu nie spełnienia warunku bądź przerwania pletli.

Kolejna pętla jest do until (z ang. rób dopóki). Jej struktura wygląda tak:

do <instrukcje> until (<warunek>)

Do tej pętli bardzo podobna jest pętla 'while' lecz jest jedna wielka różnica, w pętli 'while' najpierw sprawdzane są warunki a potem wykonywane instrukcje, zaś w 'do until' najpierw wykonywana instrukcja a potem sprawdzany warunek (wiec instrukcje zostaną przynajmniej 1 raz wykonane).

Najprostszą z pętli jest repeat (z ang. powtarzaj). Powtarza ona po prosu jakieś X razy instrukcje. Jej konstrukcja wygląda tak:

repeat(<ilosc powtorzen>) <instrukcje>;

Jest jeszcze pętla for (z ang. dla). Jest dość trudna do zrozumienia, jej konstrukcja wygląda następująco:

for(<wartosc_poczatkowa>;<warunek>;<instrukcja>;) <inne instrukcje>;

W działaniu wygląda ona tak:

  1. Tworzy zmienną o wartości <wartosc_poczatkowa>.
  2. Sprawdza <warunek>.
  3. Wykonuje <instrukcja>.
  4. Powtarza kroki 2-4 aż do momentu gdy warunek nie zostanie spełniony.

Teraz mały przykład:

for(n=1;n<10;n+=1;) { /*Jakas akcja*/ )

Instrukcja będzie wykonywana dopóki zmienna n będzie mniejsza od 10. Ważne są tutaj te średniki wiec pamiętaj żeby zawsze je postawić gdzie trzeba :)

To już koniec tego kursu.