Under the Bridge

a Picture of the Late Him

MT4:世界のナベアツをテンプレートタグで表現(2)

2008年4月12日 18:33 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

今度はJavaScriptではなく、自作プラグインを使用した。

ちなみに、mixiのコミュで、お題として挙げている。

こんにちは、yoshiといいます。 「NabeAzz 世界のナベアツをテンプレートタグで表現してみる」 というお題を提案してみます。 ・40までのループを作成する ・3で割れる、3のつく数のときアホっぽくなる →3,6,9,12,13,15,18,21,23,24,27,30,31,32,33,34,35,36,37,38,39 ・5で割れる、5のつく数のとき犬っぽくなる →5,10,15,20,25,30,35,40 アホや犬のときは、さまざまなバリエーションがあるとGood。 (たとえば、犬は「ワン」「ワフ」「ガルル」「ウー」とかのバリエーション) FizzBuzzと似ていますが、更に高度です。 有用度ゼロですが、腕磨きにはいいと思います。

更に以下のような仕様を盛り込んだ。

準備

CalcRndプラグインが必要。

ここにある。

MT4.1:プラグインを書いてみよう

ソース

<MTIgnore>軽度のアホのデータを準備</MTIgnore>
<MTSetVar name="ahodata[1]" value="[軽度アホ]あほです">
<MTSetVar name="ahodata[2]" value="[軽度アホ]アホウです">
<MTSetVar name="ahodata[3]" value="[軽度アホ]アホィです">
<MTSetVar name="ahodata[4]" value="[軽度アホ]アヘです">
<MTSetVar name="ahodata[5]" value="[軽度アホ]アヒです">
<MTSetVar name="ahodata[6]" value="[軽度アホ]アホホです">
<MTSetVar name="ahodata[7]" value="[軽度アホ]ホアです">
<MTSetVar name="ahodata[8]" value="[軽度アホ]アホゥです">
<MTSetVar name="ahodata[9]" value="[軽度アホ]ホホです">
<MTSetVar name="ahodata[10]" value="[軽度アホ]ホホホーです">

<MTIgnore>重度のアホのデータを準備</MTIgnore>
<MTSetVar name="ahodata[11]" value="[重度アホ]ヌコが好きですがヌコってなんですか">
<MTSetVar name="ahodata[12]" value="[重度アホ]ボクのお父さんはこの亀です">
<MTSetVar name="ahodata[13]" value="[重度アホ]チップスアホィを食べるです">
<MTSetVar name="ahodata[14]" value="[重度アホ]アホウドリはお母さんです">
<MTSetVar name="ahodata[15]" value="[重度アホ]今から消防署へ行きます">
<MTSetVar name="ahodata[16]" value="[重度アホ]ボクのおうちは山です">
<MTSetVar name="ahodata[17]" value="[重度アホ]うんこしていいですか">
<MTSetVar name="ahodata[18]" value="[重度アホ]そしてそれ食べていいですか">
<MTSetVar name="ahodata[19]" value="[重度アホ]本当は犬っぽくなりたかとです">
<MTSetVar name="ahodata[20]" value="[重度アホ]ヌコっぽかのもよかどですじゃけえ">

<MTIgnore>軽度の犬のデータを準備</MTIgnore>
<MTSetVar name="inudata[1]" value="[軽度いぬ]ワン">
<MTSetVar name="inudata[2]" value="[軽度いぬ]ワフ">
<MTSetVar name="inudata[3]" value="[軽度いぬ]バウ">
<MTSetVar name="inudata[4]" value="[軽度いぬ]ワウワウ">
<MTSetVar name="inudata[5]" value="[軽度いぬ]バウワウ">
<MTSetVar name="inudata[6]" value="[軽度いぬ]ウー">
<MTSetVar name="inudata[7]" value="[軽度いぬ]ガルル">
<MTSetVar name="inudata[8]" value="[軽度いぬ]ウルルル">
<MTSetVar name="inudata[9]" value="[軽度いぬ]キャン">
<MTSetVar name="inudata[10]" value="[軽度いぬ]キャイーン">

