【解決済み】マップ上の指定位置に数種類のイベントをランダム配置するには?

rpgcode
記事: 47
登録日時: 2020年2月29日(土) 03:53

【解決済み】マップ上の指定位置に数種類のイベントをランダム配置するには?

投稿記事by rpgcode » 2021年10月04日(月) 17:39

ダンジョンマップ上に複数種類の扉イベントを自動配置したいと考えています。
考えた仕様は以下のとおりです。

1.1つのマップには複数(10〜30程度)の扉イベントが置かれる。
2.扉が置かれる位置座標は予め決まっている。
3.扉にはA,B,C,Dの4種類があり、1つの位置座標に対し、ランダムでいずれか1種の扉が選ばれる。
4.扉位置をリージョンIDで指定する方法は使わない。

以下のテンプレートイベントプラグインを使って、

https://triacontane.blogspot.com/2016/0 ... st_25.html

試してみたのですが4つの条件を満たせず困っています。
(メモ欄に<TE:1>などと入れる実装は1,2,4が満たせても3が満たせない)

わかる方いましたら、アイデアでもいいので教えて下さい。
よろしくお願いします。
最後に編集したユーザー rpgcode on 2021年10月05日(火) 19:39 [ 編集 1 回目 ]

アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: マップ上の指定位置に数種類のイベントをランダム配置するには?

投稿記事by ムノクラ » 2021年10月04日(月) 19:58

rpgcode さんが書きました:ダンジョンマップ上に複数種類の扉イベントを自動配置したいと考えています。
考えた仕様は以下のとおりです。

1.1つのマップには複数(10〜30程度)の扉イベントが置かれる。
2.扉が置かれる位置座標は予め決まっている。
3.扉にはA,B,C,Dの4種類があり、1つの位置座標に対し、ランダムでいずれか1種の扉が選ばれる。
4.扉位置をリージョンIDで指定する方法は使わない。

以下のテンプレートイベントプラグインを使って、

https://triacontane.blogspot.com/2016/0 ... st_25.html

試してみたのですが4つの条件を満たせず困っています。
(メモ欄に<TE:1>などと入れる実装は1,2,4が満たせても3が満たせない)

わかる方いましたら、アイデアでもいいので教えて下さい。
よろしくお願いします。

考え方(見方)を少し変えてみると、簡単になると思いました。

1,2であることで、テンプレートプラグインが必須とも思えませんが、同じイベント内容にするという目的であれば、向いているとは思います。
(完全に同じ内容であれば、コモンイベントで済むので)
また、3の種類の外見については共通というように読み取りました。
(これが扉の色・外観で種類が分かるとかだと全く話が違ってくるので…)

気になる2.については、「予め」で無くとも、イベント実行時に決定していって数の重複がなければプレイヤーから見たら同じことですよね?

3,4の条件が今一歩理解できないでいますが、
ABCDの扉の数は決まっていて、全部Aである等の状況はない。
ということだと予想します。

ここは全て同じイベント(コモンイベント)として作成し、その中で乱数から分岐するのが簡潔な実装方法だと思います。

くじの数を確実にしたいということであれば、下記のようなプラグインコマンドで簡易に実装できます。

▼Hz Random List(ひず様作) - HzRandomList.js
https://plugin.fungamemake.com/archives/13315
重複の無いランダム値を作成するプラグイン
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
rpgcode
記事: 47
登録日時: 2020年2月29日(土) 03:53

Re: マップ上の指定位置に数種類のイベントをランダム配置するには?

投稿記事by rpgcode » 2021年10月04日(月) 20:57

ムノクラさん

ありがとうございます。

ここはシンプルに、全て同じイベント(コモンイベント)として作成し、その中で乱数から分岐するのが完結な実装方法だと思います。


コモンイベントで乱数分岐とする場合、扉イベントの実行内容でコモンイベントを呼び出すのかと思いますが、プレイヤーが扉に触れた場合、扉の種類が変わってしまうような気もします。

1ページ目自動実行で乱数生成し扉種類を決め、2ページ目以降のセルフスイッチA,B,C,Dで扉種類を切り替えるような形でしょうか。

参考プラグインについてもありがとうございます。
このプラグインも見てみます。
アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: マップ上の指定位置に数種類のイベントをランダム配置するには?

投稿記事by ムノクラ » 2021年10月04日(月) 23:22

rpgcode さんが書きました:ムノクラさん

ありがとうございます。

