スクリプト/ゲーム内レベルアップ (履歴ID:338)

最終投稿者:Material 6858 mini akasata 更新:2012/10/20 09:22:32

倒した敵の種類と数からレベルアップ


レベルアップを倒した敵の種類と数から判定しておこなう例を以下に示します。

関数の準備


まず開始スクリプトでは以下のように書きます。
とりあえずはそのままコピー&ペーストして見るのがよいかと思います。
#指数関数(aのb乗を返します。)
def powFunc(a, b)
  v = 1.0
  i = 0
  while(i < b)
    v = v * a
    i = i + 1
  end
  return v
end

#個々の敵キャラの経験値をidから求めます。
def getEnemyExperience(id)
 case id
    when 11
      return 12
    when 17
      return 15
    #敵キャラを増やしたら、ここに敵のIDから経験値を求める処理を加えていきます。
  end
end

#経験値の計算
def getTotalExperience(killCounts)
  exp = 0
  i = 0
  while i < getArrayLength(killCounts)

    #倒した敵の種類と数から経験値を計算
    exp = exp + getEnemyExperience(killCounts[i][0]) * killCounts[i][1]

    i = i + 1
  end
  return exp
end

# レベルアップのチェック
def levelUpCheck()
  i = 0
  while i < 4
    member = getPartyMember(i)
    if member == "playerCharacter" || member >= 0
      #メンバーがいる場合倒した敵の数と種類から経験値を計算。
      killCounts = getKillCountPartyMember(member)
      exp = getTotalExperience(killCounts)
      #レベルアップの判定
      while exp - powFunc(2, getLevelPartyMember(member) - 1) * 10 > 
               powFunc(2, getLevelPartyMember(member)) * 10
        levelUpPartyMember(member)
        speak("レベルアップしました。level = ", getLevelPartyMember(member),
                  "経験値 = ", exp)
      end
    end
    i = i + 1
  end
end



特に調整せずに使う場合は以下の部分を書き換えるだけでよいかと思います。
#個々の敵キャラの経験値をidから求めます。
def getEnemyExperience(id)
 case id
    when 11
      return 12
    when 17
      return 15
    #敵キャラを増やしたら、ここに敵のIDから経験値を求める処理を加えていきます。
  end
end

ID11の敵を1体倒したら12の経験値がもらえるというような形になっております。
新たな敵キャラのIDの種類が増えるごとに"when ID"と"return 経験値"
を加えていくことで、
新たな敵キャラを倒したときの経験値を取得できるようになります。

レベルアップのチェックをするタイミング


とりあえずレベルアップのための関数を使ってみます。
詳細な説明については後のほうで書いてあります。

levelUpCheck関数を呼ぶことで、レベルアップする条件を満たしているかどうかを判定して
満たしているならばレベルアップします。
たとえば、マップに配置した敵キャラを倒したらすぐにレベルアップのチェックを
おこなう場合は、"先頭終了時の実行内容(スクリプト)"に以下のように書きます。
if getTurnBattleResult() == 
    getTurnBattleWin()
  #勝ったとき
  levelUpCheck()

elsif getTurnBattleResult() ==
    getTurnBattleLose()
  #負けたとき
  

elsif getTurnBattleResult() ==
    getTurnBattleRunAway()
  #逃げたとき
  

end


誰かに話しかけたときにレベルアップするという形にしたい場合は、
話しかけた相手の"イベント実行内容(スクリプト)"でlevelUpCheck関数を
呼ぶことになります。

より詳細な解説


以下のループは、パーティメンバーそれぞれに対してレベルアップのチェックをする
ループとなっております。
  while i < 4
    member = getPartyMember(i)
    if member == "playerCharacter" || member >= 0
...
    end
    i = i + 1
  end



パーティメンバーごとに得られている経験値と、レベルアップの条件から、
レベルアップをさせるかどうかを計算しています。
      #メンバーがいる場合倒した敵の数と種類から経験値を計算。
      killCounts = getKillCountPartyMember(member)
      exp = getTotalExperience(killCounts)
      #レベルアップの判定
      while exp - powFunc(2, getLevelPartyMember(member) - 1) * 10 > 
               powFunc(2, getLevelPartyMember(member)) * 10
        levelUpPartyMember(member)
        speak("レベルアップしました。level = ", getLevelPartyMember(member),
                  "経験値 = ", exp)
      end

powFuncは指数関数です。
指数関数は急激に値が増えていくため、同じ経験値の敵キャラを倒し続けていると
だんだんレベルアップしにくくなるような効果が得られます。

また、
getKillCountPartyMemberの返り値がkillCountsに入ってくるようになっております。
killCountsに代入されるのは、倒した敵キャラの種類と倒した敵キャラの数の組の配列です。
killCounts[i][0]

には倒した敵キャラのIDが入っています。
killCounts[i][1]

には倒した敵キャラの数が入っています。
敵キャラのIDに応じて加える経験値の量を変えています。