Gothic I Gothic II Gothic III Risen Modding
Už víte co je to proměnná, ale jak s ní pracovat? Hrdina například zabije vlka, který dává 60 zkušeností. Ve scriptu to pak může vypadat nějak takto:

var int hrdinovyZkusenosti;
const int levelVlka = 6;

hrdinovyZkusenosti = hrdinovyZkusenosti + levelVlka * 10;

Proměnné hrdinovyZkusenosti a levelVlka už byli definovány někde dřív. Budeme brát, že hrdina má aktuálně 320 zkušeností. Takže pokud dosadíme do vzorečku místo proměnných konkrétní čísla, tak:

hrdinovyZkusenosti = 320 + 6 * 10; hrdinovyZkusenosti = 380;

Asi už je jasné, že základní operace jsou +, -, * a /. V programovacích jazycích pak ještě modulo (zbytek po dělení) %. U příkladu cislo = 19 % 4 by proměnná cislo obsahovala trojku, protože 19 / 4 je 4 a zbytek je 3.

Už se ale dostáváme k problému, co když potřebujeme na základě proměnné něco udělat. Hráči Gothic jsou velcí gauneři a každou chvíli platí u nějaké autority pokutu za své chování. Standardní poplatek je myslím 100 zlatých. Koukněte na následující kód:

var int hrdinovoBohatstvi;
const int pokuta = 100;

// Hrdina si popovídá s Lordem Andrem o pokutě

if (hrdinovoBohatstvi >= poplatek)
{
    hrdinovoBohatstvi = hrdinovoBohatstvi - pokuta;

    // Lord Andre smaže hrdinovi trestní rejstřík
}
else
{
    // Lord Andre vynadá hrdinovi, že nemá na zaplacení dostatek peněz
};

Podmínka if zjistí, jestli výraz uvnitř (hrdinovoBohatstvi >= poplatek) platí nebo ne. Pokud platí, vykoná se kód uvnitř složených závorek u if. Pokud neplatí, vykoná se kód uvnitř složených závorek za else. Jestli nechcete žádný kód vykonat, pokud podmínka neplatí, nemusíte blok kódu s else vůbec psát. Jenom je pak potřeba dát středník za uzavřenou složenou závorku pod if.

Správné podmínky

if (27 == 15)
{
    // Tento blok se nikdy nevykoná
}
else
{
    // 27 se nerovná 15, takže program skočí sem
};

if (7 % 2 == 1)
{
    // Tento blok se vykoná, podmínka platí
};

Špatné podmínky

if (1 == 1)
{
    // kód
}

const string text = "blablabla";

else
{
    // kód
};

A teď jak je to vlastně s vyhodnocováním podmínek. Tohle už je malinko těžší záležitost, tak snad se mi povede dobře vysvětlit. Každá podmínka se nakonec rovná buď hodnotě 0false, to znamená že podmínka není pravdivá. Nebo se vyhodnotí jako 1true což znamená, že daný výraz platí. Při určování podmínky můžeme využít jeden z těchto výrazů:

< menší než <= menší nebo rovno než > větší než >= větší nebo rovno než == hodnoty se rovnají != hodnoty se nerovnají
Ukázka podmínek které platí (rovnají se true)

5 * 2 < 5 + 7
12 / 4 <= 3
2 > - 3 * 2 + 5
3 + - 3 >= - 4
3 - 3 == 21 % 7
"Ahoj" != "Čau"

Ukázka podmínek které neplatí (rovnají se false)

2 < 2
3 / 3 <= 0
7 > 9
(- 2 * 5) % 3 >= 2
"Ahoj" == "Čau"
2 + 3 != 5

Jestli vám tyhle podmínky přijdou na vyhodnocování jednoduché, tak s operátory "a zároveň" && a "a nebo" || už to zas taková sranda nebude. Mají za úkol spojit více podmínek dohromady. Pravdivostní tabulka by pak vypadala asi takto:

&& - celková podmínka platí, pokud na obou stranách operátoru platí podmínky

// Platí
true && true

// Neplatí
false && true
true && false
false && false

|| - celková podmínka platí, pokud alespoň na jedné straně operátoru podmínka platí

// Platí
true || true
false || true
true || false

// Neplatí
false || false

Těchto operátorů můžete za sebe kupit víc. Jedna velká podmínka tak může obsahovat klidně 5x && a 3x ||

Takže zase pár ukázek podmínek které platí (rovnají se true)

2 == 2 && 6 / 3 >= 3
"Bla" != "Ble" || 5 > 7
(3 * 2 > 12 / 6 || 3 - 3 == - 1) && (3 + - 3 >= - 4 || 5 != 3)

Podmínky které neplatí (rovnají se false)

3 * 3 == 9 && 9 % 3 == 3
"Bla" == "Ble" || "Bla" != "Bla"
(3 * 2 > 12 / 6 && 3 - 3 == - 1) || 5 == 3

Poslední používaný operátor je pak negace !. Pokud vyjde hodnota true, negátor jí zneguje na false a hodnotu false zase zneguje na true.

Tahle podmínka tedy platí

(3 * 3 == 5)!

a tahle neplatí...

("Rajče" != "Okurka")!

Asi už vám jde z vyhodnocování podmínek hlava kolem, takže se radši vrátím opět k samotným podmínkám. Ještě jsem nezmínil podmínku else if, která patří mezi if a else a zastupuje operátor ||. else if podmínek může být v kódu nekonečně hodně. Rovnou si to předvedeme na příkladu. Diego učí hrdinu obratnost. Je ale potřeba si pohlídat, aby měl hrdina na učení dostatek zkušeností, aby ho uměl Diego ještě učit a pokud ho naučí obratnost víc jak 90, tak aby uměl hrdina i akrobacii. Jdeme na to...

const int maximalniObratnostDiego = 200;
const int akrobacie = 90;

var int obratnost;
var int zkusenostniBodyHrdiny;
var int umiHrdinaAkrobacii;

if (zkusenostiBodyHrdiny > 0)
{
    if (obratnost < maximalniObratnostDiego)
    {
        obratnost = obratnost + 1;
        zkusenostniBodyHrdiny = zkusenostniBodyHrdiny - 1;

        if (obratnost >= akrobacie)
        {
            umiHrdinaAkrobacii = true;
        };
    }
    else
    {
        // Diego hrdinovy řekne,
        // že žák překonal svého učitele
    };
}
else
{
    // Diego hrdinovy řekne,
    // že nemá dostatek zkušenostních bodů
};

A s využitím else if, které se sem ale zrovna moc nehodí, protože kód je o stupeň těžší na pochopení a hlavně podmínka jestli má hrdina dostatek zkušenostních bodů se bude zjišťovat dvakrát...

const int maximalniObratnostDiego = 200;
const int akrobacie = 90;

var int obratnost;
var int zkusenostniBodyHrdiny;
var int umiHrdinaAkrobacii;

if (zkusenostiBodyHrdiny > 0 && obratnost < maximalniObratnostDiego)
{
    obratnost = obratnost + 1;
    zkusenostniBodyHrdiny = zkusenostniBodyHrdiny - 1;

    if (obratnost >= akrobacie)
    {
        umiHrdinaAkrobacii = true;
    };
}
else if (zkusenostiBodyHrdiny <= 0)
{
    // Diego hrdinovy řekne,
    // že nemá dostatek zkušenostních bodů
}
else
{
    // Diego hrdinovy řekne,
    // že žák překonal svého učitele
};
Google+