PHPでガチャ実装

PHPでガチャ実装

今回は、PHPでソシャゲーのガチャを実装する方法を紹介したいと思います。

ガチャを実装するロジックはいろいろと考えられると思いますが、 僕は、まず、排出レアリティを確定からそのレアリティ内でランダムに選ぶのが簡単で初心者にはいいと思います。

ガチャのレアリティと排出率

今回実装するガチャのレアリティと排出率はシンプルに下の3つで行きたいと思います。

レアリティ 排出率
SSR 3%
SR 12%
R 85%

レアリティと排出率

$raritys = [
  'SSR' =>  300,
  'SR'  => 1200,
  'R'   => 8500,
];

今回は関係ありませんが、小数点第2位まで排出を設定できるように排出率の値を100倍にしています。

カード一覧

$cards['SSR'] = [ 'アイツ', 'コイツ', ];
$cards['SR']  = [ 'イオンリング', 'チルド', 'マザー', 'アイアンメイデン', 'ビッグコア', ];
$cards['R']   = [ 'ファン', 'ルグル', 'ガルン', 'ビーンズ', 'ディー01', ];

単発

まずは基本の単発ガチャの実装です。

$rand = mt_rand(0,10000); // 乱数生成
 
$probability = 0;
foreach($raritys as $rarity => $rarity_probability){
  $probability += $rarity_probability;
  if($rand <= $probability){ // 排出レアリティ確定
    $result = array_rand( $$cards[$rarity], 1 ); // 排出レアリティ内からランダムに1枚取得
    break;
  }
}
 
// 結果表示
echo $result;

10連ガチャ(SR以上確定ガチャ)

今回、SR以上確定ガチャで排出されるのは2種類のレアリティだけですがURみたいな 多数のレアリティが設定させているのであれば、SR以上確定ガチャ用の排出設定を別で設定してあげた方が新規レアリティなどにも対応しやすいと思います。

$sr_raritys = [
  'SSR' =>  300,
  'SR'  => 9700,
];
$rand = mt_rand(0,10000); // 乱数生成
 
// 普通に9連
for($i=0;$i<9;$i++){
  $probability = 0;
  foreach($raritys as $rarity => $rarity_probability){
    $probability += $rarity_probability;
    if($rand <= $probability){ // 排出レアリティ確定
      $result[] = array_rand( $$cards[$rarity], 1 ); // 排出レアリティ内からランダムに1枚取得
      break;
    }
  }
}
 
// SR以上確定ガチャ
$probability = 0;
foreach($sr_raritys as $rarity => $rarity_probability){
  $probability += $rarity_probability;
  if($rand <= $probability){ // 排出レアリティ確定
    $resul[] = array_rand( $$cards[$rarity], 1 ); // 排出レアリティ内からランダムに1枚取得
    break;
  }
}
 
// 結果表示
foreach(result as $v){
  echo $v.'<br>';
}