Help us understand the problem. What is going on with this article?

頑シミュ for MHX におけるお守りのソート

More than 3 years have passed since last update.

はじめに

 初投稿です。至らないところがあれば教えてください。Python の練習がてらプログラムを作成したので公開します。

頑シミュ for MHX とは

 知らない人のために説明すると、頑シミュ for MHX とは先日発売されたモンスターハンタークロスのスキルシミュレーターです。本来、自分であれこれ考えながら装備を考えなければいけないところを自動で計算してくれるすばらしいシミュレーターです。(製作者様のHP)
 このシミュレーターに自分の持っているお守りを登録できるのですが、今のところ順番は手作業で揃える必要があります。
 そこで今回自動でソートできるプログラムを作成しました。以下がそのプログラムです。

sort_mhx.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd

if __name__ == "__main__":
    input_name = "CHARM.csv"
    output_name = "CHARM_.csv"
    # 入出力名

    col = ["omamori","slot","s1","v1","s2","v2"]
    cate_omamori = [u"兵士の護石",u"闘士の護石",u"騎士の護石",\
        u"城塞の護石",u"女王の護石",u"王の護石",u"龍の護石"]
    cate_skill = [u"毒",u"麻痺",u"睡眠",u"気絶",u"聴覚保護",u"風圧",u"耐震",\
        u"だるま",u"耐暑",u"耐寒",u"寒冷適応",u"炎熱適応",u"盗み無効",u"対防御DOWN",\
        u"狂撃耐性",u"細菌学",u"裂傷",u"攻撃",u"防御",u"体力",u"火耐性",u"水耐性",\
        u"雷耐性",u"氷耐性",u"龍耐性",u"属性耐性",u"火属性攻撃",u"水属性攻撃",\
        u"雷属性攻撃",u"氷属性攻撃",u"龍属性攻撃",u"属性攻撃",u"特殊攻撃",\
        u"研ぎ師",u"匠",u"斬れ味",u"剣術",u"研磨術",u"鈍器",u"抜刀会心",u"抜刀減気",\
        u"納刀",u"装填速度",u"反動",u"精密射撃",u"通常弾強化",u"貫通弾強化",\
        u"散弾強化",u"重撃弾強化",u"通常弾追加",u"貫通弾追加",u"散弾追加",u"榴弾追加",\
        u"拡散弾追加",u"毒瓶追加",u"麻痺瓶追加",u"睡眠瓶追加",u"強撃瓶追加",\
        u"属強瓶追加",u"接撃瓶追加",u"減気瓶追加",u"爆破瓶追加",u"速射",u"射法",\
        u"装填数",u"変則射撃",u"弾薬節約",u"達人",u"痛撃",u"連撃",u"特殊会心",\
        u"属性会心",u"会心強化",u"溜め短縮",u"スタミナ",u"体術",u"気力回復",u"回避性能",\
        u"回避距離",u"泡沫",u"ガード性能",u"ガード強化",u"KO",u"減気攻撃",u"笛",u"砲術",\
        u"重撃",u"爆弾強化",u"本気",u"闘魂",u"無傷",u"チャンス",u"底力",u"逆境",u"逆上",\
        u"窮地",u"根性",u"気配",u"采配",u"号令",u"乗り",u"跳躍",u"無心",u"千里眼",\
        u"観察眼",u"狩人",u"運搬",u"加護",u"英雄の盾",u"回復量",u"回復速度",u"効果持続",\
        u"広域",u"腹減り",u"食いしん坊",u"食事",u"節食",u"肉食",u"茸食",u"野草知識",\
        u"調合成功率",u"調合数",u"高速設置",u"採取",u"ハチミツ",u"護石王",u"気まぐれ",\
        u"運気",u"剥ぎ取り",u"捕獲",u"ベルナ",u"ココット",u"ポッケ",u"ユクモ",u"紅兜",u"大雪主",\
        u"矛砕",u"岩穿",u"紫毒姫",u"宝纏",u"白疾風",u"隻眼",u"黒炎王",u"金雷公",\
        u"荒鉤爪",u"燼滅刃",u"北辰納豆流"]
    # ソートの並び順

    tbl = pd.read_csv(input_name,encoding="shift-jis",header=-1,names=col)
    tbl["v2"] = tbl["v2"].fillna(0).astype(np.int64)
    tbl["omamori"] = pd.Categorical(tbl["omamori"],cate_omamori)
    tbl["s1"] = pd.Categorical(tbl["s1"],cate_skill)
    tbl["s2"] = pd.Categorical(tbl["s2"],cate_skill)

    tbl = tbl.sort_values(by=["omamori","s1","v1","s2","v2","slot"],\
        ascending=[False,True,False,True,False,False])

    tbl.to_csv(output_name,encoding="shift-jis"\
        ,index=False,header=False)
    # ファイルのアウトプット
    tbl2 = tbl.sort_values(by=["omamori","s1","v1","s2","v2","slot"],\
        ascending=[False,True,False,True,False,False])# 1

部分をいじるとソートの条件を変更できる。by=[]の部分で優先度、ascending=[]の部分でbyに対応するところの昇順降順を設定。このソースではゲーム内でのデフォルト順に多分揃う。

問題点

  • 2つ目のスキルがない場合にfloat型からint型にするため便宜的にスキル値に0を代入しているのでソートのときにおかしくなる。(直面する機会はあまりないかも)
  • 同様に出力ファイルに0が残ってしまう。(シミュレーターは問題なく動く)

おわりに

pandas を使ってみたかったからやった。おそらく需要はない。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away