by ◆CEeOGi4Lj. (2015/4/4)
ここではマジックの仕様について説明します。
マジックに於いても以前説明したバニラモンスターと同じくJSON形式のデータとして扱います。
まずはマジックのカードデータのパラメータを見てみましょう。
【図1.マジックカードのデータ構造】
{
"CardType": "magic",
"ID": 2XXXX,
"Name": "",
"COST": ,
"Range": "0000000000002000000000000",
"Effect": [],
"FT": ""
}
次に各パラメータについて説明していきます。
CardType : カードの種別(バニラモンスター、マジック、効果モンスター)。マジックにおいてはここには "magic" という値が入ります。
ID : カードNO。マジックのカードNOは先頭桁が"2"になっているので"2XXXX"といった5桁の値が入ります。
Name : カードの名称が入ります。
COST : カードのプレイコストが入ります。
Range : カード効果の適用範囲が入ります。範囲の書き方は以前モンスターのデータ入力で説明したものと同じです。
FT : フレーバーテキストが入ります。
Effect : カードの効果が入ります。マジックにおいて一番重要なところと言えますね。
この"Effect"パラメータは上で説明した"CardType"や"ID"などと違い、「配列」となっており、ここには1個~複数個の「要素」が入ります。
【図2."Effect"データ構造1】
"Effect":[
{処理0},
{処理1},
{処理2},
.....
{処理x}
]
簡単に表すとこのようなデータ構造になっております。
上から順に 処理0→処理1→処理2→...→処理x と実行していき、効果を再現します。
大体のイメージはできたかと思います。では"Effect"の要素、上の図2中の "Effect"の要素、{処理1}の中身がどうなっているかみてみましょう。
【図3."Effect"の要素{処理}のデータ構造】
{
"scope": "",
"execute": "",
"process": []
}
これらのパラメータについて説明していきます。
scope : 日本語に訳すと「視野」などに当たります。ここではどこに着目した処理かを定義します。
例えば"range"(効果範囲)や"board"(フィールド全体)、"player"(プレイヤー)などの値が入ります。詳しくは後述していきます。
exectute : 処理がいつ実行されるかを定義します。大抵の場合、発動後すぐに処理される効果になるので"immediate"という値が入ります。
process : 日本語に訳すと「過程」といった意味です。このパラメータも「配列」になっており、この処理が遂行されるための1個~複数個の要素 {過程} が入ります。
【図4 "process"データ構造】
"process":[
{過程0},
{過程1},
.....
{過程x}
]
※詳しく後述しますが、"process"の要素{過程}は必ずしも上から順次にすべて実行されるとは限りません。
ここまでをまとめてもう少し詳しい"Effect"の構造をみてみましょう。
【図5."Effect"データ構造2】
"Effect”:[
{
"scope": "",
"execute": "",
"process”:[
{過程0},
{過程1},
….
{過程x}
]
},
{
"scope": "",
"execute": "",
"process”:[
{過程0},
{過程1},
….
{過程x}
]
},
.....
{
"scope": "",
"execute": "",
"process”:[
{過程0},
{過程1},
….
{過程x}
]
},
]
さてここで一旦、マジック「空調どうだろう?」の効果を例に"Effect"のデータ構造がどういう風に書かれているかを簡単にみてみましょう。
【図6.「空調どうだろう?」の"Effect"データ構造1】
"Effect”:[
{
"scope": "player", ←プレイヤーを対象
"execute": "immediate", ←発動後すぐに実行
"process”:[
{あなたに3ダメージ与える}
]
},
{
"scope": "range", ←効果範囲のモンスターを対象
"execute": "immediate", ←発動後すぐに実行
"process”:[
{タップする},
{-1/+0の修正を与える}
]
}
]
次に"process"の要素(以下 {過程} とする)について説明していきます。
「空調どうだろう?」中の"process"における{あなたに3ダメージ与える}等も含めて、どのように記述されているか完成形をみてみましょう。
"Effect": [
{
"scope": "player", ←プレイヤーを対象
"execute": "immediate", ←発動後すぐに実行
"process": [
{
"do": "alterValue", ←パラメータを修正する
"target": "me", ←自分(発動したプレイヤー)を対象
"param": "life", ←修正するパラメータ
"val": "-3", ←修正値
"next": "-1" ←次に実行される{過程}
}
]
},
{
"scope": "range", ←範囲内のモンスターを対象
"execute": "immediate", ←発動後すぐに実行
"process": [
{
"do": "switch", ←タップ状態、コントローラを切り替えるときに使う
"param": "tapped", ←切り替えるパラメータ
"val": "true", ←切り替える値
"next": "1" ←次に実行される{過程}
},
{
"do": "alterValue", ←パラメータを修正する
"param": "atk", ←修正するパラメータ
"val": "-1", ←修正する値
"next": "-1" ←次に実行される {過程}
}
]
}
]
(つづく)
また今度続き書くからちょっとまって
最終更新:2015年04月04日 00:14