• follow us in feedly
scroll_icon
shuffle_button
プログラムをガチで書いてガチャ(スカウト)を回そう!!特定のSSR(UR)をGETできるのかを徹底的に検証してみた in「メルクストーリア」

プログラムをガチで書いてガチャ(スカウト)を回そう!!特定のSSR(UR)をGETできるのかを徹底的に検証してみた in「メルクストーリア」

Release Date:
プログラムをガチで書いてガチャ(スカウト)を回そう!!特定のSSR(UR)をGETできるのかを徹底的に検証してみた in「メルクストーリア」

現在ハマっているゲーム「メルクストーリア」で課金したいけど・・・どの程度課金すればお目当のSSR(UR)をGETできるかをプログラムを用いて検証してみました!!

検証といっても自分だけやっても面白くないので誰でも検証できるように、このページで自由に何回でもガチャ(スカウト)出来るように改造いたしましたので是非遊んでみてください。

メルクストーリアというゲームにハマっていまして・・・

画像をクリックでサイトに移動

メルクストーリア - 癒術士と鈴のしらべ -(メルスト) | 可愛いキャラが簡単操作でサクサク動く、超本格 ライン型ストラテジーRPG!

http://mercstoria.happyelements.co.jp/

先日何気なくネイバーまとめを見ていたら、広告記事のところになにやら面白そうなゲームアプリの宣伝がありまして、その記事を見て新たな課金ゲームにハマってしまいましたw

なにこの設定w主人公が超ヘタレなRPGがおもしろい - NAVER まとめ

http://matome.naver.jp/odai/2141449076664554901

もう主人公がヘタレで戦わない!って所でいきなり惹かれてしまいまして即インストールしてみました。絵も可愛いし、音楽も癒される。なによりめっちゃキャラクターが多いんです!めっちゃ可愛いのばかり。

いや・・・僕は業者じゃないんですが、本当に良いアプリだなって感じるんです。最初のオープニングなんかも最高なんですよ!!

ユーザーさんも信じられないくらいに優しいし、このゲーム・・・すごいです(しゅごい)。

メルクストーリア - 癒術士と鈴のしらべ - OP

プレイしていくうちにやっぱりレアで可愛いキャラクターが欲しくなりましたw

やっぱねー・・・欲しくなるんですよ。

最初に仲間になった人たちも愛着があるんですよ?だけど・・・一人くらい強くて可愛いい女の子が欲しいのです

前にイベントを開放するってやつがあるんですけど、メダルがあったので適当に開放してプレイしたのですが、そのイベントがもう!最高で良いストーリーだ〜〜って地味に感動してしまいました。

ぼく、やっぱり家でわんちゃん、ねこちゃん飼っていますし、毎日こたつで一緒に寝ますから動物系のキャラクターは大好きなんですよ

[夜明く銀の獣] ハルシュト

[夜明く銀の獣] ハルシュト

画像をクリックで拡大

この子なんですけど、一見するとかっこいい男の子って感じがするじゃないですか、というかストーリー鑑賞していて最初は本当にそう思っていましたw

ですけどこの子、実は女の子で、お嫁に来た隣村のお姫様を守っている人?(犬族)と言い争いになり、女の子ということを明かして上で戦い、互角になるシーンがあります。

そのシーンなんか最高でした!良い子だな〜ってきゅんきゅんするんです

で、最後にこの子もらえるのかなーって楽しみにしていたのですがなんと、もらえずじまいでした・・・名前は覚えていたのでどんなレアキャラなのかなーってスカウトの所で調べていたらレア度:★★★★★のURでちと無力感にw

この時点でGETできるのは無理ゲーに近いと感じたのですが、実際に特定のキャラをGETするにはどの程度スカウトをすればいいのかをプログラマーなので検証してみました。

ダイヤスカウトの提供割合(2015.01.28時点)

画像をクリックで拡大

SSです。

これを見ると

レア度:★★★★★

確率:1.25%

レア度:★★★★☆

確率:5.58%

レア度:★★★☆☆

確率:23.89%

レア度:★★☆☆☆

確率:69.28%

と、なっています。高いのか低いのかはどうでしょう、ちと厳しめの確率だなとは個人的には感じました。

なお、

