【解決済み】複数ある変数の中から一番値が大きいものを選ぶ、という組み方をしたいのですが…

アバター
UPV17745
記事: 57
登録日時: 2018年12月03日(月) 21:30

【解決済み】複数ある変数の中から一番値が大きいものを選ぶ、という組み方をしたいのですが…

投稿記事by UPV17745 » 2018年12月22日(土) 00:44

よく恋愛シュミレーションゲームなどでありうる、
「好感度が一番高いキャラがエンディングに現れる」とかいうシチュエーションを作りたいのですが、
どうすれば実現できるのかが何度やっても出来なくてちょっと凹んでいます。

具体的に作りたいのは「指定した3つの変数の中で値が一番大きいものを選ぶ」
という組み方なんですが、ツクールのエディタだけで実現できるものなんでしょうか…?
最後に編集したユーザー UPV17745 on 2018年12月31日(月) 21:33 [ 編集 1 回目 ]

astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

Re: 複数ある変数の中から一番値が大きいものを選ぶ、という組み方をしたいのですが…

投稿記事by astral » 2018年12月22日(土) 03:01

こんばんは。

希望の条件に合うかはわかりませんが、例えばこの様なイベントの組み方が出来ると思います。

コード: 全て選択

◆注釈:キャラAの判定
◆条件分岐:キャラA好感度 > キャラB好感度
  ◆条件分岐:キャラA好感度 > キャラC好感度
    ◆注釈:キャラB キャラCより大きい場合
    ◆スイッチの操作:#0021 キャラAルート = ON
    ◆イベント処理の中断
    ◆
  :分岐終了
  ◆
:分岐終了
◆注釈:キャラBの判定
◆条件分岐:キャラB好感度 > キャラA好感度
  ◆条件分岐:キャラB好感度 > キャラC好感度
    ◆注釈:キャラA キャラCより大きい場合
    ◆スイッチの操作:#0022 キャラBルート = ON
    ◆イベント処理の中断
    ◆
  :分岐終了
  ◆
:分岐終了
◆注釈:キャラCの判定
◆条件分岐:キャラC好感度 > キャラA好感度
  ◆条件分岐:キャラC好感度 > キャラB好感度
    ◆注釈:キャラA キャラBより大きい場合
    ◆スイッチの操作:#0023 キャラCルート = ON
    ◆イベント処理の中断
    ◆
  :分岐終了
  ◆
:分岐終了
◆注釈:好感度が同一の場合、大きいか判定出来ない
◆スイッチの操作:#0024 判定失敗 = ON



この場合は、変数が同一だった場合には、大きいか判定出来ません。
同一つの場合には、なんらかの対策が必要になります。
アバター
UPV17745
記事: 57
登録日時: 2018年12月03日(月) 21:30

Re: 複数ある変数の中から一番値が大きいものを選ぶ、という組み方をしたいのですが…

投稿記事by UPV17745 » 2018年12月23日(日) 03:25

ああ、なるほど。
ひとつの変数に対して他の変数を比較してその結果を出すんですね。

同じ数値の場合の処理…は、どうだろう。
以上以下ではなく未満超過で判定すれば…だめか。それでも同じ数値になったときに判定をすり抜けてしまう。
困りました…
アバター
にいやん
記事: 218
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

Re: 複数ある変数の中から一番値が大きいものを選ぶ、という組み方をしたいのですが…

投稿記事by にいやん » 2018年12月23日(日) 04:36

素人考えですが複数の変数の最大値をMath.max関数を使って一度別の変数に格納して、それぞれ条件分岐で判定するのはどうでしょうか?
一番大きな数値が重複している場合は上の条件分岐が採用されます。

例1:キャラB(変数2)が一番大きい場合はキャラBルートになります。
例2:キャラA(変数1)とキャラB(変数2)とキャラC(変数3)がすべて同じであればキャラAルートが採用されます。

コード: 全て選択

var a = [$gameVariables.value(1), $gameVariables.value(2), $gameVariables.value(3)];
var max = Math.max.apply(null, a);
$gameVariables.setValue(4, max)


abc.jpg
ecf5DTTzl6h6lJj02
記事: 455
登録日時: 2018年12月23日(日) 13:55

Re: 複数ある変数の中から一番値が大きいものを選ぶ、という組み方をしたいのですが…

投稿記事by ecf5DTTzl6h6lJj02 » 2018年12月23日(日) 15:30

一般的なゲーム(恋愛シュミレーション)の場合、キャラごとに優先順位があって、複数のキャラクターが同時に条件を満たした場合に、優先順位の高いキャラクターのイベントが起こるようになっています。
なので、第2判定用の変数を持つ気がないのであれば、
優先順位をつけておいて、それに沿って処理するのが楽で良いかと思います。
優先順位は特に変数などで持っておく必要はなく、条件分岐の組み方で処理できます。

具体的には次のコードを参考にしてください。

コード: 全て選択

◆注釈:好感度 A,B,C のうちどれが一番高い数値化を判定して、エンディングを分岐させるサンプル
:    :同値の場合に A > B > C という優先順位がある 
◆条件分岐:Bの好感度 <= Aの好感度
   ◆注釈:Bの好感度がAの好感度以下である場合
   :    :同値でもAのイベントが優先されるのでこの条件分岐で大丈夫
   ◆条件分岐:Cの好感度 <= Aの好感度
      ◆注釈:Cの好感度がAの好感度以下である場合
      :    :同値でもAのイベントが優先されるのでこの条件分岐で大丈夫
      :    :Aとのエンディングが確定
      ◆ラベルジャンプ:Aとのエンディング
      ◆
   :それ以外の場合
      ◆注釈:Cの好感度がAの好感度 より大きい値の場合
      :    :Aの好感度はBの好感度以上なので、 Cの好感度が最大値となり、
      :    :Cとのエンディングが確定する
      ◆ラベルジャンプ:Cとのエンディング
      ◆
   :分岐終了
   ◆
