2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TyranoScriptで、複数単語からランダムに1つ選んで表示する

Last updated at Posted at 2021-02-07

対象

対象読者は、TyranoScript初学者です。
V5で動作確認しました。

経緯

探して見つからなかったので、テクニックサンプルを参考に作りました。
マクロで実現しています。
即席なので改善の余地があると思います。

マクロ定義

macro
;rand word
  ;一時変数tf.randwordに結果が格納されます
  ;var属性に変数名を指定するとそこにも結果を格納できますvar属性は省略可能です
  ;使用例今日は[randword a="'赤','緑','青'" var="f.tobira"]の扉を選ぶぜ選んだ扉は[emb exp="f.tobira"]
  [macro name="randword"]
    [iscript]
    var max   = eval("tf.a = [" + mp.a + "]; tf.a.length - 1")
    var min   = 0
    max = Number(max)
    min = Number(min)
    var rand    = min + Math.floor(Math.random() * (max - min + 1))
    tf.randword = tf.a[rand]
    if (mp['var']) eval(mp['var'] + ' = "' + tf.randword + '"')
    [endscript]
    [emb exp="tf.randword"]
    [endmacro]

使用例

上記マクロ定義をfirst.ks等で実行し、

sample
今日は[randword a="'赤','緑','青'" var="f.tobira"]の扉を選ぶぜ[r]

;一時変数tf.randwordに結果が格納されます
[emb exp="tf.randword"]の扉を選ぶだって[r]

; var属性に変数名を指定すると結果を格納できますvar属性は省略可能です
選んだ扉は[emb exp="f.tobira"][r]

を実行します。

補足

長い文章をランダムで選ぶ場合、複数行に書いたほうが読みやすいことがあります。
複数行に書きたい場合、変数を経由する手があります。

sample2
[eval exp="tf.a0='燃え盛る太陽のような、何よりも熱く眩しく輝く赤'"]
[eval exp="tf.a1='生い茂った森林のような、どこまでも深く豊かな緑'"]
[eval exp="tf.a2='果てしない大空のような、雄大に澄み切った青'"]
今日は[randword a="tf.a0,tf.a1,tf.a2" var="f.tobira"]の扉を選ぶぜ選んだ扉は[emb exp="f.tobira"]

備忘

まず以下を作成しました。のち、それをマクロ化し、機能の追加を行いました。

getrandname_sample
;公式テクニックサンプル2の getrandname を使い
;複数単語からランダムに1つ選んで表示する
;公式テクニックサンプル2 https://tyrano.jp/sample/sample2

[getrandname name="tf.a[{R}]" min="0" max="& tf.a = ['赤','緑','青'];tf.a.length - 1"]

今日は[emb exp="& tf.randname"]の扉を選ぶぜ

参考

ティラノスクリプト公式 テクニックサンプル集②

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?