変数に乱数代入

354 views
Skip to first unread message

ランブル

unread,
Oct 31, 2013, 1:36:15 PM10/31/13
to almi...@googlegroups.com
一時変数に乱数を代入するには、どうすればいいんでしょうか?

吉里吉里なら簡単に出来るんですが、
javaは まったく解らないので、やり方が分かりません。

ゲームを作る上で基本となる事柄だと思うので、
チュートリアルなどに載せておいて欲しいです。

hikou...@gmail.com

unread,
Oct 31, 2013, 9:13:17 PM10/31/13
to almi...@googlegroups.com

@eval exp="tf.ransuu = intrandom(0, 5)

↑吉里吉里みたいにやってみたら、tf.ransuuに0~5の実数がランダムにはいるんですが、こういうことではないんですか?

Almightサポート sugihara

unread,
Oct 31, 2013, 9:25:07 PM10/31/13
to almi...@googlegroups.com
チュートリアルに記載しておりませんでしたが、
Almightでも吉里吉里と同様にintrandomを使用することができます。
こちらに関しましてはチュートリアルに説明を記載するように致します。

intrandom(min,max)という形で数値の範囲を指定して乱数を作ることができますので、
以下のように書いて頂ければ一時変数に乱数を代入することが可能です。

// 一時変数testに0~3の乱数を代入します
[eval exp="tf.test = intrandom(0,3)"]

ランブル

unread,
Nov 1, 2013, 11:26:57 AM11/1/13
to almi...@googlegroups.com
同じ方法で使用できたんですね。
出来ないものと判断して、Javaのサイトを見ながら悪戦苦闘していたんですが、
そのまま出来るなら嬉しいです。

お二方、ありがとうございます。

ランブル

unread,
Nov 1, 2013, 12:17:31 PM11/1/13
to almi...@googlegroups.com
すいません、もう一つ質問させてもらいます。

変数に「空」を代入するには どうすれば良いのでしょうか?

embタグで
何か文字や数字が代入されている場合のみ文字を出して
何も代入されなかった場合は空白にしたいんです。
変数自体は、何度も代入&空白を繰り返します。

吉里吉里では「void」を代入すればうまくいったんですが、
Almightではエラーが出ます。

ランブル

unread,
Nov 2, 2013, 1:57:27 PM11/2/13
to almi...@googlegroups.com
空白は「void」の代わりに[]を置けば解決しました(おそらく)。

しかし他に分からない部分が出てきました。

成功率を表示するのに吉里吉里では
[emb exp="'%2.3f'.sprintf(f.suc)"] と書いていたんですが、
当然almightの方では表示されません。

javaのサイトなどを見ると
sprintfの代わりにstring.formatが使えると書いていたので
代わりに置いてみましたが無理でした。

javaに関しては基本も何も解らないので、
どうすればうまく表示されるか教えていただけますでしょうか。

あと、演算子の¥は使用可能ですか?
計算結果をembで表示しようとすると「true」と出て表示されません。

Almightサポート sugihara

unread,
Nov 4, 2013, 10:31:18 PM11/4/13
to almi...@googlegroups.com
変数に「空」を入れ、空文字として扱いたい場合は、
[eval exp="f.hensu = ''"]という風に''を代入していただければ動作すると思います。
ですが、申し訳ありませんがembタグで空文字を表示する際に、
文字速度が最速でない場合にのみエラーがでることが判明致しました。

お手数ですが、if文かcond属性で、変数に''が代入されている場合は文字を表示しないようにして頂けますでしょうか。

// f.hensuの中身が''でない場合だけ実行されます
[emb exp="f.hensu" cond="f.hensu!=''"]

ご迷惑かと存じますが、よろしくお願い親します。


また、成功率を表示するために[emb exp="'%2.3f'.sprintf(f.suc)"]と書いていらっしゃいますが、
AlmightはJjavaScriptを使用することはできますが、Javaは使用できません。
JavaScriptとJavaは別物ですのでご注意下さい。

どうしてもsprintfを使用したい場合は、下記URLの中身をコピーし、iscriptとendscriptの間にペーストで、
記述していただければ使用可能になると思われますので、こちらで対応して頂ければ幸いです。

[iscript]
function sprintf() {
var argv = sprintf.arguments;
var argc = argv.length;

~中略~

return str;
}
[endscript]

embタグでsprintfを使う場合は以下のように書けば使用可能かと思われます。
[emb exp="sprintf('%2.3f', f.suc)"]


iscriptでsprintfを使用する場合は、Almightでサポートしているわけではございませんので、その点はご了承下さい。

ランブル

unread,
Nov 6, 2013, 10:43:00 AM11/6/13
to almi...@googlegroups.com
丁寧な解説、ありがとうございます。
試してみましたら、うまく表示されました。

すいませんが、もう一つ質問です。

演算子の\と%を使用していたんですけど、
%を使用した計算結果は問題なく表示されますが
\を使用した計算結果を表示しようとするとエラーが出ます。

\は使用出来ないんでしょうか?

ランブル

unread,
Nov 6, 2013, 10:44:53 AM11/6/13
to almi...@googlegroups.com
上のレスの「\」は¥の半角です。

Almightサポート sugihara

unread,
Nov 6, 2013, 8:00:40 PM11/6/13
to almi...@googlegroups.com
演算子に「\」は使用できません。
ご了承ください。

もし、「\」で計算した場合の計算結果は、小数点以下を切り捨てるということであれば、
「~~ 」や「Math.floor()」を使うことで実現可能かと思われます。

使用例:

// 計算結果は3になります。
1 + ~~2.222 

// 計算結果は2になります。
~~(9/4)

// 計算結果は3になります。
Math.floor(1+2.222);

// 計算結果は2になります。
Math.floor(9/4);

ランブル

unread,
Nov 13, 2013, 10:15:07 AM11/13/13
to almi...@googlegroups.com
言われるとおり、Math.floorを使えば上手くいきました。
ありがとうございます。
Reply all
Reply to author
Forward
0 new messages