某音ゲーでは、1,010,000点を上限に判定の善し悪しによってスコアが減少していく。
具体的にはすべてのノーツで最高評価をとれば1,010,000点となるが、それ以下の評価を取るとそのたびにスコアが減少する。
100万/総ノーツ数でそれぞれのノーツの基礎点が決まったのち、
評価によって以下のようにスコアへ影響する。
- JUSTICE CRITICAL:基礎点×101%
- JUSTICE:基礎点×100%
- ATTACK:基礎点×50%
- MISS:基礎点×0%
計算式さえわかってしまえば、総ノーツ数とスコアから何個JUSTICEを出したかを計算することができる。
あくまでJUSTICEの数のみを計算するが、ATTACK は JUSTICE 51個分、MISS は JUSTICE 101個分となるので読み変えは可能。
以上を加味するとJUSTICE以下の数を算出する計算式は以下となる。
floor(総ノーツ数 * ((1010000 - スコア) / 10000))
floorは切り捨てを意味する。
sample.js
//計算を行う関数
function Calc(notes, score) { //総ノーツ数とスコアを参照する
const lost = Math.floor(notes * ((1010000 - score) / 10000));
return lost; //JUSTICEの数
};
//例 ノーツ数1311、スコア1009923点の場合、1311 * 0.0077(101 - 100.9923)を切り捨てして10という値が得られる。
//楽曲データを定義する
const music = {
notes: 1311, //総ノーツ数を設定
score: 1009923 //スコアを設定
};
const justice = Calc(music.notes, music.score); //総ノーツ数とスコアを渡す
console.log("JUSTICEの数", justice); //例 JUSTICEの数 10
また、スコアの部分を1007500などにするとSSSボーダーなどを計算することもできる。