:それ以外の場合
   ◆注釈:Bの好感度 が Aの好感度より大きい値だった場合
   ◆条件分岐:Cの好感度 <= Bの好感度
      ◆注釈:Cの好感度がBの好感度以下である場合
      :    :同値でもBのイベントが優先されるのでこの条件分岐で大丈夫
      :    :Bとのエンディングが確定
      ◆ラベルジャンプ:Bとのエンディング
      ◆      
   :それ以外の場合
      ◆注釈:Cの好感度がBの好感度より大きい値の場合
      :    :Bの好感度がAの好感度より大きいのがわかっているので、Cの好感度が最大値となり、
      :    :Cとのエンディングが確定する
      ◆ラベルジャンプ:Cとのエンディング
      ◆
   :分岐終了
   ◆
:分岐終了
◆ラベル:Aとのエンディング
◆注釈:この中でAとのエンディングを処理する
◆ラベルジャンプ:終了
◆ラベル:Bとのエンディング
◆注釈:この中でBとのエンディングを処理する
◆ラベルジャンプ:終了
◆ラベル:Cとのエンディング
◆注釈:この中でCとのエンディングを処理する
:    :そのまま ラベル:終了に流れていくので、ラベルジャンプは必要なし
◆ラベル:終了
◆注釈:それぞれのエンディングの後に、共通で処理するイベントがあれば
:    :ここに記述する


ただ、この判定方法の場合は、人数が多くなると、行数が増えて煩雑になりすぎるので、
人数が多くなる場合は、にいやんさんのコードのように、
JavaScriptを使って処理する必要が出てくると思います。
(長くなってしまうので…といってもたいした行数にはなりませんが…ここでは割愛。
コードサンプル見てみたい場合は返信ください)
astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

Re: 複数ある変数の中から一番値が大きいものを選ぶ、という組み方をしたいのですが…

投稿記事by astral » 2018年12月23日(日) 21:20

UPV17745 さんが書きました:同じ数値の場合の処理…は、どうだろう。
以上以下ではなく未満超過で判定すれば…だめか。それでも同じ数値になったときに判定をすり抜けてしまう。
困りました…


誰か一人の好感度が1番高くなった場合のみエンディングへ行き、
すり抜けた場合は、もう一日経過するなど、プレイヤーが好感度アップしていくなどを想定していました。

同一でも構わない場合は、全ての条件分岐箇所を、>から≥にすれば複数の場合でも判定出来ます。

◆条件分岐:キャラA好感度 > キャラB好感度

◆条件分岐:キャラA好感度 ≥ キャラB好感度

その場合考えられるのが、
1.優先度によって決める
  イベントコマンドは上から順番に判定されるのを利用する
2.乱数によって決める
3.プレイヤーに選ばせる
4.好感度以外の条件も判定対象にする

それぞれのパターンによって組み方が違ってきますし、どれも実現可能です。

同一でも判定し、同一だったキャラ数も特定したい場合の組み方です。

コード: 全て選択

◆変数の操作:#0020 キャラ数 = 0
◆注釈:キャラAの判定
◆条件分岐:キャラA好感度 ≥ キャラB好感度
  ◆条件分岐:キャラA好感度 ≥ キャラC好感度
    ◆注釈:キャラB キャラCより大きい場合
    ◆スイッチの操作:#0021 キャラAルート = ON
    ◆変数の操作:#0020 キャラ数 += 1
    ◆
  :分岐終了
  ◆
:分岐終了
◆注釈:キャラBの判定
◆条件分岐:キャラB好感度 ≥ キャラA好感度
  ◆条件分岐:キャラB好感度 ≥ キャラC好感度
    ◆注釈:キャラA キャラCより大きい場合
    ◆スイッチの操作:#0022 キャラBルート = ON
    ◆変数の操作:#0020 キャラ数 += 1
    ◆
  :分岐終了
  ◆
:分岐終了
◆注釈:キャラCの判定
◆条件分岐:キャラC好感度 ≥ キャラA好感度
  ◆条件分岐:キャラC好感度 ≥ キャラB好感度
    ◆注釈:キャラB キャラCより大きい場合
    ◆スイッチの操作:#0023 キャラCルート = ON
    ◆変数の操作:#0020 キャラ数 += 1
    ◆
  :分岐終了
  ◆
:分岐終了
◆条件分岐:キャラ数 = 1
  ◆注釈:1人の場合
  ◆
:分岐終了
◆条件分岐:キャラ数 ≥ 2
  ◆注釈:好感度同一が2人以上いた場合
  :  :キャラ数が2以上で、複数のスイッチがオンになっている
  ◆
:分岐終了
アバター
UPV17745
記事: 57
登録日時: 2018年12月03日(月) 21:30

Re: 複数ある変数の中から一番値が大きいものを選ぶ、という組み方をしたいのですが…

投稿記事by UPV17745 » 2018年12月31日(月) 21:33

パソコンが調子悪くてなかなかこちらに出てこれませんでした。
数々のアイデア本当に助かりますし、勉強になります。ありがとうございます!
変数の値が同じ場合にどれを選ぶか、については仰られた方がいるように優先順位をつけて処理をしてみようと思います。

“MV:質問” へ戻る