Przejdź do głównej treści

Frameworki kodowe

Jak Fabled uruchamia Twój kod

Prześledź projekt od kodu źródłowego do gry: co działa i kiedy, jak działa ledger i co dowodzi scenariusz.

Od kodu źródłowego do gry

Twój projekt przechodzi pięć kroków. Tylko ostatni to gra. Wcześniejsze kroki nigdy nie zmieniają żywej postaci.

  1. Napisz

    Edytujesz pliki źródłowe w edytorze źródeł. Nic jeszcze nie działa.

  2. Sprawdź

    Sprawdź i wyświetl kompiluje Twoje bieżące zmiany i uruchamia każdy scenariusz, zapisane lub nie. Problemy pojawiają się w panelu Problemy. Nic nie jest publikowane.

  3. Zapisz

    Zapisz projekt zachowuje kod źródłowy jako nową wersję Twojej gry. Przygotowanie działa tylko na zapisanej wersji, więc zapisz przed przygotowaniem.

  4. Przygotuj

    Przygotuj moją grę buduje prywatne frameworki, ramki i treści z zapisanej wersji. Serwer sprawdza projekt jeszcze raz i jego werdykt jest ostateczny.

  5. Graj

    Gracz tworzy postać z Twojego frameworka. Konstruktor ją buduje, a akcje ją zmieniają.

Co działa kiedy

CzęśćKiedy działaCo robi
KonstruktorRaz, gdy element jest tworzony z frameworka.Zamienia dane wejściowe na wartości początkowe. Nigdy nie zapisuje.
Funkcja ledgeraGdy element jest budowany, w kolejności, w jakiej schemat deklaruje funkcje, i ponownie po każdej akcji.Wylicza wartość z zapisanych wartości. Akcja nie może jej zapisać.
AkcjaGdy gracz użyje przycisku, który ją wywołuje.Zapisuje do ledgera przez ledger.set i ledger.add.
RamkaZa każdym razem, gdy karta jest pokazana.Czyta zapisane wartości i je rysuje. Jej przyciski wywołują akcje.
ScenariuszW Sprawdź i wyświetl, nigdy w grze.Buduje element, uruchamia akcje i porównuje każdą wartość i zapis.

Ledger

Wartości elementu nigdy nie są zmieniane w miejscu. Każda zmiana to zapis w jego ledgerze. ledger.set zastępuje wartość, a ledger.add ją zwiększa. Scenariusze wymieniają te zapisy, więc widzisz dokładnie, co robi reguła.

Wartość pochodna pochodzi z funkcji ledgera, więc akcja nie może jej zapisać. Sprawdzenie ją odrzuca:

which is a non-writable state field

Konstruktor nadal zwraca pole, które wylicza funkcja ledgera, z wartością zastępczą, na przykład 0. Funkcja ledgera zastępuje ją, gdy element jest budowany. Scenariusz porównuje swoje expectedValues z wartościami po uruchomieniu funkcji ledgera, więc wpisz tam wartość pochodną, a nie zastępczą.

Funkcje ledgera działają w kolejności, w jakiej schemat je deklaruje, a każda widzi wyniki wcześniejszych. Zadeklaruj funkcję po funkcjach, których pola czyta. Tutaj total czyta base, ale jest zadeklarowana pierwsza, więc czyta wartość zastępczą:

{
  "ledgerFunctions": [
    {
      "id": "total",
      "name": "Total",
      "field": "total",
      "source": "rules/total.ts"
    },
    {
      "id": "base",
      "name": "Base",
      "field": "base",
      "source": "rules/base.ts"
    }
  ]
}
expectedValues.total: expected 11, constructor returned 1

Użyj funkcji ledgera dla wartości, która ma podążać za innymi polami i której żadna akcja nie zapisuje. Użyj wartości z konstruktora dla liczby, którą postać posiada i którą zmieniają akcje, na przykład hp. Konstruktor liczy ją raz, więc późniejsza zmiana pól, z których powstała, jej nie przesuwa.

Co dowodzi scenariusz

  • Konstruktor zwraca wartości, których oczekujesz.
  • Każda akcja wykonuje dokładnie te zapisy, które wymienisz.
  • Wartości pochodne wychodzą poprawnie, także po akcji.
  • Każdy plik jest użyty i cały projekt się kompiluje.

Scenariusz nie dowodzi, jak wygląda karta ani jak reguła sprawdza się w grze. Wypróbuj do tego przygotowaną grę.

Dalej