Show page source of CreateGameDataJa #91805

= ゲームデータの作り方
このページでは、自力でゲームデータを作る方法を説明します。

== はじめに
!GameRandomizerのゲームデータは XML (extensible markup language) ファイル
で構成されます。
XMLデータはテキストなので、ファイルはテキストエディターを使えば編集できます。

XMLファイルはゲーム毎に、複数個のファイル ― 1個の '!__game.xml' (先頭は '_' 2つ)
ファイルおよび1個以上の拡張セットファイル ― を用意する必要があります。

XMLファイルはすべてUTF-8で記述してなくては__なりません__。

== '!__game.xml' ファイル
'!__game.xml' では、ゲームの基本的な情報を定義します。
以下は、'!__game.xml' の記述例です。

{{{
<?xml version="1.0" encoding="UTF-8"?>
<game id="dominion"
      revision="1" format_version="1" language="ja" country="">
  <game_title>ドミニオン</game_title>
  <selection_size>10</selection_size>
</game>
}}}

行の先頭の空白文字は、省略可能です。
2行目は次のように書くこともできます。

{{{
<game id="dominion"
revision="1" format_version="1" language="ja" country="">
}}}

空白文字が許されている箇所では、改行文字を挿入することもできます。

{{{
<game id="dominion"
      revision="1"
      format_version="1"
      language="ja"
      country="">
}}}

'!__game.xml' ファイルの1行目は、XML宣言でなくては__なりません__。
以下の行をそのまま書いて下さい。

{{{
<?xml version="1.0" encoding="UTF-8"?>
}}}

ファイルの残り部分は、<game>...</game> ブロックです。
開始タグ <game> はいくつかの属性 (アトリビュート) を持っています。

{{{
<game id="dominion"
      revision="1" format_version="1" language="ja" country="">
}}}

以下に、属性を簡単なまとめを載せます。

||'''属性'''||'''説明'''||
||id||ゲームのID||
||revision||このXMLファイルの改版番号||
||format_version||XMLファイルの形式バージョン||
||language||言語コード||
||country||国コード||

'id' 属性の値は、すべてのゲームで固有のものでなければ__なりません__。

'revision' 属性は省略しても構いません。
!GameRandomizerはこの属性を無視しますが、ゲームデータを管理する
ために、この属性には適切な値を入れておく__べきです__。
始めは '1' とし、更新する度に一つずつ上げていって下さい。

'language' と 'country' 属性は、ゲームデータが指定した言語、指定した
国向けに記述されたものであることを表します。
!GameRandomizerは、Android端末の「言語・国の設定」に適合したゲームデータ
だけを読み込みます。
(「設定」→「言語と入力」で、言語・国の設定を変更することができます。)

