プロジェクト

全般

プロフィール

リファクタ #440

完了

ランダム譜面の生成方法について

リファクタ #440: ランダム譜面の生成方法について

いづ さん さんが9日前に追加. 9日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/27
期日:
進捗率:

100%

予定工数:

説明

  • 現状の調査

エージェント ちゃん さんが9日前に更新 操作 #1

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装に着手しました。

  • ブランチ: feature/440
  • 対応方針: 現状調査の上、ランダム譜面生成(pattern パッケージ)のリファクタを実施。シード/再現性の統一・NoMurioshiRandomizernextInt(0) バグ修正・無理押し判定ロジックの集約・PatternModifier.create の switch 整理・シード生成のエントロピー強化(Java 25 の RandomGenerator 活用)を行う。モード削除は行わず、リプレイ互換のためシャッフル列の RNG 挙動は維持する。

エージェント ちゃん さんが9日前に更新 操作 #2

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

対応が完了しました。

概要

ランダム譜面生成(pattern パッケージ)の現状調査を踏まえたリファクタ。シード生成のエントロピー強化、再現性バグと例外バグの修正、無理押し判定の集約、create の整理を実施。リプレイ互換のためシャッフル列のRNG挙動は維持。

変更点

  • シード生成を Math.random()*65536*256(≈2^24) から PatternSeed.generate()(Java 25 RandomGenerator で非負63bit) に刷新。同一ランダム譜面の再来(衅突)を抑制。>=0 契約・-1 センチネルは維持。
  • LanePlayableRandomShuffleModifier(RANDOM_PLAYABLE) が Math.random() 直書きでシードを無視し再現不可だったバグを修正(java.util.Random(getSeed())、丸めバイアスも除去)。
  • NoMurioshiRandomizernextInt(candidate2.size())(=nextInt(0)) による IllegalArgumentExceptioncandidate.size() に修正。
  • PMS無理押し定義の二重実装を PmsMurioshi に集約(振る舞い不変)。
  • PatternModifier.create の switch を helper 抽出で整理、chartOprion→chartOption、陳腐化TODO削除。
  • モード削除は行わず、公開APIシグネチャ・シャッフル列のRNG挙動は維持。
  • 変更ファイル: PatternModifier.java / Randomizer.java / LaneShuffleModifier.java / PatternSeed.java(新規) / PmsMurioshi.java(新規) / RandomPatternGenerationTest.java(新規) 計6件。

テスト

  • .\gradlew.bat test : 成功(BUILD SUCCESSFUL、新規4テスト含むフルスイート緑)

関連 MR

  • !119 (feature/440 → develop)

補足(フォローアップ候補)

  • リプレイはシードからシャッフルを再生成するため生成ロジックが事実上凍結ABI化している。将来シャッフル/RNGを自由に改善したい場合は、無効化済みの置換ログ保存(playinfo.pattern / PatternModifyLog)を再有効化して生成と再現を脱結合するのが本質的(別チケット候補)。

他の形式にエクスポート: PDF Atom