・少数第3位を四捨五入しているため合計が100%にならない場合があります

・上記割合でレア度を確定後に、均等な比率でユニットを提供しております

・10連でのフェス確定枠は以上確定です

上記三つの謎の仕様は無視しますw

ダイヤスカウトのお値段

重要なのはお値段です

ここが高いか安いかで何回もするであろうスカウト料金が変わってきますが・・・

残念!

1回のダイヤスカウト料金は500円なのです。

ちょい高w

レア度:★★★★★ が確率:1.25% となっていますので単純計算だと

11連スカウト×7回 + 1スカウト×3回の合計80回スカウトを行い

ようやく レア度:★★★★★ が一体手に入るといった低確率

ちなみにお値段は

36,500円ぶっこむ計算になります。

※ あくまで単純計算

追記】2015.01.29

ちょw スカウト×11 で作ってしまっていました・・・

正しくはスカウト×10でダイヤが5個お得な仕様でした

あと、よく考えたらダイヤショップの仕様は・・・

ダイヤ135個

8,400円(51個おまけ)

なので、現在の擬似ダイヤスカウトの仕様で計算するとだいぶ値段が間違ってきますね・・・

〜現在の仕様のまま再計算〜

10連3回毎に5,000円を引いていけば大体合うはずです

後で時間がある時にでも修正しときます。。

ダイヤスカウトの仕様を見ながらプログラムを組んでみました

ぬぬぬ!?意外と難しいのですね!!何回も何回もテストを重ね(多分1000回はテストした)プログラムを改良して完成しました!深夜にこのプログラムでスカウトをしてみたらどうなるんだろうとアイデアが浮かんでからガリガリ書くこと6時間。

ようやく完成!!

一応、本ゲームの11連の仕様だけは対応して11回で5000円になるようにいたしました。

スカウト×1 と スカウト×11 以外にも勝手に スカウト×110!(非公式) スカウト×1100!!(非公式) スカウト×11000!!!(非公式)も作成。最初からやるときにページ再読み込みはめんどくさいからデータを初期化するボタンも設置。

擬似ダイヤスカウトの仕様

レア度:★★★★★

確率:1.25%

レア度:★★★★☆

確率:5.58%

レア度:★★★☆☆

確率:23.89%

レア度:★★☆☆☆

確率:69.28%

・確率は全く同じ

・レア度:★★★★★ に到達してから更に・・・ダイヤスカウトで提供されている ★★★★★ キャラで抽選をする(これがえげつない)

・合計スカウト数値を出す

・使った合計金額を出す

・この記事の目的である ハルシュト の抽選確率を割り出す(重要)

ダイヤスカウトで提供されている ★★★★★ キャラ一覧(2015.01.28時点)

モルーシャ, レイ, アウラ, コーネリア, ヴィルエル, アルシオン, ファーラ, カイザー, ミスティカ, モクレン, ロシャナク, ジェラルド, シエラ, キャロル, ユーヴェンス, アナーヒト, ハルシュト, プロメテンド, リベルディ, まつかぜ, トレノセリカ, イヴ, みおぎ, ブラッド, シトルイユ, バルトロメイ, ローザ, シルフィカ, グレゴトール

全部で29体

[擬似ダイヤスカウトツール]

記事内にも擬似ダイヤスカウトツールを載せときますが、擬似ダイヤスカウトツールだけのページも作成いたしましたのでPCで試す方などは専用ページの方が見やすくツールをいじれます。

メルクストーリア 擬似ダイヤスカウトツール

http://sharetube.jp/permalink/scout.php

初期化する
ここに結果が表示されます

結果・・・ハルシュトをGETするにはこのくらいお金が必要でした

10億円ほど使ったシミュレーションを何回も何回も回してハルシュトをGETできる確率を少々雑ですが、弾き出しました。

1回のスカウトでハルシュトが出る確率は

0.043% です

単純計算してみると・・・

スカウト2326回 × 0.043%

回して、ほぼハルシュトが出る結果になります

(2326回まわすのも何回かやりましたが、出ない時も多々ありw)

金額にして

1,057,500

ぶっこめば

ほぼ確実にハルシュトたんをGETできます!!wwwwwwwww

全体的な確率はどうだった?