<MTIgnore>重度の犬のデータを準備</MTIgnore>
<MTSetVar name="inudata[11]" value="[重度いぬ]俺犬だけどワンとかいわねえぜ">
<MTSetVar name="inudata[12]" value="[重度いぬ]だけど骨は大好きだぜ">
<MTSetVar name="inudata[13]" value="[重度いぬ]庭へ埋めてあるんだ">
<MTSetVar name="inudata[14]" value="[重度いぬ]俺の宝物の骨を">
<MTSetVar name="inudata[15]" value="[重度いぬ]こないださー3年ぶりに掘り起こしてみたのさ">
<MTSetVar name="inudata[16]" value="[重度いぬ]そしたら芽が出てて和んだぜ畜生">
<MTSetVar name="inudata[17]" value="[重度いぬ]食ってみたのさそれを">
<MTSetVar name="inudata[18]" value="[重度いぬ]中にせみの幼虫がいたさ">
<MTSetVar name="inudata[19]" value="[重度いぬ]でもかまわず食っちまった">
<MTSetVar name="inudata[20]" value="[重度いぬ]最低な犬だよな俺は">

<MTIgnore>アホと犬のインデックスを初期化</MTIgnore>
<MTSetVarTemplate name="Init">
<MTSetVar name="ahoindex1" value="0"><MTIgnore>重度のアホ</MTIgnore>
<MTSetVar name="ahoindex2" value="0"><MTIgnore>軽度のアホ</MTIgnore>
<MTSetVar name="inuindex1" value="0"><MTIgnore>重度の犬</MTIgnore>
<MTSetVar name="inuindex2" value="0"><MTIgnore>軽度の犬</MTIgnore>
</MTSetVarTemplate>

<MTIgnore>メイン処理</MTIgnore>
<ul>
<MTFor var="x" from="1" to="40">

<MTIgnore>アホのインデックスを取得</MTIgnore>
<MTIf name="x" like="3">
   <MTSetVarBlock name="ahoindex1"><$MTCalcRnd$></MTSetVarBlock>
   <MTSetVar name="ahoindex2" value="0">
<MTElse>
   <MTIf name="x" op="%" value="3" eq="0">
      <MTSetVarBlock name="ahoindex2"><$MTCalcRnd$></MTSetVarBlock>
      <MTSetVar name="ahoindex1" value="0">
   </MTIf>
</MTIf>

<MTIgnore>犬のインデックスを取得</MTIgnore>
<MTIf name="x" like="5">
   <MTSetVarBlock name="inuindex1"><$MTCalcRnd$></MTSetVarBlock>
   <MTSetVar name="inuindex2" value="0">
<MTElse>
   <MTIf name="x" op="%" value="5" eq="0">
      <MTSetVarBlock name="inuindex2"><$MTCalcRnd$></MTSetVarBlock>
      <MTSetVar name="inuindex1" value="0">
   </MTIf>
</MTIf>

<li>
<MTGetVar name="x">:
<MTIgnore>重度のアホ場合の出力</MTIgnore>
<MTIf name="ahoindex1" gt="0">
   <MTSetVar name="ahoindex1" value="10" op="+">
   <MTGetVar name="ahodata[$ahoindex1]"><br />
</MTIf>

<MTIgnore>軽度のアホ場合の出力</MTIgnore>
<MTIf name="ahoindex2" gt="0">
   <MTGetVar name="ahodata[$ahoindex2]"><br />
</MTIf>

<MTIgnore>重度の犬っぽい場合の出力</MTIgnore>
<MTIf name="inuindex1" gt="0">
   <MTSetVar name="inuindex1" value="10" op="+">
   <MTGetVar name="inudata[$inuindex1]"><br />
</MTIf>

<MTIgnore>軽度の犬っぽい場合の出力</MTIgnore>
<MTIf name="inuindex2" gt="0">
   <MTGetVar name="inudata[$inuindex2]"><br />
</MTIf>

<MTIgnore>全てのインデックスを初期化</MTIgnore>
<MTGetVar name="Init">

