その他
    ホーム 技術発信 DoRuby ボックスガチャの実装をしよう(ソーシャルゲームにおけるサーバーサイド) 3
    ボックスガチャの実装をしよう(ソーシャルゲームにおけるサーバーサイド) 3
     

    ボックスガチャの実装をしよう(ソーシャルゲームにおけるサーバーサイド) 3

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    ここまで来て引き下がる訳にはいかない!

    前回までのあらすじ

    前回
    ボックスガチャを作る事になりました。
    改修、追加するべきAPIは以下に纏められました。

    ・ボックスガチャを引く POST: gachas/draw
    ・現在のボックスの中身を確認 GET: gachas/current_box_contents
    ・各ステージでのボックスの中身の確認 GET: gachas/all_box_contents
    ・ボックスガチャのリセット POST gachas/reset_box
    

    実装する前に

    さーばーえんじにあ「これ……全てのAPIに対して、ボックスの中身を確認変更する操作が必要になるな。
     で、ボックスの中身を確認やら変更やらするのは、レコードの仕組み上、複数のレコードを常に触る事になる。
     ちょっと、一つ一つ実装する前にボックスの中身に対する操作をクラスで一括で行う事にして、そこから触った方が良いな……」

     必要な操作を纏めたところ、以下のようになりました。

    ・ボックスの中身を初期化する
    ・ボックスの中身を確認する
    ・ボックスの中身を引く
    ・ボックスの中身をリセットする(次のステージに進ませる)
    +各種デバッグ機能
    

    さーばーえんじにあ「これらをクラスにして、名前、どうしよっかな。ボックスの中身に対する処理を全てやるんだから、GachaBoxContentManagerとかでいっか。で、そこから全てのボックスに対する操作を一括して行う、と」

    クラス GachaBoxContentManager
     コンストラクタ : ユーザーとガチャマスタを受け取り、ユーザーに対するボックスが無かったら初期状態で作る(ガチャマスタがボックスガチャ対応でなかったらエラー)
     確認メソッド : ボックスの中身を用途に合った形に整形して渡す
     引くメソッド : ボックスの中身を更新する
     リセットメソッド : ボックスを次のステージへと移行させる
     デバッグ機能 : 取り敢えず強制初期化とかはデバッグで必要になりそうだけど保留
    

    さーばーえんじにあ「じゃあ、今度こそ実装に入るか……って、ボックスの中身を確認するAPIって大体実装終わったも同然じゃんこれ」

    ボックスの中身を確認するAPI gachas/current_box_contents
      # GachaBoxContentManagerを対象ユーザーでインスタンス生成
      # インスタンスメソッドから中身を受け取る
      # 整形して返す
    

    さーばーえんじにあ「リセットも」

    ボックスのリセットAPI gachas/reset_box
      GachaBoxContentManagerを対象ユーザーでインスタンス生成
      インスタンスメソッドからリセットを実行
      リセット出来たらレスポンスを、既にリセット回数の上限に達しているなどでリセット出来なかったらエラーを返す
    

    さーばーえんじにあ「レスポンスとかはまあクライアント次第だけど、各ステージでのボックスの中身の確認も後はマスタのデータそのまま返すだけだし……

    各ステージでのボックスの中身の確認API gachas/all_box_contents
     対象のガチャのマスタデータ取得
     整形して返す
    

     あら、後はボックスガチャそのものの実装だけみたいなもんじゃん。
     あれま」

    記事を共有