ソシャゲのガチャプログラムの作り方【JavaScript編】
ガチャプログラムの作り方
ここで作るガチャプログラムの仕様としては、アイテム別で排出確率が決まっているものとします。つまり、レアリティ毎に確率が定められていてその中からアイテムを再抽選する仕様ではないと言うことです。基本的なガチャロジックは下記の通りです。
ガチャロジック
// ガチャデータを取得する
function getConfig() {
return [
{ id: '大当たり', val: 1 },
{ id: '当たり', val: 10 },
{ id: 'はずれ', val: 89 },
];
}
// 設定データを元にガチャ抽選を行う
function gachaRun(config) {
const min = 1; // 最小値
const max = 100; // 最大値
// 乱数生成(抽選)
const randomNum = Math.floor(Math.random() * (max + 1 - min)) + min;
let result = [];
let totalProb = 0;
for (let i = 0; i < config.length; i++) {
totalProb += config[i].val;
if( randomNum <= totalProb ) {
result = config[i];
break;
}
};
return result;
}
// 実行
const config = getConfig();
console.log(gachaRun(config));
2行目のgetConfig()
でガチャデータを取得しています、本番では設定データをJSONファイルにまとめてそれを取得する的な感じにすればいいかと思います。ちなみに、配列内で指定しているval
は排出確率になります、「1」なら「1%」といった感じですね。
11行目のgachaRun(config)
でガチャデータを渡してガチャ処理を行なっています。17行目で乱数を生成して、生成した乱数とガチャデータの値を21行目のfor文の中で評価することでガチャ抽選を実装しています。ロジック自体は割とシンプルなので、これをベースにして色々作れると思います。
ガチャプログラムの作成例
せっかくなので、先ほど紹介したコードを使ってガチャシュミレーター的なものを作ってみましたので紹介しておきます、最近よく遊んでいるPUBGモバイルの10連ガチャをPUBGモバイル公式の確率表記通りに実装してみました。
PUBGモバイルガチャシュミレーター
- {{ item.prob }}%
補足しておくと、ガチャデータに関してはJSON形式でまとめて外部ファイル化しAjaxで読み込んでVue.js
で出力させています。ガチャロジック自体は冒頭で紹介したコードをそのまま使用しています、抽選で得た値をあらかじめ用意しておいた画像ファイルにパスが通るように設定する事で、ボタンを押すとガチャ結果が得られるといった仕組みになります。
ガチャデータはハードコーディングせず外部ファイルにした方が管理は楽です。これなら別のガチャシュミレータを作る時も、同じフォーマットでファイルを作って、読み込むファイルを切り替えるだけで実装する事ができます。
他の人が読んでいる記事
飲食→派遣→IT系ベンチャーに転職。
本業をベーシックインカムとし、やりたい事に挑戦するWebエンジニア。