Logika hry

Dokončeno

V této lekci se podíváme na koncepty, jako je to, jak hra "Připojení čtyři" funguje a jaké konstrukce Blazoru potřebujete vědět o vytvoření hry.

Připojení Čtyři

Myšlenka s hrou "Připojení Čtyři" je pro vás, abyste rozložili čtyři herní kousky v řadě vodorovně, svisle nebo diagonálně předtím, než váš soupeř udělá. Věci, které je třeba vzít v úvahu při implementaci této hry, je sledovat aktuální stav herních částí, soupeřů a kontrolovat vítěze. Je užitečné při programování přemýšlet o herní smyčce, sadu akcí, které je třeba opakovat, dokud nebudete moci deklarovat vítěze. Něco takového:

  1. Začněte se stavem resetování, tj. čistou deskou bez herních částí.
  2. Uživatel umístí herní kus.
  3. Soupeř umístí herní kus.
  4. Kontrola výherce:
    1. Pokud je vítěz, deklarujte vítěze a koncovou hru nebo restartujte hru.
    2. Pokud žádný vítěz není, opakujte krok 2.

Reprezentace stavu v kódu

Za prvé, jaký je stav? Stav ve hrách je to, co se děje ve hře, kolik bodů máte, kde se nachází vaše herní místa atd.

Důležitým doprovodným materiálem, pokud jde o stav ve vývoji her, je zachovat stav odděleně od uživatelského rozhraní, protože usnadňuje úpravy a kód je čitelnější mezi dalšími výhodami.

V kontextu Blazoru by to znamená, že stav a logika kolem stavu by měly být ve své vlastní třídě C#, například takto:

class State
{
    Player [] players;
    int gameRoundsPlayed;
    bool gameOver;

    State()
    {
        players = new Players[]
        {
            new Player() { Name= "Player", Points = 0 },
            new Player() { Name= "Opponent", Points = 0 }
        };
        gameRoundsPlayed = 0;
        gameOver = false;
    }

    void ResetGame() 
    {
        gameOver = false;
        players[0].Points = 0;
        players[1].Points = 0;
    }

    void EndGame()
    {
        gameOver = true;
        gameRoundsPlayed++;
        // award winner..
    } 
}

Třída State obsahuje informace o tom, kdo hru hraje, kolik herních kol se hrálo, pokud je hra stále aktivní a tak dále.

Pomocí instance této State třídy v komponentách Blazor můžete nakreslit desku a provádět další akce v průběhu hry.

Resetování stavu hry v OnInitialized

V Blazoru existuje metoda, která se volá, když se komponenta inicializuje, než se stane cokoli jiného. Tato metoda je dobrým místem pro umístění kódu, které pomáhá umístit hru do stavu resetování, jako je vytvoření desky, hráčů a resetování všech skóre v případě potřeby z předchozích herních relací.

Metoda, která zpracovává tuto inicializaci komponenty je volána OnInitialized.

Metoda OnInitialized , která zpracovává resetování stavu hry, může vypadat přibližně takto:

void OnInitialized() 
{
    state.ResetGame();
}

Přesně to, co se tady děje, je na vás, ale tento kód by vám měl dát nápad.

Zpracování interakcí hráčů pomocí událostí

Když se vy nebo vaši soupeři posunete, budete muset zachytit tuto interakci. Interakce uživatelů zakódujete jako události, na které má vaše hra nebo aplikace reagovat.

Můžete například vybrat tlačítko nebo provést pohyb přetažením a přesunout herní kus.

Takto to může vypadat v kódu:

<span title="Click to play a piece" @onclick="() => PlayPiece(0)">🔽</span>

Ve výše uvedeném kódu @onclick určuje atribut direktivy obslužnou rutinu click události, tj. uživatel vybral tento prvek. Událost je zpracována kódem () => PlayPiece(0) , který vyvolá funkci PlayPiece(0).

Změna stavu

Akce, která se stane ve hře, by měla mít vliv na váš stav hry. V předchozím příkladu, kde vyvoláme PlayPiece(), bychom měli změnit stav říct, že tato část desky je nyní obsazena kusem. To znamená, že vzhledem k naší třídě State příkladu potřebujeme způsob, jak znázorňovat herní kousky, například takto:

class State 
{
    // other code omitted
    Piece [] pieces;

    State()
    {
        pieces = new Piece[25]; // 5x5 board
    }

    void PlayPiece(int position)
    {
        pieces[position] = true; // true = occupied
    }
}