RPGツクール2000/システム
数値入力型パスワード
■岩ゴロのパスワード
(更新:2007/05/26)


気紛れな空間で公開中の岩ゴロ迷路2のパスワードの構造を紹介します。
少々複雑なイベントの処理を行う必要がありますので、
完全にパスワードの構造を理解した上でご利用ください。

YADOTで紹介している名前入力型パスワードや、
数値入力型パスワードと大きく異なる点は、
パスワードの中にスイッチのON/OFFなどの情報を組み込む所です。
例えば、マルチストーリーのゲームでパスワードを入力して始めると、
既にクリアーしたストーリーにはならない状態でゲームを始める事ができます。

このパスワードシステムでは、ある程度の複雑なパスワードを作る事はできますが、
ツクールの上級者ならパスワードのシステムを解析する事もできるでしょう。
解析不可能なパスワードと言う訳ではありませんので、
これを踏まえた上でご利用ください。



☆パスワードの数値を作る基本
岩ゴロの2つのパスワードには、
記録などの情報を一緒に組み込んでパスワードを作成しています。

3つのスイッチのON/OFF情報を記憶する場合は、
スイッチ0001がONの時には「+1」
スイッチ0002がONの時には「+2」
スイッチ0003がONの時には「+4」

と言った感じに、スイッチがONになっているものに対して、
スイッチごとに割り振りました数値を加算してパスワードを作っていきます。
加算する数値は「+1」「+2」「+4」「+8」と2倍の数値を加算します。
このように2倍の数値を加算する事で、その数値の組み合わせによって、
どのスイッチがONになっているのかを判断する事ができます。

例えば、上の条件でスイッチ0001番とスイッチ0003番がONの場合は、
パスワードの数値は「5」となります。
もしもプレイヤーが入力した数値が「3」の場合は、
スイッチ0001番とスイッチ0002番がONであると分かります。



☆パスワードが正しいかどうかを判断する基本
岩ゴロのパスワードでは、
2つのパスワードを適当に入力してもパスワードが合わない事が多くあります。
これは2つのパスワードの中に同じ情報を記憶していて、
両方が持つ情報が一致しないと、パスワードが正しくないと判断されるからです。

例えば、スイッチ0001番がONの時に、
パスワードAは「+8」として、
パスワードBは「+32」とした場合は、
パスワードA=0 パスワードB=0  →スイッチ0001番はOFF
パスワードA=8 パスワードB=32 →スイッチ0001番はON

と言った組み合わせでパスワードを判断する事ができ、
パスワードA=8 パスワードB=0
みたいに、2つの情報が一致しない場合には、
パスワードが正しくないと判断する事ができます。


パスワードの数値は、
常にスイッチがONの時にパスワードの数値を増やす必要はありません。
スイッチがOFFの時に数値を増やす設定も組み込めます。
こうする事でより複雑なパスワードを作る事ができます。

例えば、スイッチ0001番がONの場合は、パスワードAを「+8」として、
スイッチ0001番がOFFの場合は、パスワードBを「+32」とした場合は、
パスワードA=0 パスワードB=32 →スイッチ0001番はOFF
パスワードA=8 パスワードB=0  →スイッチ0001番はON

と言った組み合わせでパスワードを判断する事ができ、
これ以外のパターンでパスワードを入力した場合には、
パスワードが正しくないと判断する事ができます。



☆変数などの数値をパスワード化
所持金や大事なアイテムの所有数など、
何らかの数値をパスワードへ組み込む事もできます。
しかし2つのパスワードで記憶できる数値はかなり限られてしまいます。
もしもたくさんの数値情報をパスワードで記憶する場合は、
それに合わせてたくさんのパスワードを入力する必要があります。

今回は所持金の情報を2つのパスワードへ保存するシステムを作ります。
所持金は6桁の数値で構成されています。
1つのパスワードとして設定できる数値も6桁なので、簡単な方法としては、
所持金の6桁をそのままパスワードの6桁の数値にする方法です。
しかし、所持金が「347」でパスワードが「000347」では、
プレイヤーは簡単にパスワードの構造を理解する事ができ、
簡単に所持金を増やしてしまうかもしれません。

このような場合は、所持金の数値を位ごとに分散化させると良いでしょう。
もしも所持金が「987654」の場合は、
476958」と位の位置を変える感じです。
さらに、ある桁の数値に「-9」を減算して、
値を変化させてしまう方法も良いでしょう。
千の位で実行した場合は、「7 減算 -9」となり「2」と言う数値になります。
万の位で実行した場合は、「8 減算 -9」となり「1」と言う数値になります。
この方法は、2桁を合体させてから「-99」を減算する方法でも使えます。
あと、2つの桁を合体させてから「33」や「77」などを加算して、
100以上の数値になりましたら、「減算100」を行って、
数値の全体をずらす方法もあります。
一の位百の位を合体させた「46」に、
「加算33(100以上になったら100減算)」を行いますと、
79」と言う数値になります。
十万の位と十の位を合体させた「95」に、
「加算77(100以上になったら100減算)」を行いますと、
「72」と言う数値になります。
このような数値の変換処理を行いますと、
所持金の数値「987654」が「729721」と言ったパスワード用の数値に変化します。