基本的に、指定した確率に近づいていく動きはしてますよね?ただ、やはりランダムなので少ないスカウトの回数だと確率はまばらになります。よって現実的にスカウトをするといっても1〜3万円くらいだと思いますので最終的に運が必要。

【PHP版】[擬似ダイヤスカウトツール]のソースコード

最初PHPでガリガリ書いていたのですが、ある程度出来上がってから

記事化して見ている人にも検証を体験させれたら楽しいかも!ってアイデアが浮かび中途半端で終わったソースコードですw

これを元にJavaScriptで再構築 + 増築したので、これはこれでシンプルでいい感じです

PHP
<?php 
// レア変数
$rare_5 = 0;
$rare_4 = 0;
$rare_3 = 0;
$rare_2 = 0;

// レア毎の確率
$rare_5_probability = 125;
$rare_4_probability = 558;
$rare_3_probability = 2389;
$rare_2_probability = 6928;

// 回す回数
$run_number = 11;

// 1回回す為の金額
$run_money = 500;

// ランダムの確率
$random_probability = 10000;

// ガチャ回す
for($i = 0; $i < $run_number; $i++) {
	// ランダム乱数取得
	$probability = rand(1, $random_probability);

	if($probability <= $rare_5_probability) {
		$rare_5++;
	}
		else if($probability <= ($rare_4_probability + $rare_5_probability)) {
			$rare_4++;
		}
			else if($probability <=  ($rare_3_probability + $rare_4_probability + $rare_5_probability)) {
				$rare_3++;
			}
				else if($probability <= $rare_2_probability) {
					$rare_2++;
				}
					else {
						$rare_2++;
					}
} // for($i = 0; $i < $run_number; $i++) {

// 引けた確率
$pull_probability_5 =  ($rare_5 / $run_number) * 100;
$pull_probability_4 =  ($rare_4 / $run_number) * 100;
$pull_probability_3 =  ($rare_3 / $run_number) * 100;
$pull_probability_2 =  ($rare_2 / $run_number) * 100;


echo 'レア度:★★★★★<br>';
echo $rare_5.'回引きました。';
echo '<br>';
echo $pull_probability_5.'%';

echo '<br><br>';

echo 'レア度:★★★★☆<br>';
echo $rare_4.'回引きました。';
echo '<br>';
echo $pull_probability_4.'%';

echo '<br><br>';

echo 'レア度:★★★☆☆<br>';
echo $rare_3.'回引きました。';
echo '<br>';
echo $pull_probability_3.'%';

echo '<br><br>';

echo 'レア度:★★☆☆☆<br>';
echo $rare_2.'回引きました。';
echo '<br>';
echo $pull_probability_2.'%';

echo '<br><br>';

// 回した合計金額
$total_run_money = $run_number * $run_money;
// カンマ挿入
$total_run_money = number_format($total_run_money);

echo '使ったお金は'.$total_run_money.'円です。';
?>

【JavaScript版】[擬似ダイヤスカウトツール]のソースコード

PHPでは関数化していなかったのでJsでは全部を関数化にして綺麗にしました。最初はすごろく的な簡単なものを作って検証しようと考えていたのですが、それではどうにも良い結果が出なかったので単純計算だけですが作ってみました。

本来のガチャであれば個数が固定されていて、ガチャを回すたびに裏の設定調整が入るようになると思いますが、そこまで実装しなくても結果はあまり変わらないので個数固定概念はなくしています。

JavaScript
<!-- jQueryプラグイン -->
<script type="text/javascript" src="自分のサイトのかGoogleのsrc入力/jquery-1.9.1-min.js"></script>
<script>

// レア変数
var rare_5 = 0;
var rare_4 = 0;
var rare_3 = 0;
var rare_2 = 0;

// レア毎の確率
var rare_5_probability = 125;  // 1.25%
var rare_4_probability = 558;  // 5.58%
var rare_3_probability = 2389; // 23.89%
var rare_2_probability = 6928; // 69.28%

// 回す回数(デフォルト値)
var run_number = 100;

// 回す合計値
var total_run_number = 0;

// 1回回す為の金額
var run_money = 500;

//11連をした回数
var scout_11_count = 0;

// ランダムの確率
var random_probability = 10000;

// レア5選択
var rare_5_selecte = '';

