メインコンテンツへスキップ

コードフレームワーク

ルールブックの表

固定のルールデータを表に置き、ルールから読むか、入力の選択肢として使います。

表とは

ルールブックの表は、職業ごとのボーナスのように、ルールが読む固定のデータです。プレイ状態ではなく、プレイヤーが変えることはありません。行を変えると、ソースの他の編集と同じように、ゲームの新しいバージョンができます。

表を宣言する

表は tables/ にある JSON ファイルです。マニフェストに載せます。

manifest/project.json
  "tables": ["tables/callings.json"]
  1. 10 行目 表ファイルのパスです。
tables/callings.json
{
  "id": "callings",
  "name": "Callings",
  "columns": [
    { "key": "calling", "label": "Calling", "type": "string" },
    { "key": "bonus", "label": "Watch bonus", "type": "number" }
  ],
  "rows": [
    { "calling": "Guard", "bonus": 30 },
    { "calling": "Scout", "bonus": 10 }
  ]
}
  1. 4-7 行目 列です。各列にキー、ラベル、型があります。型は string、number、boolean のいずれかです。
  2. 8-11 行目 行です。各行はすべての列の値を持ち、それ以外は持ちません。

フレームワークは、読む表の ID を一覧にします。

schemas/keeper.json
  "tables": ["callings"]
  1. 22 行目 このフレームワークは callings の表を読めます。
上限値
1 つの表の列数64
1 つの表の行数1000
1 つのフレームワークの表数64
1 つのゲームの表数128

ルールで表を読む

table.find は、表の ID、照合する列と探す値、返す列とそれぞれのデフォルトを取ります。照合する列がすべて値と等しい最初の行から、指定した列を返します。一致する行がなければ、デフォルトを返します。

rules/keeper.ts
export function construct(
  name: string,
  max_hp: number,
  calling: string,
): { name: string; max_hp: number; hp: number; calling: string; watch: number } {
  const row = table.find("callings", { calling: calling }, { bonus: 0 });
  const bonus: number = row.bonus;
  return {
    name: name,
    max_hp: max_hp,
    hp: max_hp,
    calling: calling,
    watch: 20 + bonus,
  };
}
  1. 6 行目 職業のボーナスを探します。デフォルトは 0 です。
  2. 7 行目 結果の列を読みます。型は表から決まるので、キャストは要りません。
  3. 13 行目 ボーナスを開始値に使います。

表の ID はコードに書いた文字列で、フレームワークがその表を一覧に載せている必要があります。指定する列はすべて存在しなければならず、返るのは指定した列だけです。コンストラクタも、この方法で表を読みます。 照合する値は、変数、フィールド、リテラルのいずれかにします。計算した値は使えません。

次の間違いは、プロジェクトを検証したときに見つかります。

  const row = table.find("callings", { calling: calling }, { boost: 0 });
has no column 'boost'
which manifest.tables does not declare
  const row = table.find("callings", { calling: calling + "!" }, { bonus: 0 });
table.find match values must be a variable, a field or a literal

表を選択肢に使う

テキスト入力は、表の 1 つの列から選択肢を取れます。選択肢は、その列の重複しない値で、行の順に並びます。

schemas/keeper.json
    "calling": {
      "label": "Calling",
      "optionsFrom": { "table": "callings", "column": "calling" },
      "defaultValue": "Guard"
    }
  1. 11 行目 ウィザードは calling 列の値を選択肢として出します。
  2. 12 行目 デフォルトは、選択肢のどれかにします。
is not one of this Framework's tables

テキスト型のアクション入力も、アクションの宣言にある optionsFrom の項目で同じことができます。ソースは、選択肢を 2 つ以上出す必要があります。

次へ