オイナルメモ帖

ウディタやドット絵、東方その他のメモ。更新が無い製作途中記事については「あ、エターなったんだな」とお察しください。
オイナルメモ帖 TOP  >  スポンサー広告 >  雑記  >  ウディタ テクニック >  文字列をビット数っぽく扱う

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


web拍手 by FC2
[ --年--月--日 --:-- ] カテゴリ:スポンサー広告 | TB(-) | CM(-)

文字列をビット数っぽく扱う

ウディタ2.02で「文字列操作→指定文字まで切り出し・指定文字以降を切り出し」が追加されました。文字列を扱うコモンイベントを使っている方には歓喜なわけで、これを使えば更にtxtをデータとして扱いやすくなります。ですが、他になんか面白い使い方ないかなぁと考えていたら思いついたのでここに書いておきます。

※2進数をあまり使わない方向で解説していますが、コモンイベント引用部分はビット数の使い方を書くためにあえて使用しています。


長いので追記で。

web拍手 by FC2



まずはビット数の解説。

例えば、ウディタでビット数といえば、状態異常に使われています。
状態異常は、そのステータスにかかっている(1=YES)か、かかっていない(0=NO)か、という二択なので、ビット数が非常に役に立つわけです。


問.
3ケタまで扱える変数Aがあるとしましょう。
主人公が状態異常にかかっていない健康な時、変数Aの中身は[000]です。
毒にかかったとき、1ケタ目が1になるとします。[001]
睡眠の時は、2ケタ目が1。[010]
麻痺している時は、3ケタ目が1。[100]
では、全部(毒・睡眠・麻痺)の時はどうでしょうか?


答.[111]


逆に数字から判断するときは、[011]の時は(毒・睡眠)で、[101]の時は(毒・麻痺)となります。
ビット数と状態異常の関係はだいたいこんなかんじです。
実際には10進数ではなく2進数なので、[111]は百十一(111)じゃなくて七(7)なんですけど、細けぇことはどうでもいいんだよ。


さて、ここからが本題です。
この動作を文字列でやってみようというのがこの企画です。


まずは、上の問いのような状態異常とビット数の関係をコモンイベントで組んでみます。

▼ 状態異常を付与したり消したり
■文章選択肢:/ 【1】毒 / 【2】睡眠 / 【3】麻痺
-◇選択肢:【1】 毒 の場合↓
|■条件分岐(変数): 【1】CSelf10[ステータス] が 1のビットを満たす
|-◇分岐: 【1】 [ CSelf10[ステータス] が 1のビットを満たす ]の場合↓
||■変数操作: CSelf10[ステータス] -= 1 + 0
||■
|-◇上記以外
||■変数操作: CSelf10[ステータス] += 1 + 0
||■
|◇分岐終了◇
|■
-◇選択肢:【2】 睡眠 の場合↓
|■条件分岐(変数): 【1】CSelf10[ステータス] が 2のビットを満たす
|-◇分岐: 【1】 [ CSelf10[ステータス] が 2のビットを満たす ]の場合↓
||■変数操作: CSelf10[ステータス] -= 2 + 0
||■
|-◇上記以外
||■変数操作: CSelf10[ステータス] += 2 + 0
||■
|◇分岐終了◇
|■
-◇選択肢:【3】 麻痺 の場合↓
|■条件分岐(変数): 【1】CSelf10[ステータス] が 4のビットを満たす
|-◇分岐: 【1】 [ CSelf10[ステータス] が 4のビットを満たす ]の場合↓
||■変数操作: CSelf10[ステータス] -= 4 + 0
||■
|-◇上記以外
||■変数操作: CSelf10[ステータス] += 4 + 0
||■
|◇分岐終了◇
|■
-◇キャンセルの場合
|■
◇分岐終了◇


▼ CSelf10を見て、どんな状態異常にかかっているかを教える
■文字列操作:CSelf5[ステータス(文字列)] = ""
■条件分岐(変数): 【1】CSelf10[ステータス] が 1のビットを満たす
-◇分岐: 【1】 [ CSelf10[ステータス] が 1のビットを満たす ]の場合↓
|■文字列操作:CSelf5[ステータス(文字列)] += "毒"
|■
◇分岐終了◇
■条件分岐(変数): 【1】CSelf10[ステータス] が 2のビットを満たす
-◇分岐: 【1】 [ CSelf10[ステータス] が 2のビットを満たす ]の場合↓
|■文字列操作:CSelf5[ステータス(文字列)] += "睡眠"
|■
◇分岐終了◇
■条件分岐(変数): 【1】CSelf10[ステータス] が 4のビットを満たす
-◇分岐: 【1】 [ CSelf10[ステータス] が 4のビットを満たす ]の場合↓
|■文字列操作:CSelf5[ステータス(文字列)] += "麻痺"
|■
◇分岐終了◇
■文章:お前は、「\cself[5]」にかかっている。


実行すると、3つ状態異常の選択肢が出て、選んだ選択肢の状態異常フラグがついたり消えたりします。
最後の文章表示でどの状態異常にかかっているのかを教えています。
※ビット数の使い方の説明上、あえて2進数を使っています。
 わからない人は、その状態異常のスイッチをOnOffしているのだと思ってください。



