0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ウマ娘親因子計算機能を作成した話

Last updated at Posted at 2025-09-02

はじめに

ウマ娘では、親と祖父母×2によって因子構成が作成されます。育成時には、親と祖父母×2を1セットとして、2セット選択して育成を開始します。

育成画面

また、ウマ娘4周年のアップデートから遺伝子因子が出現するようになりました。
育成中に遺伝子が発動すると、対象の適性が上昇します。

遺伝子因子


遺伝子を利用した育成例

例えば、親と祖父母に遺伝子を振ると、対象の適性を全てSにしやすくなります。

  • 親A:中距離☆☆☆(芝・先行の遺伝子)

  • 祖父母AA:中距離☆☆☆(芝・先行の遺伝子)

  • 祖父母AB:中距離☆☆☆(芝・先行の遺伝子)

  • 親B:中距離☆☆☆(芝・先行の遺伝子)

  • 祖父母BA:中距離☆☆☆(芝・先行の遺伝子)

  • 祖父母BB:中距離☆☆☆(芝・先行の遺伝子)

この構成により、育成で対象適性を全てSにしたキャラを作ることが容易になります。

遺伝子構成例


遺伝子の発生条件

遺伝子の発生は以下の条件で決まります。

  • 対象因子が6以上 → 抽選
  • 対象因子が12以上 → 確定

例えば、親Aに芝と先行の遺伝子を抽選させたい場合、祖父母AA・ABの親である祖祖父母(AAA、AAB、ABA、ABB)で芝6・先行6を確定させます。

image.png

祖父母にも遺伝子を抽選させたい場合は、祖祖父母と祖祖祖父母を合わせて芝6・先行12を用意します。

image.png


遺伝子育成での例:オペラオー

衣装オペラオーの固有スキル「恵福バルカローレ」は対人戦で非常に有用です。

オペラオー例

ただ、オペラオーはマイル適性がEのため、祖父母枠に編成しようとしても
育成中のレース勝利数が伸びにくいため遺伝子育成では敬遠していました。

image.png

しかし、祖祖祖父母の枠をマイルで埋めることで、芝・先行の遺伝子抽選が可能になります。

image.png

ただこの計算を毎回行うことは面倒なので、
今回のアプリでは祖父母の適性を踏まえて祖祖祖父母の因子構成をどうするかについても出力できるようにします。


アプリの機能

今回作成したアプリでは、上記の因子計算を自動化しています。

  1. 距離・馬場・脚質・親ウマ娘・祖父母A/Bウマ娘を選択
  2. 「因子構成計算」ボタンをクリックして結果を表示

操作画面
因子計算結果


ロジックの概要

calculate_aptitude_factors 関数では、ウマ娘の適性に基づき因子を計算します。
優先順位は マイル > 中距離 > 長距離 > ダート です。

def calculate_aptitude_factors(umamusume, base_factor_style):
    """
    ウマ娘の適性に基づいて因子を計算し、返します。
    優先順位: マイル > 中距離 > 長距離 > ダート
    """

    # ウマ娘情報がない場合はデフォルト値を返す
    if not umamusume:
        return base_factor_style, base_factor_style

    # ==========================
    # E適性の判定 (最優先)
    # ==========================
    if umamusume.mile_aptitude == "E":
        return "マイル", "マイル"
    if umamusume.classic_aptitude == "E":
        return "中距離", "中距離"
    if umamusume.long_distance_aptitude == "E":
        factor_one = "長距離"
        if umamusume.dirt_aptitude == 'F':
            factor_two = "ダート"
        else:
            factor_two = "長距離"
        return factor_one, factor_two

    # ==========================
    # D適性の判定
    # ==========================
    factor_one = base_factor_style
    if umamusume.classic_aptitude == "D":
        factor_one = "中距離"
    elif umamusume.mile_aptitude == "D":
        factor_one = "マイル"

    # ==========================
    # ABB / BBB の特別処理
    # ==========================
    factor_two = base_factor_style
    if umamusume.classic_aptitude == "D" and umamusume.mile_aptitude == "D":
        factor_two = "中距離"

    # ==========================
    # ダート適性が G の場合
    # ==========================
    if umamusume.dirt_aptitude == 'G' and factor_one == base_factor_style and factor_two == base_factor_style:
        return "ダート","ダート"

    # ==========================
    # ダート適性が F の場合
    # ==========================
    if umamusume.dirt_aptitude == 'F':
        if factor_one == base_factor_style:
            factor_one = "ダート"
        if factor_two == base_factor_style:
            factor_two = "ダート"

    return factor_one, factor_two

おわりに

最後まで読んでいただきありがとうございました。
ソースコードは以下のリポジトリに公開しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?