'language' の値は、ISO 639-1 言語コードの2文字形式を小文字で記述したもので
なければ__なりません__。
この例で使用している言語コード 'ja' は日本語を意味します。
言語コードの一覧は、次の場所で参照できます。

 * [http://www.loc.gov/standards/iso639-2/php/code_list.php]

'country' の値は、ISO 3166-1 言語/地域コードを大文字で表したものでなければ
__なりません__。
国/地域コードの一覧は、以下の場所で参照できます。

 * [http://www.iso.org/iso/iso-3166-1_decoding_table]

'language' と異なり、'country' は空 ("") でも構いません。
多くのケースで、'country' にセットする値で最も適しているのは、空です。
もし、中国語 (zh) のゲームデータを作るなら、'country' に 'CN' (中国 = 簡体中文)
もしくは 'TW' (台湾 = 繁体中文) をセットして下さい。

ゲームの基本情報は、<game>...</game> ブロックの中に記述します。

{{{
<game_title>ドミニオン</game_title>
<selection_size>10</selection_size>
}}}

<game_title>...</game_title> には、ゲームのタイトルを記します。

<selection_size>...</selection_size> には、!GameRandomizerが何種類のカード
を無作為に選ぶのかを記述して下さい。
値は0より大きな整数でなければ__なりません__。

== 拡張セットファイル
個々の拡張セットファイルには、ゲームの拡張セット一つ (ドミニオンで言う「陰謀」「海辺」...)
を定義します。
!GameRandomizerは基本セット (ドミニオンで言う「ドミニオン」) と拡張セットを区別
しないため、基本セット用にも拡張セットファイルが必要です。

拡張セットファイルの例を示します。

{{{
<?xml version="1.0" encoding="UTF-8"?>
<expansion id="intrigue" game_id="dominion"
           revision="1" format_version="1" language="ja" country="">

  <preference>1020</preference>
  <expansion_title>陰謀</expansion_title>

  <card id="courtyard">
    <title>中庭</title>
    <price>2</price>
  </card>

  <card id="pawn">
    <title>手先</title>
    <price>2</price>
  </card>
</expansion>
}}}

1行目はXML宣言で、これは '!__game.xml' と同じものです。

{{{
<?xml version="1.0" encoding="UTF-8"?>
}}}

ファイルの残り部分は、<expansion>...</expansion> ブロックです。
開始タグ <expansion> はいくつかの属性を持っています。

{{{
<game id="intrigue" game_id="dominion"
      revision="1" format_version="1" language="ja" country="">
}}}

これら属性の意味は、次の通りです。

||'''属性'''||'''説明'''||
||id||拡張セットのID||
||game_id||ゲームのID||
||revision||このXMLファイルの改版番号||
||format_version||XMLファイルの形式バージョン||
||language||言語コード||
||country||国コード||

'revision'、'format_version'、'language'、'country' は、'!__game.xml'
における <game> タグのものと同じです。

'game_id' タグの値は、'!__game.xml' における <game> タグの 'id' 属性の値
と同じでなくては__なりません__。

'id' の値は、そのゲームの拡張セットで固有のものでなくては__なりません__。
拡張セットファイルのファイル名は、''id''.xmlでなくては__なりません__。
(この例では、ファイル名は 'intriguge.xml' でなくてはなりません。)

拡張セットの基本情報は、<expansion>...</expansion> ブロック内の先頭に
記します。

{{{
  <preference>1020</preference>
  <expansion_title>陰謀</expansion_title>
}}}

<preference>...</preference> タグの中の値は、整数でなくては__なりません__。
!GameRandomizerは拡張セットの一覧を表示する際、'preference' の値に
したがって拡張セットを並べます。
値は、そのゲームの拡張セットに固有のものである__べきです__。

<expansion_title>...</expansion_title> には、拡張セットのタイトルを記します。

<expansion>...</expansion> ブロックの残り部分で、その拡張セットが提供
しているカードをすべて定義します。

{{{
  <card id="courtyard">
    <title>中庭</title>
    <price>2</price>
  </card>

  <card id="pawn">
    <title>手先</title>
    <price>2</price>
  </card>
}}}

あくまでも記述例なので、この拡張セットではカードを2種類しか定義していません。
<card>...</card> ブロック1つでカード1種類を定義します。
<card> タグは、カードを識別するための属性 'id' を持ちます。
IDはそのゲームのカードすべてで固有のものでなくては__なりません__。
ただし、複数の拡張セットが同一のカードを提供している場合、それらのカード
には同一のIDを割り当てなければ__なりません__。
そうしないと!GameRandomizerは、無作為に選ぶ際にそのカードを複数回
選んでしまいます。

<title>...</title> にはカードのタイトルを記述します。

<price>...</price> には、カードの価格 (コスト) を記します。
<price>...</price> に指定できる値は、整数に限定されません。
「?」、「X」、「3+」といった値もセットすることができます。

== フォルダとファイルのレイアウト
'!__game.xml' ファイルの <game> タグが、次のようになっているものと
します。

{{{
<game id="dominion"
      revision="1" format_version="1" language="ja" country="">
}}}

その場合、'!__game.xml' は 'dominion/ja/!__game.xml' として配置され
なければ__なりません__。

{{{
+- dominion/
   +- ja/
      +- __game.xml
}}}

トップフォルダ名 (「dominion」) は 'id' 属性から決定され、サブフォルダ名
(「ja」) は 'language' 属性から決定されます。
'country' 属性の値が空でない場合は、サブフォルダ名に 「_ + ''countryの値''」
をフォルダ名に足します。
たとえば、'language' 属性の値が "zh"、'country' 属性の値が "TW" であれば、適切な
サブフォルダ名は「zh_TW」になります。

{{{
+- dominion/
   +- zh_TW/
      +- __game.xml
}}}

'!__game.xml' と同じフォルダに、すべての拡張セットファイルを置きます。

{{{
+- dominion/
   +- ja/
      +- __game.xml
      +- dominion.xml
      +- intrigue.xml
      +- seaside.xml
      +- alchemy.xml
}}}

以上で、ゲームデータは!GameRandomizerから利用できるようになります。