【解決済み】変数のn桁目の値を参照して判定したい

アバター
対抗チキン
記事: 7
登録日時: 2019年8月23日(金) 01:27

【解決済み】変数のn桁目の値を参照して判定したい

投稿記事by 対抗チキン » 2020年7月27日(月) 02:30

変数に関しての質問となります。

ツクールMVでは変数の値を参照して分岐の判定などが可能ですが、
その際にn桁目の数値だけを参照して判定を行えますでしょうか。

例)
変数Xに数値「12345678」が入っていて、4桁目(千の位)の数値のみを参照して判定を行う
→12345678ではなく、5で判定する

何か方法がありましたら、よろしくお願いいたします。
最後に編集したユーザー 対抗チキン on 2020年7月31日(金) 23:08 [ 編集 1 回目 ]

アバター
たくろう
記事: 22
登録日時: 2020年7月01日(水) 18:18
連絡を取る:

Re: 変数のn桁目の値を参照して判定したい

投稿記事by たくろう » 2020年7月27日(月) 09:32

対抗チキンさん、こんにちは!

ちょっと見にくいのですが、下記のような感じで任意の桁数で条件分岐できました。

コード: 全て選択

◆変数の操作:#0001 = 12345678
◆文章:なし, ウィンドウ, 下
:  :変数1に \V[1] をセット
◆条件分岐:スクリプト:+String($gameVariables.value(1))[String($gameVariables.value(1)).length-4] >= 5
  ◆文章:なし, ウィンドウ, 下
  :  :4桁目は5以上です
  ◆
:分岐終了


+String($gameVariables.value(1))[String($gameVariables.value(1)).length-4]
が任意の桁数の数字を取得している部分です。

value(1) という感じで括弧内に入っている数字が変数番号に対応しています(2カ所あります)
「length-4」の 4 のところが参照する桁数です。

これで、やりたいこと実現できそうでしょうか??
アバター
WTR
記事: 559
登録日時: 2015年12月22日(火) 19:14

Re: 変数のn桁目の値を参照して判定したい

投稿記事by WTR » 2020年7月27日(月) 11:59

解決しそうですけど、数値演算でひねり出す方法を考えてみたので別案として書くだけ書いてみます。

千の位を取り出したいなら
1000 で割って小数点切り捨て整数化したものから、10000で割って小数点切り捨て整数化して10倍したものを引けば出せます。

たくろうさんの例と同様、変数1に判定対象の数値があるとして

コード: 全て選択

Math.floor($gameVariables.value(1)/Math.pow(10, N-1)) - Math.floor($gameVariables.value(1)/Math.pow(10, N)) * 10;


Nは取り出したい桁 N=4 なら千の位が取り出せます。
例のように変数1が 12345678 であれば、上式は 5 を返します。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
アバター
対抗チキン
記事: 7
登録日時: 2019年8月23日(金) 01:27

Re: 変数のn桁目の値を参照して判定したい

投稿記事by 対抗チキン » 2020年7月28日(火) 21:51

返信が遅れてしまい、申し訳ございません!

お二人が記載している方法で、桁の数値を取り出すことは可能ですが、
この数値をテキストに出すだけじゃなく、別の変数に代入することは可能でしょうか?
もしくは、その取り出した数値を使って判定を行いたいです…(すみません、コードがわからないので既に可能かもしれませんが…)

これができれば自分の考えていることが可能になります…!
アバター
たくろう
記事: 22
登録日時: 2020年7月01日(水) 18:18
連絡を取る:

Re: 変数のn桁目の値を参照して判定したい

投稿記事by たくろう » 2020年7月29日(水) 08:39

こんにちは!

WTRさん
なるほど! こういうアプローチもあるんですね!
元の値を計算して出すので見通しが良さそうですね!
勉強になりました!

対抗チキンさん
> この数値をテキストに出すだけじゃなく、別の変数に代入することは可能でしょうか?
可能です!
イベントコマンドで
変数の操作>変数[単独:代入したい変数]>操作[代入]>スクリプト
のところに
私の内容か、WTRさんの内容を記載すればOKです。

▽変数1の4桁目を参照する
スクリプト【+String($gameVariables.value(1))[String($gameVariables.value(1)).length-4]】
もしくは
スクリプト【Math.floor($gameVariables.value(1)/Math.pow(10, 4-1)) - Math.floor($gameVariables.value(1)/Math.pow(10, 4)) * 10;】


> その取り出した数値を使って判定を行いたいです
一つ目の返信で実は実施しています!
条件分岐のタブ4ページ目、スクリプトのところに上記の値を参照するスクリプトを指定することで、判定に利用していました!

==============================
上に記載した方法で実行できるのですが……
やや分かりづらいのと、自分も同様の処理をしたいことが出てきそうだったので
プラグインを作成してみました!

VariableDigitsHandler.js
指定した変数の指定した桁に対して、参照したり計算したりするプラグインです。

イベントコマンド「プラグインコマンド」から実行するものです。

 変数1の3桁目を参照し、変数10に代入
 VDH_CTD 参照 1 3 10

こんな感じです!
詳細はプラグイン内のヘルプを見てみてください。

これでやりたいこと実現できそうでしょうか??
添付ファイル
VariableDigitsHandler.js
指定した変数の指定した桁に対して、参照したり計算したりするプラグイン
(13.33 KiB) ダウンロード数: 62 回
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: 変数のn桁目の値を参照して判定したい

投稿記事by 奏ねこま » 2020年7月29日(水) 20:14

なんか面白そうだったので便乗して別解を提案してみます。
「$gameVariables.value()」を1回だけ書くやり方。

■提案1:「4桁目」の数字を取得

+String($gameVariables.value(1)).slice(-4)[0]

※マイナス値で指定している点に注意

■提案2:「1000の位」の数字を取得

Math.floor($gameVariables.value(1) / 1000 % 10)

※「% 10」は取得する位置に関係なくそのままで
アバター
対抗チキン
記事: 7
登録日時: 2019年8月23日(金) 01:27

Re: 変数のn桁目の値を参照して判定したい

投稿記事by 対抗チキン » 2020年7月29日(水) 20:47

たくろうさんありがとうございます!
大変詳しく書いてくださっているので、とてもイベントコマンドとスクリプトの使い方の勉強になります…!

しかもかなり使いやすいプラグインまで…!
これを使えば自分のやりたいことが実現できると思います!
本当にありがとうございます!

奏ねこまさんの別解などを見るに、様々な方法があるんですね…
こういうの、質問するだけじゃなくて自分で考えてみるのも面白そうですね。
皆さん本当にありがとうございました~!
アバター
たくろう
記事: 22
登録日時: 2020年7月01日(水) 18:18
連絡を取る:

Re: 変数のn桁目の値を参照して判定したい

投稿記事by たくろう » 2020年7月30日(木) 12:16

奏ねこまさん
スマート! すっきり書けてよいですね!
これを知っていたらもう少し見通しよくプラグイン作成できたかもですね…
知らないとどうしても遠回りになってしまうので、勉強になります!

対抗チキンさん
やりたいこと実現できそうでよかったです!
プラグインも役立ちそうで一安心です。
私もさらに精進できればと思います~!

“MV:質問” へ戻る