コモンイベントで乱数分岐とする場合、扉イベントの実行内容でコモンイベントを呼び出すのかと思いますが、プレイヤーが扉に触れた場合、扉の種類が変わってしまうような気もします。

1ページ目自動実行で乱数生成し扉種類を決め、2ページ目以降のセルフスイッチA,B,C,Dで扉種類を切り替えるような形でしょうか。

参考プラグインについてもありがとうございます。
このプラグインも見てみます。

自分の想定とは違う想像をされたようです。
考えた実装の具体例(未実験)を出してみます。

1.マップに10個の扉が出る。
2.扉を開けた後にどうなるか、下記のコモンイベント1つで決まる。
2-1.変数を乱数で1-4で出し、ABCDの代わりにする。
これを先述のプラグインで、確立を調整することは可能。
例:10個の内訳を1:2:3:4などにできる。
場合によってはプラグインは不要。
例えば、1-10の乱数で、
・1:A
・2-3:B
・4-6:C
・7-10:D
の各扉の条件に分ける。
2-2.条件分岐で2-1の種類の扉のイベント内容を実行する。

先述のプラグインが必要かどうかは、扉を開いた後に同じマップのままで違う扉を開く必要があるかどうか?で決まると思います。
扉を開いて違うマップに移動するなり、扉の配置が変化するなら、プラグインなしで上記のコモンイベントだけで実装可能と予想します。

この予想が的外れである場合、「実現したい内容」が全く伝わっていない事になります。

この場合、ゲームでどのように動作していくのが理想かをフローチャートのように箇条書きにして説明いただければ、対応できると思います。
逆に言えば、その説明ができなければ、応えられる人は限られる(エスパー能力保持者)と思われます。
しかし、自分は察しが悪い人間なので、見ている人は「そーじゃねーよ」と思って、助言くださるかも知れませんが。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
rpgcode
記事: 47
登録日時: 2020年2月29日(土) 03:53

Re: マップ上の指定位置に数種類のイベントをランダム配置するには?

投稿記事by rpgcode » 2021年10月05日(火) 01:49

ムノクラさん

丁寧にありがとうございます。
確かに仰っているアルゴリズムで実装できそうな気がしました。
手順で書かれている意図も仕様の認識違いもないように思えたので、改めて考えてみたところ仕様の記述漏れに気づきました。(すみません)

「扉は一度だけでなく複数回プレイヤーが触れる」場合があります。

具体的には、扉の種類(状態)には以下の4パターンがあります。

 A.カギがかかっていない&ワナはかかっていない
 B.カギがかかっている&ワナはかかっていない
 C.カギがかかっていない&ワナがかかっている
 D.カギがかかっている&ワナがかかっている
(※単純化するためにA〜Dはすべて同確率で出現するものとします)

目的はダンジョン内に存在するそれぞれの扉の状態をランダムで上記いずれかに設定したいのです。

このとき、カギのかかっていないパターン(A,C)については1度触れれば扉イベントが消去されるので問題ありませんが、カギがかかっているパターン(B,D)の場合はプレイヤーは再び扉にふれることができます。

カギがかかっていてプレイヤーがカギを持っていなかった場合、プレイヤーは何度も扉に触れることができるため、単純にすべての扉共通で使うコモンイベントで乱数生成&扉種類確定のための分岐をしてしまうと、プレイヤーが2回目以降に触れた時にも乱数生成され扉の種類が変わってしまうのではないかと思った次第です。

カギのかかっていた扉のカギが解除されたり、ワナのついていた扉のワナがなくなってしまったりというような。

また、リージョンIDでの配置ができなくとも地形タグを使えば良いのかなとも思ったのですが、地形タグについてまったくわかっておらず、以下の説明を見ても具体的にどのように使うのかがイメージできていません。

地形タグ
マップタイルをクリックすると、数字が 0 ~ 7 まで切り替わるので、それぞれに好きな数字を割り当てることが出来ます。イベントコマンド[指定位置の情報取得]で指定位置のマップタイルに割り当てられた数字を取得することが出来ます。具体的な用途が決められていない上級者向けの機能ですので、無視してもまったく問題ありません。

https://tkool.jp/mv/guide/004_009a.html#03g
アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: マップ上の指定位置に数種類のイベントをランダム配置するには?

投稿記事by ムノクラ » 2021年10月05日(火) 07:15

rpgcode さんが書きました:ムノクラさん