続いて、これを文字列によって再現したのがこれです。

▼ 状態異常を付与したり消したり
■文章選択肢:/ 【1】毒 / 【2】睡眠 / 【3】麻痺
-◇選択肢:【1】 毒 の場合↓
|■条件分岐(文字): 【1】このコモンEvセルフ変数9 が"<毒>" を含む
|-◇分岐: 【1】 [ このコモンEvセルフ変数9 が"<毒>" を含む ]の場合↓
||■文字列操作:CSelf7 = CSelf9[ステータス]
||■文字列操作:CSelf8 = CSelf9[ステータス]
||■文字列操作:CSelf7 =<から指定文字まで切り出し> "<毒>"
||■文字列操作:CSelf8 =<の指定文字以降を切り出し> "<毒>"
||■文字列操作:CSelf9[ステータス] = "\cself[7]\cself[8]"
||■
|-◇上記以外
||■文字列操作:CSelf9[ステータス] += "<毒>"
||■
|◇分岐終了◇
|■
-◇選択肢:【2】 睡眠 の場合↓
|■条件分岐(文字): 【1】このコモンEvセルフ変数9 が"<睡眠>" を含む
|-◇分岐: 【1】 [ このコモンEvセルフ変数9 が"<睡眠>" を含む ]の場合↓
||■文字列操作:CSelf7 = CSelf9[ステータス]
||■文字列操作:CSelf8 = CSelf9[ステータス]
||■文字列操作:CSelf7 =<から指定文字まで切り出し> "<睡眠>"
||■文字列操作:CSelf8 =<の指定文字以降を切り出し> "<睡眠>"
||■文字列操作:CSelf9[ステータス] = "\cself[7]\cself[8]"
||■
|-◇上記以外
||■文字列操作:CSelf9[ステータス] += "<睡眠>"
||■
|◇分岐終了◇
|■
-◇選択肢:【3】 麻痺 の場合↓
|■条件分岐(文字): 【1】このコモンEvセルフ変数9 が"<麻痺>" を含む
|-◇分岐: 【1】 [ このコモンEvセルフ変数9 が"<麻痺>" を含む ]の場合↓
||■文字列操作:CSelf7 = CSelf9[ステータス]
||■文字列操作:CSelf8 = CSelf9[ステータス]
||■文字列操作:CSelf7 =<から指定文字まで切り出し> "<麻痺>"
||■文字列操作:CSelf8 =<の指定文字以降を切り出し> "<麻痺>"
||■文字列操作:CSelf9[ステータス] = "\cself[7]\cself[8]"
||■
|-◇上記以外
||■文字列操作:CSelf9[ステータス] += "<麻痺>"
||■
|◇分岐終了◇
|■
-◇キャンセルの場合
|■
◇分岐終了◇


▼ 文字列を見て、どんな状態異常にかかっているか教える
■文字列操作:CSelf5[ステータス(文字列)] = ""
■条件分岐(文字): 【1】このコモンEvセルフ変数9 が"<毒>" を含む
-◇分岐: 【1】 [ このコモンEvセルフ変数9 が"<毒>" を含む ]の場合↓
|■文字列操作:CSelf5[ステータス(文字列)] += "毒"
|■
◇分岐終了◇
■条件分岐(文字): 【1】このコモンEvセルフ変数9 が"<睡眠>" を含む
-◇分岐: 【1】 [ このコモンEvセルフ変数9 が"<睡眠>" を含む ]の場合↓
|■文字列操作:CSelf5[ステータス(文字列)] += "睡眠"
|■
◇分岐終了◇
■条件分岐(文字): 【1】このコモンEvセルフ変数9 が"<麻痺>" を含む
-◇分岐: 【1】 [ このコモンEvセルフ変数9 が"<麻痺>" を含む ]の場合↓
|■文字列操作:CSelf5[ステータス(文字列)] += "麻痺"
|■
◇分岐終了◇
■文章:お前は、「\cself[5]」にかかっている。


やってることは同じなので解説はしませんが、
「~のビットを満たす」の代わりに「~を含む」で分岐、ビット数の減算の代わりにその文字以外の文字を切り出してコピーすることで代用しています。


ビット数と比べると、状態異常の中身が何なのかパッと見でわかりやすい点が長所といえるでしょう。
わざわざ新しい文字列に入れる必要なく中身をそのまま表示させることができますし。
ただし、ビット数は「3のビットを満たす」とした時、1と2のビットをまとめて満たした場合の分岐を作れますが、この文字列型は2回に分けて分岐しなければなりません。
更に言えば、ビット数と比べると動作が増えているのでめんどくささは否めません。



結論:ビット数を勉強しよう。
[ 2012年07月23日 20:14 ] カテゴリ:ウディタ テクニック | TB(0) | CM(0)
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

Web拍手
web拍手 by FC2
アクセス数
プロフィール

jeekza

Author:jeekza
ウディタでなんか作ったり作らなかったり、気まぐれでドット打ったり。
東方が好き。
Twitter
dotllect
pixiv
ask.fm

年月別アーカイブ
リンク
当サイトはリンクフリーです。
バナーはまだ無いですが……。


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。