All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dererXII.scalashogi_2.13.5.0.2.source-code.StartingPosition.scala Maven / Gradle / Ivy

There is a newer version: 12.1.1
Show newest version
package shogi

import format.forsyth.Sfen

final case class StartingPosition(
    japanese: String,
    english: String,
    sfen: Sfen,
    wikiPath: String,
    moves: String,
    featurable: Boolean = true
) {

  val url = s"https://en.wikipedia.org/wiki/$wikiPath"

  val shortName = english takeWhile (':' !=)

  val fullName = s"$japanese ($english)"

  val initial = sfen == variant.Standard.initialSfen
}

object StartingPosition {

  final case class Category(name: String, positions: List[StartingPosition])

  val handicaps = Category(
    "Handicaps",
    List[StartingPosition](
      StartingPosition(
        "香落ち",
        "Lance",
        Sfen("lnsgkgsn1/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "右香落ち",
        "Right Lance",
        Sfen("1nsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "角落ち",
        "Bishop",
        Sfen("lnsgkgsnl/1r7/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "飛車落ち",
        "Rook",
        Sfen("lnsgkgsnl/7b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "飛香落ち",
        "Rook-Lance",
        Sfen("lnsgkgsn1/7b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "二枚落ち",
        "2-piece",
        Sfen("lnsgkgsnl/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "四枚落ち",
        "4-piece",
        Sfen("1nsgkgsn1/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "六枚落ち",
        "6-piece",
        Sfen("2sgkgs2/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "八枚落ち",
        "8-piece",
        Sfen("3gkg3/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "十枚落ち",
        "10-piece",
        Sfen("4k4/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "歩三兵",
        "3 Pawns",
        Sfen("4k4/9/9/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w 3p 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "裸玉",
        "Naked King",
        Sfen("4k4/9/9/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "トンボ+桂香",
        "Dragonfly + NL",
        Sfen("ln2k2nl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "トンボ+香",
        "Dragonfly + L",
        Sfen("l3k3l/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "トンボ",
        "Dragonfly",
        Sfen("4k4/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "香得",
        "Lance Gained",
        Sfen("lnsgkgsn1/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w L 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "角得",
        "Bishop Gained",
        Sfen("lnsgkgsnl/1r7/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w B 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "飛車得",
        "Rook Gained",
        Sfen("lnsgkgsnl/7b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w R 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "飛香得",
        "Rook-Lance Gained",
        Sfen("lnsgkgsn1/7b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w RL 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "二枚得",
        "2-piece Gained",
        Sfen("lnsgkgsnl/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w RB 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "四枚得",
        "4-piece Gained",
        Sfen("1nsgkgsn1/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w RB2L 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "六枚得",
        "6-piece Gained",
        Sfen("2sgkgs2/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w RB2N2L 1"),
        "Handicap_(shogi)",
        "",
        false
      ),
      StartingPosition(
        "八枚得",
        "8-piece Gained",
        Sfen("3gkg3/9/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w RB2S2N2L 1"),
        "Handicap_(shogi)",
        "",
        false
      )
    )
  )

  val categories = List[Category](handicaps)

  val all: List[StartingPosition] = categories.flatMap(_.positions)

  val initial = StartingPosition("平手", "Initial position", variant.Standard.initialSfen, "Shogi", "")

  def allWithInitial: List[StartingPosition] = initial :: all

  lazy val handicapSfens: List[Sfen] = handicaps.positions.map(_.sfen)

  def isHandicap(sfen: Sfen) =
    handicapSfens.exists(_.truncate == sfen.truncate)

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy