旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[npm] 経験値とレベルを管理する rpglevel モジュール

2013年7月10日

RPG で良くある概念である「経験値とレベル」を管理するための npm モジュールです。

例えば、ドラクエや Wizardry の各キャラの経験値とレベル、
今で言うならパズドラのランクや各モンスターの経験値とレベル、
そういった「経験値とレベル」の関係を表現するために使います。

ダウンロードやインストール方法は、GitHub – rpglevel を参照して下さい。

なお、"npm" と書いてはありますが、
もちろん .js を直DLして単なる JavaScript ファイルとして
ブラウザで使用することもできます。

Usage

// node.js の場合
//var RPGLevel = require('rpglevel');

var lv = new RPGLevel();

//
// 関数で経験値テーブルを作成する
// 各レベルアップに必要な経験値の差分を return する
// 配列で直接定義してもいい、e.g. [0, 4, 6, 8, 10]
//
//   Lv1 = 0
//   Lv2 = 4
//   Lv3 = 6  (Total = 10)
//   Lv4 = 8  (Total = 18)
//   Lv5 = 10 (Total = 28)
//
lv.defineExpTable(function(level){
  return level * 2;
}, {
  maxLevel: 5
});


// 経験値 10 獲得、レベルは獲得時点で 3 に上がってる
// レベルアップ処理をする場合は、この返り値で判定して処理を入れる
lv.gainExp(10);


// レベルを返す、下記のショートカット
console.log(lv.getLevel());  // -> 3


// レベルを含むその他の情報を返す
// 次のレベルアップに必要な経験値などが含まれる
console.log(lv.getStatuses());  // -> { level:3, .. }

技術的・開発的な話

前回 に続いて今回やったこと:

  • サポート環境に node.js を加えて、ブラウザと両方で動くようにした
  • npm パッケージとして登録した。
    ちなみに npm adduser で要求される Email は外部に公開されるので注意して下さい。

テストの話

Testem でHTMLをホストしたり、testem ci でもそこまで不便では無いのですが
やっぱり、node.js で直接行うのと比べると実行速度が遅いです。

可能な限り node.js 上で行った方が気持良く開発できるので、
設計面で、ブラウザ依存とそうじゃない部分の分割は、
多少手間を掛けても細かくやった方がいいと思いました。

mocha 上での実行の分岐には、skipIf みたいな仕組みがあるのかなー?
・・・パッと見た感じ、無さそうな気もするけど。

参考リンク

あざざざざざざーす!