// レア5選択array
var rare_5_selecte_array =  [];

// 引いたレア5を連結する変数
var hit_rare_5 = '';

// 特定のレアキャラカウント(ハルシュト)
var harushuto_count = 0;

// レア5の中身
var rare_5_array = ["モルーシャ", "レイ", "アウラ", "コーネリア", "ヴィルエル", "アルシオン", "ファーラ", "カイザー", "ミスティカ", "モクレン", "ロシャナク", "ジェラルド", "シエラ", "キャロル", "ユーヴェンス", "アナーヒト", "ハルシュト", "プロメテンド", "リベルディ", "まつかぜ", "トレノセリカ", "イヴ", "みおぎ", "ブラッド", "シトルイユ", "バルトロメイ", "ローザ", "シルフィカ", "グレゴトール"];


//----------------------------------
// min から max までの乱数を返す関数
//----------------------------------
function getRandomArbitary(min, max) {
  return Math.random() * (max - min) + min;
}

//------------------------------------
// min から max までの乱整数を返す関数
//------------------------------------
function getRandomInt(min, max) {
  return Math.floor( Math.random() * (max - min + 1) ) + min;
}

//---------------
// ガチャ回す関数
//---------------
function scout_gacha(run_number) {
	for(i = 0; i < run_number; i++) {
		total_run_number++;
		// ランダム乱数取得
		var probability = getRandomArbitary(1, random_probability);

		if(probability <= rare_5_probability) {
			rare_5++;
			// レア選択
			rare_5_selecte_array = rare_5_selecte_array.concat(Math.floor( Math.random() * rare_5_array.length));
		}
			else if(probability <= (rare_4_probability + rare_5_probability)) {
				rare_4++;
			}
				else if(probability <=  (rare_3_probability + rare_4_probability + rare_5_probability)) {
					rare_3++;
				}
					else if(probability <= rare_2_probability) {
						rare_2++;
					}
						else {
							rare_2++;
						}
	} // for(i = 0; i < run_number; i++) {
	// 回した合計金額
	var total_run_money = total_run_number * run_money;
	return total_run_money;
}
//------------------
//小数点切り捨て関数
//------------------
function number_point_truncate(truncate_number, truncate) {
	truncate_number = truncate_number * truncate;
	truncate_number = Math.round(truncate_number);
	truncate_number = truncate_number / truncate;
	return truncate_number;
}
//----------------
//スカウトする関数
//----------------
function scout_click(scout_number) {
	// トータル金額
	var last_total_run_money = scout_gacha(scout_number);
	// 11連ボーナス
	last_total_run_money = parseInt(last_total_run_money) - (scout_11_count * 500);
	// カンマ挿入
	last_total_run_money = last_total_run_money.toLocaleString();
	// レア5が当たったかどうかの判定
	if (rare_5_selecte_array.length > 0) {
		// 引いたレア5を連結する変数 & 初期化
		hit_rare_5      = '';
		harushuto_count = 0;
		// ゲットできたレア5を連結する
		for(ii = 0; ii < rare_5_selecte_array.length; ii++) {
			hit_rare_5 += rare_5_array[rare_5_selecte_array[ii]] + '、 ';
			// ハルシュトをゲットしていたら
			if(rare_5_selecte_array[ii] == 16) {
				harushuto_count++;
			}
		}
		// 末端のカンマ削除
		hit_rare_5 = hit_rare_5.slice(0, -2);
	} // if (rare_5_selecte_array.length > 0) {
	
	// 確率
	var pull_probability_5 = (rare_5 / total_run_number) * 100;
	var pull_probability_4 = (rare_4 / total_run_number) * 100;
	var pull_probability_3 = (rare_3 / total_run_number) * 100;
	var pull_probability_2 = (rare_2 / total_run_number) * 100;
	pull_probability_5     = number_point_truncate(pull_probability_5, 100);
	pull_probability_4     = number_point_truncate(pull_probability_4, 100);
	pull_probability_3     = number_point_truncate(pull_probability_3, 100);
	pull_probability_2     = number_point_truncate(pull_probability_2, 100);
	// 表示する内容変数
	var text = '<p>合計' + total_run_number + '回スカウトして・・・<br>使ったお金は<b style="font-size: 150%;">' + last_total_run_money + '</b>円です。' + '<br>また、特定のレア5キャラ(ハルシュト)を<b>' + harushuto_count + '</b>ゲット!!しまして、確率は<b>' + ((harushuto_count / total_run_number) * 100) + '</b>%と、なりました。<br>〜詳細結果〜<br>レア度:★★★★★<br>' + rare_5 + '回引きました。<br>確率:' + pull_probability_5 + '%<br><br>レア度:★★★★☆<br>' +rare_4 + '回引きました。<br>確率:' +pull_probability_4 + '%<br><br>レア度:★★★☆☆<br>' +rare_3 + '回引きました。<br>確率:' + pull_probability_3 + '%<br><br>レア度:★★☆☆☆<br>' +rare_2 + '回引きました。<br>確率:' + pull_probability_2 + '%<br><br>GETしたレア5キャラクター:' + hit_rare_5 + '</p>';
	// 表示
	$('.scout_view').html(text);
}
//----------
//初期化関数
//----------
function initialization() {
	$('.scout_view').html('ここに結果が表示されます');
	// レア変数
	rare_5 = 0;
	rare_4 = 0;
	rare_3 = 0;
	rare_2 = 0;
	
	// レア毎の確率
	rare_5_probability = 125;  // 1.25%
	rare_4_probability = 558;  // 5.58%
	rare_3_probability = 2389; // 23.89%
	rare_2_probability = 6928; // 69.28%
	
	// 回す回数(デフォルト値)
	run_number = 100;
	
	// 回す合計値
	total_run_number = 0;
	
	// 1回回す為の金額
	run_money = 500;
	
	//11連をした回数
	scout_11_count = 0;
	
	// ランダムの確率
	random_probability = 10000;
	
	// レア5選択
	rare_5_selecte = '';
	
	// レア5選択array
	rare_5_selecte_array =  [];
	
	// 引いたレア5を連結する変数
	hit_rare_5 = '';
	
	// 特定のレアキャラカウント(ハルシュト)
	harushuto_count = 0;
}