2つ目のパスワードBを作る場合は、
位の移動位置や加算・減算を行う内容を変える事で、
パスワードAと同じ情報を持つパスワードBを作る事ができるでしょう。
例えば、パスワードAは「729721」になり、
パスワードBは「612803」と同じ情報を持っていて、
全く異なるパスワードの数値を作る事ができるでしょう。
当然ながら、パスワードAで「729721」を入力した場合は、
パスワードBでは「612803」を入力しなければいけません。
2つのパスワードが一致する確率は、100万分の1となりますので、
適当にパスワードを入力しても、中々パスワードが一致する事はないでしょう。
このような構造で岩ゴロのパスワードも作られているので、
適当にパスワードを入力しても、中々パスワードが一致しません。



☆パスワードシステムを作る
1桁の数値と2つのスイッチの情報を記憶した2桁×2個のパスワードを作成します。

スイッチと変数の値によって、以下の表のようにパスワードの値を変化させます。
  ON(数値がある) OFF(数値がない)
スイッチ0001番 パスワードA:+4 パスワードB:+2
スイッチ0002番 パスワードA:+32 パスワードB:+1
数値が+8 パスワードB:+8 パスワードA:+16
数値が+4 パスワードA:+1 パスワードB:+4
数値が+2 パスワードB:+16 パスワードA:+8
数値が+1 パスワードA:+2 パスワードB:+32

例えば、
スイッチ0001番:ON
スイッチ0002番:OFF
変数の値:6

の場合は、以下のようになります。
  ON(数値がある) OFF(数値がない)
スイッチ0001番 パスワードA:+4  
スイッチ0002番   パスワードB:+1
数値が+8   パスワードA:+16
数値が+4 パスワードA:+1  
数値が+2 パスワードB:+16  
数値が+1   パスワードB:+32
この場合は、
パスワードAが「21」
パスワードBが「49」

となります。


パスワードを表示するイベントを作成します。
■パスワードの表示
◆変数の操作:[0002:パスワードA]代入,0
◆変数の操作:[0003:パスワードB]代入,0
◆条件分岐:スイッチ[0001:スイッチ01]がON
 ◆変数の操作:[0002:パスワードA]加算,4
 ◆
:それ以外の場合<スイッチ[0001]がOFF
 ◆変数の操作:[0003:パスワードB]加算,2
 ◆
:分岐終了
◆条件分岐:スイッチ[0002:スイッチ02]がON
 ◆変数の操作:[0002:パスワードA]加算,32
 ◆
:それ以外の場合<スイッチ[0002]がOFF
 ◆変数の操作:[0003:パスワードB]加算,1
 ◆
:分岐終了
◆変数の操作:[0004:数値のコピー]代入,変数[0001]の値
◆条件分岐:変数[0004:数値のコピー]が8以上
 ◆変数の操作:[0004:数値のコピー]減算,8
 ◆変数の操作:[0003:パスワードB]加算,8
 ◆
:それ以外の場合<変数[0004]が8未満
 ◆変数の操作:[0002:パスワードA]加算,16
 ◆
:分岐終了
◆条件分岐:変数[0004:数値のコピー]が4以上
 ◆変数の操作:[0004:数値のコピー]減算,4
 ◆変数の操作:[0002:パスワードA]加算,1
 ◆
:それ以外の場合<変数[0004]が4未満
 ◆変数の操作:[0003:パスワードB]加算,4
 ◆
:分岐終了
◆条件分岐:変数[0004:数値のコピー]が2以上
 ◆変数の操作:[0004:数値のコピー]減算,2
 ◆変数の操作:[0003:パスワードB]加算,16
 ◆
:それ以外の場合<変数[0004]が2未満
 ◆変数の操作:[0002:パスワードA]加算,8
 ◆
:分岐終了
◆条件分岐:変数[0004:数値のコピー]が1以上
 ◆変数の操作:[0002:パスワードA]加算,2
 ◆
:それ以外の場合<変数[0004]が0
 ◆変数の操作:[0003:パスワードB]加算,32
 ◆
:分岐終了
◆条件分岐:変数[0002:パスワードA]が10以上
 ◆条件分岐:変数[0003:パスワードB]が10以上
  ◆文章:パスワードA:\V[2]
  :  :パスワードB:\V[3]
  ◆
 :それ以外の場合<変数[0003]が9以下
  ◆文章:パスワードA:\V[2]
  :  :パスワードB:0\V[3]
  ◆
 :分岐終了
 ◆
:それ以外の場合<変数[0002]が9以下
 ◆条件分岐:変数[0003:パスワードB]が10以上
  ◆文章:パスワードA:0\V[2]
  :  :パスワードB:\V[3]
  ◆
 :それ以外の場合<変数[0003]が9以下
  ◆文章:パスワードA:0\V[2]
  :  :パスワードB:0\V[3]
  ◆
 :分岐終了
 ◆
:分岐終了



