やたらと非効率に自作ゲームを作っていくブログ

スポンサーサイト

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

任意の区間、任意の個数の重複しない数字の並びを作るコモン

たまには真面目にウディタ触ってるんだぜアピール
「任意の区間、任意の個数の重複しない数字の並びを作るコモン」なるものを作ったので公開です。
かなり汎用性の高いコモンだとおもいます。

▼ 設定値 セルフ0~2は引数で設定する
■変数操作: CSelf0[最小値]
■変数操作: CSelf1[最大値]
■変数操作: CSelf2[生成する個数]

▼ 処理ここから
▼ 初期化
■文字列操作:CSelf6[返し値] = ""
■変数操作: CSelf10[格納した数字の個数] = 0 + 0
▼ ループ開始
■ループ開始
|▼ 乱数生成
|■変数操作: CSelf11[乱数] = CSelf0[最小値] ~ CSelf1[最大値]
|▼ 一時文字列へ入れる。+は誤判定を防ぐためにいれている(何の文字でも良い)
|■文字列操作:CSelf5[一時文字列] = "+\cself[11],"
|■条件分岐(文字): 【1】このコモンEvセルフ変数6 がCSelf5[一時文字列] を含む
|-◇分岐: 【1】 [ このコモンEvセルフ変数6 がCSelf5[一時文字列] を含む ]の場合↓
| |■ループ開始へ戻る
| |■
|◇分岐終了◇
|▼ 重複していない数字になっているので格納する
|■文字列操作:CSelf6[返し値] += 位置[CSelf5[一時文字列]]の文字列
|▼ 数字の個数カウント
|■変数操作: CSelf10[格納した数字の個数] += 1 + 0
|■条件分岐(変数): 【1】CSelf10[格納した数字の個数] が CSelf2[生成する個数]と同じ
|-◇分岐: 【1】 [ CSelf10[格納した数字の個数] が CSelf2[生成する個数]と同じ ]の場合↓
| |▼ 個数に達したので終了
| |■ループ中断
| |■
|◇分岐終了◇
|■条件分岐(変数): 【1】Sys108:[読]現フレームのコマンド処理数 が 400000以上
|-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 400000以上 ]の場合↓
| |▼ 500000回エラー回避
| |■ウェイト:1 フレーム
| |■
|◇分岐終了◇
|■
◇ループここまで◇◇
▼ 余計な文字+を消去
■文字列操作:CSelf6[返し値] =<から文字列を置換> "+" → ""

▼ これで\cself[6]にはカンマ区切りで任意の区間、任意の個数の重複しないランダムな数列が入る
■デバッグ文:\cself[6]

▼ \cself[6]を返り値にしてあとはお好きに

割と苦労するとおもう重複しない数字を取り出し方。これで半年は苦しめられた気がします。あることをきっかけに再考し直したところ、僅かコメント24行(コメント文抜き)でかつ、汎用的に組めたので記念に残しときます。

具体的には「1~50の中からランダムで重複しない4つの数字を選ぶ」とか「1~8の数字をばらばらに並び替える(1~8の区間で8個の数値を取り出せば自ずとそうなる)」とかに使えますね。もちろん、ほかにも使い方次第で製作の幅はかなり広まる感じ。
いやこれ私的に今年最大のウディ大発見ですよこれ!(まだ1週間もたってないけど)

むしろ何故気がつかなかった・・・orz

追記はイベントコードです。
コピペしてクリップボード→イベントコード貼り付けすればそのまま使えます。
興味ある製作者の方はどうぞ
続きを読む
スポンサーサイト
プロフィール
↓赤月さんより頂いたものです

Strayひろま

Author:Strayひろま
長編ファンタジーRPGを制作中。
コメント頂いたら高確率で返信します。
つまり低確率でスルーします。

ツイッター
https://twitter.com/StrayHiroma

作ったゲームは カテゴリ[自作ゲーム]からDL出来ます。 レビュー、実況などはご自由にどうぞ。 何か連絡等があればどの記事でも良いので コメント欄に書いてください。
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
アクセスカウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。