パッケージ com.lmt.lib.bms.bemusic

クラス BeMusicNoteLayout

  • すべての実装されたインタフェース:
    Comparable<BeMusicNoteLayout>

    public class BeMusicNoteLayout
    extends Object
    implements Comparable<BeMusicNoteLayout>
    ノート配置のレイアウトを表現するクラスです。

    当クラスでは、レーン内の各入力デバイスのアサインを仮想的に入れ替え、入れ替え後の入力デバイスにノートが 割り当たっているように見せる役割を果たします。この機能を用いることで譜面のノートをデータ的に変更することなく ノートの入れ替えを実現することが可能になります。

    • フィールドの詳細

      • PATTERN_PRIMARY_REGULAR

        public static final String PATTERN_PRIMARY_REGULAR
        主レーンにおける正規配置パターン
        関連項目:
        定数フィールド値
      • PATTERN_PRIMARY_MIRROR

        public static final String PATTERN_PRIMARY_MIRROR
        主レーンにおけるミラー配置パターン
        関連項目:
        定数フィールド値
      • PATTERN_SECONDARY_REGULAR

        public static final String PATTERN_SECONDARY_REGULAR
        副レーンにおける正規配置パターン
        関連項目:
        定数フィールド値
      • PATTERN_SECONDARY_MIRROR

        public static final String PATTERN_SECONDARY_MIRROR
        副レーンにおけるミラー配置パターン
        関連項目:
        定数フィールド値
      • SP_REGULAR

        public static final BeMusicNoteLayout SP_REGULAR
        シングルプレーの正規レイアウト
      • SP_MIRROR

        public static final BeMusicNoteLayout SP_MIRROR
        シングルプレーのミラーレイアウト
      • DP_REGULAR

        public static final BeMusicNoteLayout DP_REGULAR
        ダブルプレーの正規レイアウト
    • コンストラクタの詳細

      • BeMusicNoteLayout

        public BeMusicNoteLayout​(String layout)
        シングルプレー用のノートレイアウトオブジェクトを構築します。

        レイアウトは主レーンのスイッチ1~7を表す'1'~'7'の文字とスクラッチを表す'S'の文字で指定します。 レイアウトは7または8文字で指定し、スクラッチのみ省略が可能です。 スクラッチを指定する場合、スイッチとスクラッチを含めたレイアウトが行えます。スクラッチにアサインするノートは 8文字目に記述してください。

        1つの入力デバイスを複数にアサインすることはできません。そのような指定があった場合は例外をスローします。

        パラメータ:
        layout - 主レーンのレイアウト文字列
        例外:
        NullPointerException - layoutがnull
        IllegalArgumentException - レイアウト記述ルール違反
      • BeMusicNoteLayout

        public BeMusicNoteLayout​(String primary,
                                 String secondary)
        ノートレイアウトオブジェクトを構築します。

        主レーンのレイアウトはスイッチ1~7を表す'1'~'7'の文字とスクラッチを表す'S'の文字で指定します。 副レーンのレイアウトはスイッチ1~7を表す'A'~'G'の文字とスクラッチを表す'S'の文字で指定します。

        レイアウトは7または8文字で指定し、スクラッチのみ省略が可能です。 スクラッチを指定する場合、スイッチとスクラッチを含めたレイアウトが行えます。スクラッチにアサインするノートは 8文字目に記述してください。

        1つのノートを複数にアサインすることはできません。そのような指定があった場合は例外をスローします。

        副レーンのレイアウトを省略(null指定)するとシングルプレー用、指定するとダブルプレー用の ノートレイアウトオブジェクトとなります。主レーンに副レーンのレイアウトを指定すると両者を 入れ替えるレイアウト(FLIP)を構築することができます。ただし、シングルプレー用レイアウトで副レーンの レイアウトを指定することはできません。指定すると例外がスローされます。

        パラメータ:
        primary - 主レーンのレイアウト文字列
        secondary - 副レーンのレイアウト文字列
        例外:
        NullPointerException - primaryがnull
        IllegalArgumentException - 主レーンのレイアウト記述ルール違反
        IllegalArgumentException - 副レーンのレイアウト記述ルール違反
        IllegalArgumentException - 主レーンに副レーンのレイアウト指定時、副レーンのレイアウトが主レーンのレイアウトではない
    • メソッドの詳細

      • generateAnyPatterns

        public static String generateAnyPatterns​(BeMusicLane lane)
        指定レーン用のいずれかのレイアウトパターンを生成します。

        当メソッドはスイッチのみの全レイアウトパターン5040種類の中から任意のレイアウトをランダムで1つ生成します。 スクラッチのレイアウト変更は行われないので注意してください。

        パラメータ:
        lane - レイアウトパターン生成対象レーン
        戻り値:
        指定用レイアウトパターン
        例外:
        NullPointerException - laneがnull
      • generateAllPatterns

        public static List<String> generateAllPatterns​(BeMusicLane lane)
        指定レーン用の全てのレイアウトパターンを生成します。

        当メソッドはスイッチのみの全レイアウトパターン5040種類全てを生成します。 スクラッチのレイアウト変更は行われないので注意してください。

        パラメータ:
        lane - レイアウトパターン生成対象レーン
        戻り値:
        指定レーン用の全レイアウトパターンリスト
        例外:
        NullPointerException - laneがnull
      • generateAllRotatePatterns

        public static List<String> generateAllRotatePatterns​(BeMusicLane lane)
        指定レーン用のローテートレイアウトパターンを生成します。

        ローテートレイアウトパターンとは、正規、またはミラーパターンを右方向にずらした合計12個のレイアウトパターン のことを指します。ただし、このパターンリストに正規・ミラーパターンは含まれません。 また、スクラッチのレイアウト変更は行われないので注意してください。

        パラメータ:
        lane - レイアウトパターン生成対象レーン
        戻り値:
        指定レーン用のローテートレイアウトパターンリスト
        例外:
        NullPointerException - laneがnull
      • equals

        public boolean equals​(Object obj)
        レイアウトパターンの比較を行います。

        当メソッドでは同じレイアウトパターンを指定したかどうかを比較します。 従って、スクラッチを指定したかどうかも比較対象となります。例えば「1234567」「1234567S」はレイアウト変更結果は 全く同じになりますが、レイアウトパターンとしては異なるものとして認識されます。

        オーバーライド:
        equals クラス内 Object
        パラメータ:
        obj - 比較対象レイアウト
        戻り値:
        このオブジェクトと指定レイアウトのレイアウトパターンが同じであればtrue
      • hashCode

        public int hashCode()
        オーバーライド:
        hashCode クラス内 Object
      • toString

        public String toString()
        レイアウトの文字列表現を返します。

        具体的にはレイアウトパターン文字列が返されます。 ダブルプレー用レイアウトでは主レーン用と副レーン用のレイアウトパターン文字列を結合した文字列が 返されます。

        オーバーライド:
        toString クラス内 Object
        戻り値:
        レイアウトの文字列表現
      • compareTo

        public int compareTo​(BeMusicNoteLayout o)
        レイアウトパターンの比較を行います。

        比較のソースとしてレイアウトオブジェクト構築時に指定されたレイアウトパターンを用います。 主レーンのレイアウトパターンが同じ場合、副レーンのレイアウトパターンで比較を行います。 このようなケースではダブルプレー用のレイアウトのほうが大きいと判定されます。

        定義:
        compareTo インタフェース内 Comparable<BeMusicNoteLayout>
        パラメータ:
        o - 比較対象レイアウト
        戻り値:
        比較対象レイアウトと等価の場合0、小さければ負の値、大きければ正の値
        例外:
        NullPointerException - oがnull
      • get

        public final BeMusicDevice get​(BeMusicDevice before)
        レイアウトパターンに従ってマッピングされた入力デバイスを取得します。

        引数の入力デバイスはレイアウト変更前の正規の入力デバイスを指定します。戻り値ではレイアウトパターンに従って 変更された入力デバイスを返します。

        シングルプレー用レイアウトで副レーンの入力デバイスを指定しても効果はありません。

        パラメータ:
        before - レイアウト変更前のノートを示す入力デバイス
        戻り値:
        レイアウト変更後のノートを示す入力デバイス
        例外:
        NullPointerException - beforeがnull
      • getPrimaryPattern

        public final String getPrimaryPattern()
        主レーン用レイアウトパターンを取得します。

        当メソッドは、オブジェクト構築時に指定したレイアウトパターンを返します。

        戻り値:
        主レーン用レイアウトパターン
      • getSecondaryPattern

        public final String getSecondaryPattern()
        副レーン用レイアウトパターンを取得します。

        当メソッドは、レイアウトオブジェクト構築時に指定したレイアウトパターンを返します。シングルプレー用レイアウトでは 副レーンのレイアウトパターンがnullで返ることに注意してください。

        戻り値:
        副レーン用レイアウトパターン
      • isSinglePlayLayout

        public final boolean isSinglePlayLayout()
        このレイアウトがシングルプレー用かどうかを判定します。
        戻り値:
        このレイアウトがシングルプレー用ならtrue
      • isDoublePlayLayout

        public final boolean isDoublePlayLayout()
        このレイアウトがダブルプレー用かどうかを判定します。
        戻り値:
        このレイアウトがダブルプレー用ならtrue
      • isFlip

        public final boolean isFlip()
        主レーンと副レーンが入れ替わった状態(FLIP)であるかを判定します。

        当メソッドはシングルプレー用レイアウトでは必ずfalseを返します。

        戻り値:
        このレイアウトがFLIPの場合true