パスワードを入力するイベントを作成します。
2つのパスワードが一致しているかどうか確認は、
パスワードAの情報を基にパスワードBのパスワード数値を作成して確認します。
2つのパスワードが合っていた場合は、
パスワードBの情報を基に数値やスイッチの設定を行います。
■パスワードの表示
◆文章:パスワードAを入力してください。
◆数値入力の処理:2桁,[0002:パスワードA]
◆文章:パスワードBを入力してください。
◆数値入力の処理:2桁,[0003:パスワードB]
◆条件分岐:変数[0002:パスワードA]が64以上<64以上にはならないので、パスワード不一致
 ◆文章:パスワードが一致しません。
 ◆イベント処理の中断
 ◆
:分岐終了
◆条件分岐:変数[0003:パスワードB]が64以上<64以上にはならないので、パスワード不一致
 ◆文章:パスワードが一致しません。
 ◆イベント処理の中断
 ◆
:分岐終了
◆注釈:パスワードAの情報を変数の値に変換します
◆変数の操作:[0005:一致確認]代入,0
◆条件分岐:変数[0002:パスワードA]が32以上
 ◆変数の操作:[0002:パスワードA]減算,32
 ◆
:それ以外の場合<変数[0002]が32未満
 ◆変数の操作:[0005:一致確認]加算,1
 ◆
:分岐終了
◆条件分岐:変数[0002:パスワードA]が16以上
 ◆変数の操作:[0002:パスワードA]減算,16
 ◆
:それ以外の場合<変数[0002]が16未満
 ◆変数の操作:[0005:一致確認]加算,8
 ◆
:分岐終了
◆条件分岐:変数[0002:パスワードA]が8以上
 ◆変数の操作:[0002:パスワードA]減算,8
 ◆
:それ以外の場合<変数[0002]が8未満
 ◆変数の操作:[0005:一致確認]加算,16
 ◆
:分岐終了
◆条件分岐:変数[0002:パスワードA]が4以上
 ◆変数の操作:[0002:パスワードA]減算,4
 ◆
:それ以外の場合<変数[0002]が4未満
 ◆変数の操作:[0005:一致確認]加算,2
 ◆
:分岐終了
◆条件分岐:変数[0002:パスワードA]が2以上
 ◆変数の操作:[0002:パスワードA]減算,2
 ◆
:それ以外の場合<変数[0002]が2未満
 ◆変数の操作:[0005:一致確認]加算,32
 ◆
:分岐終了
◆条件分岐:変数[0002:パスワードA]が0
 ◆変数の操作:[0005:一致確認]加算,4
 ◆
:分岐終了
◆注釈:2つのパスワードの情報が一致するかどうかを調べる
◆条件分岐:変数[0005:一致確認]がV[0003]以外
 ◆文章:パスワードが一致しません。
 ◆イベント処理の中断
 ◆
:分岐終了
◆注釈:パスワードBの情報を基にスイッチと変数の設定を変える
◆スイッチの操作:[0001:スイッチ01]をOFFにする
◆スイッチの操作:[0002:スイッチ02]をOFFにする
◆変数の操作:[0001:数値]代入,0
◆条件分岐:変数[0003:パスワードB]が32以上
 ◆変数の操作:[0003:パスワードB]減算,32
 ◆
:それ以外の場合<変数[0003]が32未満
 ◆変数の操作:[0001:数値]加算,1
 ◆
:分岐終了
◆条件分岐:変数[0003:パスワードB]が16以上
 ◆変数の操作:[0003:パスワードB]減算,16
 ◆変数の操作:[0001:数値]加算,2
 ◆
:分岐終了
◆条件分岐:変数[0003:パスワードB]が8以上
 ◆変数の操作:[0003:パスワードB]減算,8
 ◆変数の操作:[0001:数値]加算,8
 ◆
:分岐終了
◆条件分岐:変数[0003:パスワードB]が4以上
 ◆変数の操作:[0003:パスワードB]減算,4
 ◆
:それ以外の場合<変数[0003]が4未満
 ◆変数の操作:[0001:数値]加算,4
 ◆
:分岐終了
◆条件分岐:変数[0003:パスワードB]が2以上
 ◆変数の操作:[0003:パスワードB]減算,2
 ◆
:それ以外の場合<変数[0003]が2未満
 ◆スイッチの操作:[0001:スイッチ01]をONにする
 ◆
:分岐終了
◆条件分岐:変数[0003:パスワードB]が0
 ◆スイッチの操作:[0002:スイッチ02]をONにする
 ◆
:分岐終了


これで設定完了です。
応用次第では、4桁×1個のパスワードにする事もできるでしょう。



☆補足
今回はイベントコマンド:数値入力の処理を使ってパスワードを入力していますが、
例えば自作メニューでアルファベットのパスワード入力ができるようにすれば、
かなり大きい情報をパスワードとして記憶する事ができます。



◎関連ページ
 ●数値入力型パスワード
 ○岩ゴロのパスワード

 ●名前入力型パスワード
 ●ダイヤル式の南京錠

 ●イベントコマンド:数値入力の処理
 ●イベントコマンド:変数の操作


YADOTトップ  このサイトは何?  気紛れな空間へ戻る  メール