丁寧にありがとうございます。
確かに仰っているアルゴリズムで実装できそうな気がしました。
手順で書かれている意図も仕様の認識違いもないように思えたので、改めて考えてみたところ仕様の記述漏れに気づきました。(すみません)

「扉は一度だけでなく複数回プレイヤーが触れる」場合があります。

具体的には、扉の種類(状態)には以下の4パターンがあります。

 A.カギがかかっていない&ワナはかかっていない
 B.カギがかかっている&ワナはかかっていない
 C.カギがかかっていない&ワナがかかっている
 D.カギがかかっている&ワナがかかっている
(※単純化するためにA〜Dはすべて同確率で出現するものとします)

目的はダンジョン内に存在するそれぞれの扉の状態をランダムで上記いずれかに設定したいのです。

このとき、カギのかかっていないパターン(A,C)については1度触れれば扉イベントが消去されるので問題ありませんが、カギがかかっているパターン(B,D)の場合はプレイヤーは再び扉にふれることができます。

カギがかかっていてプレイヤーがカギを持っていなかった場合、プレイヤーは何度も扉に触れることができるため、単純にすべての扉共通で使うコモンイベントで乱数生成&扉種類確定のための分岐をしてしまうと、プレイヤーが2回目以降に触れた時にも乱数生成され扉の種類が変わってしまうのではないかと思った次第です。

カギのかかっていた扉のカギが解除されたり、ワナのついていた扉のワナがなくなってしまったりというような。

また、リージョンIDでの配置ができなくとも地形タグを使えば良いのかなとも思ったのですが、地形タグについてまったくわかっておらず、以下の説明を見ても具体的にどのように使うのかがイメージできていません。

地形タグ
マップタイルをクリックすると、数字が 0 ~ 7 まで切り替わるので、それぞれに好きな数字を割り当てることが出来ます。イベントコマンド[指定位置の情報取得]で指定位置のマップタイルに割り当てられた数字を取得することが出来ます。具体的な用途が決められていない上級者向けの機能ですので、無視してもまったく問題ありません。

https://tkool.jp/mv/guide/004_009a.html#03g


テンプレートプラグインとリスポーンを組み合わせて使用する考えだと予想しています。
地形タグの使用例は下記の記事にもありますが…今回の件には向いていないでしょう。
https://fungamemake.com/archives/367
リージョンのほうが向いていると思います。
ただ、理由は知りませんがリージョンは使用しないと決まっているそうですし、イベントの位置が決まっているということなので、リスポーンは必要ないと思います。

まず、開けた後に扉の種類が決定した後に扉の種類を確定させるのは、セルフスイッチを使えば簡単です。
幸い今回は4種類なのでセルフスイッチで事足ります。
下記のような感じでしょうか。

コード: 全て選択

◆変数の操作:#0001 = 乱数 1..4
◆条件分岐:#0001 = 1
  ◆注釈:Aの処理
  ◆セルフスイッチの操作:A = ON
  ◆
:分岐終了
◆条件分岐:#0001 = 2
  ◆注釈:Bの処理
  ◆セルフスイッチの操作:B = ON
  ◆
:分岐終了
◆条件分岐:#0001 = 3
  ◆注釈:Cの処理
  ◆セルフスイッチの操作:C = ON
  ◆
:分岐終了
◆条件分岐:#0001 = 4
  ◆注釈:Dの処理
  ◆セルフスイッチの操作:D = ON
  ◆
:分岐終了


ご自身で書かれていた「自動実行でページを切り替える」のと、概ね同じです。
・自動実行で行うと、扉の数だけ最初に実行するので重くなるかも。
・無駄な実行内容になる箇所が出る。
という理由で、初回は決定ボタン等の別のトリガーで動作させたほうが良いかと思います。

ここまでくるとコモンイベントのみでは後からの修正が大変なので、テンプレートプラグインを利用するのは有効だと思います。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
rpgcode
記事: 47
登録日時: 2020年2月29日(土) 03:53

Re: マップ上の指定位置に数種類のイベントをランダム配置するには?

投稿記事by rpgcode » 2021年10月05日(火) 19:38

ムノクラさん

ありがとうございます。
頂いたアドバイスを参考に実装してみたところ、理想的な挙動で実装できました!

実装方法もそうですが、こうしたやり取りの過程で仕様が明確になったのも大きかったです。
地形タグについては今回は使いませんでしたが、このあたりまったくわかっていないのでもう少し学んでみたいと思います。

いつもながらどうもありがとうございました。
こちらのスレッドについては解決済みとさせて頂きます。

“MV:質問” へ戻る