Closed smly closed 8 months ago
最初の配牌時に手牌がソートされない問題を解消するPRです。
最初の配牌は ActionNewRound からソートされていない 13 あるいは 14 枚の牌を受け取ります。現在の実装では ActionNewRound から得られたデータをソートせず self._shoupai に割り当てており、これは打牌が実行されたあとの_hand_in() が呼ばれるまでソートされません。
self._shoupai
_hand_in()
これはダブルリーチを打つときに特に問題となります。ソートされていない self._shoupai を用いて MatchPresentation の _operate_liqi() 内のバリデーション処理が実行されます。majsoulrpa で管理するインデックス位置と画面上の理牌された位置の不一致があるため、高い確率でエラー(InvalidOperation 例外を出す)となります。
MatchPresentation
_operate_liqi()
InvalidOperation
NewRoundEvent の shoupai をソートするよう修正します。_hand_in() と RoundState のコンストラクタで同じ処理を行うため、メソッドとしてソート処理を切り出しています。
https://github.com/Apricot-S/majsoulrpa/pull/179 でテストを実行する仕組みが追加されたため、テストの仕組みが前提であったこの PR を review ready としました。
最初の配牌時に手牌がソートされない問題を解消するPRです。
最初の配牌は ActionNewRound からソートされていない 13 あるいは 14 枚の牌を受け取ります。現在の実装では ActionNewRound から得られたデータをソートせず
self._shoupai
に割り当てており、これは打牌が実行されたあとの_hand_in()
が呼ばれるまでソートされません。これはダブルリーチを打つときに特に問題となります。ソートされていない
self._shoupai
を用いてMatchPresentation
の_operate_liqi()
内のバリデーション処理が実行されます。majsoulrpa で管理するインデックス位置と画面上の理牌された位置の不一致があるため、高い確率でエラー(InvalidOperation
例外を出す)となります。実装
NewRoundEvent の shoupai をソートするよう修正します。
_hand_in()
と RoundState のコンストラクタで同じ処理を行うため、メソッドとしてソート処理を切り出しています。