//----------------
//読み込み後の処理
//----------------
$(function() {
	//----------------
	// 1回スカウトする
	//----------------
	$(".button_1").click( function() {
		scout_click(1);
	});
	//-----------------
	// 11回スカウトする
	//-----------------
	$(".button_11").click( function() {
		scout_11_count++;
		scout_click(11);
	});
	//------------------
	// 110回スカウトする
	//------------------
	$(".button_110").click( function() {
		scout_11_count += 10;
		scout_click(110);
	});
	//-------------------
	// 1100回スカウトする
	//-------------------
	$(".button_1100").click( function() {
		scout_11_count += 100;
		scout_click(1100);
	});
	//--------------------
	// 11000回スカウトする
	//--------------------
	$(".button_11000").click( function() {
		scout_11_count += 1000;
		scout_click(11000);
	});
	//---------------------
	// 110000回スカウトする
	//---------------------
	$(".button_110000").click( function() {
		scout_11_count += 10000;
		scout_click(110000);
	});
	//-----------
	// 初期化する
	//-----------
	$('.button_initialization').click( function() {
		initialization();
	});
});
</script>

最後に

この検証結果はあながち間違っていないと思いますので、これからガチャ(スカウト)やりたいけど・・・どのくらいお金を投入すればレアキャラをGET出来るのか心配な方にこのツールで体感してもらってから、本番でやってもらいたいです。

ここで運を使ったら本末転倒ですがwww

(実際にここで5,000円で欲しいハルシュトが出たりしていますので泣)

そんなこんなで課金に対する壁が薄まっている今、ハマりすぎる人たちが急増しています!!ゲームはほどほどにしましょうー。毎月本当に余ったお金だけで楽しむことが一番かもしれません。

この記事が気に入ったら

いいね!しよう

Sharetubeの最新記事をお届けします

著者プロフィール
マツオカソウヤ

プログラマー。Sharetube作ってる人。サーバ周り、サービス設計、システム、デザイン、執筆を手掛ける。SNSのJoinchrome、ソーシャルRSSのBazzfeed、TwitterアプリのPicleの失敗を経て、今に至る。今日もまた東京の何処かでコードと記事を書いています。