</li>

</MTFor>
</ul>

解説

まず、配列で、重度のアホ、軽度のアホ、重度の犬、軽度の犬のデータを10件づつ準備する。中は面倒なので適当に書いた。

次に、アホと犬のインデックスを初期化する。このインデックスの初期化は、後のForループでも使用するので、関数として使用できるように、MTSetVarTemplateタグを用いている。initという名前をGetVarすれば、中に書いてあるIndexデータが全て初期化される(=0がセットされる)仕組み。

メイン処理はForループで行う。前半はアホのインデックスと犬のインデックスの取得に集中する。このコードでは、重度(=3がつく、5がつく)のデータのほうが重視される。なお、重度では軽度が、軽度では重度のインデックスを初期化し、双方が同時に出力されないようにしている。

アホと犬は同時にインデックスを取得することができる。本当は、15,30,35のケースでは、文字列変数へ結果を連結する方式(appendモデファイアで文字列連結)にしたかったが、MT4の配列では、どうもvalueモデファイアへ配列を指定できない。

重度のアホの場合は、プアな自作プラグインが「1-10までの乱数を取得」の機能しかないため、インデックス変数へ+10している。これで11-20の乱数としている。

※もしvalueモデファイアへ配列を指定できれば、コードは更に簡素にできる。3の場合と5の場合は同じ処理を行っているので、Forループ自体を入れ子にし、外Forと内Forで同じ処理のパッキングができる。でも、これができないんだよなぁ~。惜しい

出力コードはMTIf文の横並べ。わたしはIF文の入れ子がどうも苦手で、好かん。なので細かくインデックスを与えて、合致する条件のとき結果を出力する「IF横並べ」とした。ネストが深いdivしかり、コードの見通しが悪くなるのが嫌いなのだ...。

ループ終端でMTGetVar name="Init"としてインデックスを初期化する関数をコールする。こういう使い方ができるんだのうー。こりゃ便利かも。

アホな実験だが、MT4.1のエッセンスが詰め込まれている。

貼ってみる

  • 1:
  • 2:
  • 3: [重度アホ]チップスアホィを食べるです
  • 4:
  • 5: [重度いぬ]俺の宝物の骨を
  • 6: [軽度アホ]ホホホーです
  • 7:
  • 8:
  • 9: [軽度アホ]ホホホーです
  • 10: [軽度いぬ]ワフ
  • 11:
  • 12: [軽度アホ]アホウです
  • 13: [重度アホ]うんこしていいですか
  • 14:
  • 15: [軽度アホ]あほです
    [重度いぬ]俺の宝物の骨を
  • 16:
  • 17:
  • 18: [軽度アホ]アホゥです
  • 19:
  • 20: [軽度いぬ]キャイーン
  • 21: [軽度アホ]アヒです
  • 22:
  • 23: [重度アホ]ヌコが好きですがヌコってなんですか
  • 24: [軽度アホ]あほです
  • 25: [重度いぬ]中にせみの幼虫がいたさ
  • 26:
  • 27: [軽度アホ]アヘです
  • 28:
  • 29:
  • 30: [重度アホ]今から消防署へ行きます
    [軽度いぬ]ワフ
  • 31: [重度アホ]アホウドリはお母さんです
  • 32: [重度アホ]ヌコが好きですがヌコってなんですか
  • 33: [重度アホ]本当は犬っぽくなりたかとです
  • 34: [重度アホ]今から消防署へ行きます
  • 35: [重度アホ]今から消防署へ行きます
    [重度いぬ]俺犬だけどワンとかいわねえぜ
  • 36: [重度アホ]ヌコが好きですがヌコってなんですか
  • 37: [重度アホ]アホウドリはお母さんです
  • 38: [重度アホ]ボクのおうちは山です
  • 39: [重度アホ]ヌコっぽかのもよかどですじゃけえ
  • 40: [軽度いぬ]ウルルル

トラックバック(0)

このブログ記事を参照しているブログ一覧: MT4:世界のナベアツをテンプレートタグで表現(2)

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008 yoshi(apstar)