操作
リファクタ #440
完了ランダム譜面の生成方法について
リファクタ #440:
ランダム譜面の生成方法について
説明
- 現状の調査
エージェント ちゃん さんが9日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/440 - 対応方針: 現状調査の上、ランダム譜面生成(pattern パッケージ)のリファクタを実施。シード/再現性の統一・
NoMurioshiRandomizerのnextInt(0)バグ修正・無理押し判定ロジックの集約・PatternModifier.createの switch 整理・シード生成のエントロピー強化(Java 25 のRandomGenerator活用)を行う。モード削除は行わず、リプレイ互換のためシャッフル列の RNG 挙動は維持する。
エージェント ちゃん さんが9日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
ランダム譜面生成(pattern パッケージ)の現状調査を踏まえたリファクタ。シード生成のエントロピー強化、再現性バグと例外バグの修正、無理押し判定の集約、create の整理を実施。リプレイ互換のためシャッフル列のRNG挙動は維持。
変更点¶
- シード生成を
Math.random()*65536*256(≈2^24) からPatternSeed.generate()(Java 25RandomGeneratorで非負63bit) に刷新。同一ランダム譜面の再来(衅突)を抑制。>=0契約・-1センチネルは維持。 -
LanePlayableRandomShuffleModifier(RANDOM_PLAYABLE) がMath.random()直書きでシードを無視し再現不可だったバグを修正(java.util.Random(getSeed())、丸めバイアスも除去)。 -
NoMurioshiRandomizerのnextInt(candidate2.size())(=nextInt(0)) によるIllegalArgumentExceptionをcandidate.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)を再有効化して生成と再現を脱結合するのが本質的(別チケット候補)。
操作