refactor(core): add IO module and integrate GameContext import/export traits
This commit is contained in:
Generated
+1
@@ -12,6 +12,7 @@
|
|||||||
<option value="$PROJECT_DIR$/modules" />
|
<option value="$PROJECT_DIR$/modules" />
|
||||||
<option value="$PROJECT_DIR$/modules/api" />
|
<option value="$PROJECT_DIR$/modules/api" />
|
||||||
<option value="$PROJECT_DIR$/modules/core" />
|
<option value="$PROJECT_DIR$/modules/core" />
|
||||||
|
<option value="$PROJECT_DIR$/modules/io" />
|
||||||
<option value="$PROJECT_DIR$/modules/rule" />
|
<option value="$PROJECT_DIR$/modules/rule" />
|
||||||
<option value="$PROJECT_DIR$/modules/ui" />
|
<option value="$PROJECT_DIR$/modules/ui" />
|
||||||
</set>
|
</set>
|
||||||
|
|||||||
Generated
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
<option name="deprecationWarnings" value="true" />
|
<option name="deprecationWarnings" value="true" />
|
||||||
<option name="uncheckedWarnings" value="true" />
|
<option name="uncheckedWarnings" value="true" />
|
||||||
</profile>
|
</profile>
|
||||||
<profile name="Gradle 2" modules="NowChessSystems.modules.core.main,NowChessSystems.modules.core.scoverage,NowChessSystems.modules.core.test,NowChessSystems.modules.rule.main,NowChessSystems.modules.rule.scoverage,NowChessSystems.modules.rule.test,NowChessSystems.modules.ui.main,NowChessSystems.modules.ui.scoverage,NowChessSystems.modules.ui.test">
|
<profile name="Gradle 2" modules="NowChessSystems.modules.core.main,NowChessSystems.modules.core.scoverage,NowChessSystems.modules.core.test,NowChessSystems.modules.io.main,NowChessSystems.modules.io.scoverage,NowChessSystems.modules.io.test,NowChessSystems.modules.rule.main,NowChessSystems.modules.rule.scoverage,NowChessSystems.modules.rule.test,NowChessSystems.modules.ui.main,NowChessSystems.modules.ui.scoverage,NowChessSystems.modules.ui.test">
|
||||||
<option name="deprecationWarnings" value="true" />
|
<option name="deprecationWarnings" value="true" />
|
||||||
<option name="uncheckedWarnings" value="true" />
|
<option name="uncheckedWarnings" value="true" />
|
||||||
<parameters>
|
<parameters>
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
package de.nowchess.api.game
|
|
||||||
|
|
||||||
import de.nowchess.api.board.{Color, Square}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Castling availability flags for one side.
|
|
||||||
*
|
|
||||||
* @param kingSide king-side castling still legally available
|
|
||||||
* @param queenSide queen-side castling still legally available
|
|
||||||
*/
|
|
||||||
@deprecated("Use de.nowchess.api.board.CastlingRights via GameContext.", "NCS-22")
|
|
||||||
final case class CastlingRights(kingSide: Boolean, queenSide: Boolean)
|
|
||||||
|
|
||||||
object CastlingRights:
|
|
||||||
val None: CastlingRights = CastlingRights(kingSide = false, queenSide = false)
|
|
||||||
val Both: CastlingRights = CastlingRights(kingSide = true, queenSide = true)
|
|
||||||
|
|
||||||
/** Outcome of a finished game. */
|
|
||||||
@deprecated("Use GameContext and derive game lifecycle from rules/engine state.", "NCS-22")
|
|
||||||
enum GameResult:
|
|
||||||
case WhiteWins
|
|
||||||
case BlackWins
|
|
||||||
case Draw
|
|
||||||
|
|
||||||
/** Lifecycle state of a game. */
|
|
||||||
@deprecated("Use GameContext and engine events for lifecycle handling.", "NCS-22")
|
|
||||||
enum GameStatus:
|
|
||||||
case NotStarted
|
|
||||||
case InProgress
|
|
||||||
case Finished(result: GameResult)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A FEN-compatible snapshot of board and game state.
|
|
||||||
*
|
|
||||||
* The board is represented as a FEN piece-placement string (rank 8 to rank 1,
|
|
||||||
* separated by '/'). All other fields mirror standard FEN fields.
|
|
||||||
*
|
|
||||||
* @param piecePlacement FEN piece-placement field, e.g.
|
|
||||||
* "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR"
|
|
||||||
* @param activeColor side to move
|
|
||||||
* @param castlingWhite castling rights for White
|
|
||||||
* @param castlingBlack castling rights for Black
|
|
||||||
* @param enPassantTarget square behind the double-pushed pawn, if any
|
|
||||||
* @param halfMoveClock plies since last capture or pawn advance (50-move rule)
|
|
||||||
* @param fullMoveNumber increments after Black's move, starts at 1
|
|
||||||
* @param status current lifecycle status of the game
|
|
||||||
*/
|
|
||||||
@deprecated("Use GameContext for runtime state; keep GameState only for legacy compatibility.", "NCS-22")
|
|
||||||
final case class GameState(
|
|
||||||
piecePlacement: String,
|
|
||||||
activeColor: Color,
|
|
||||||
castlingWhite: CastlingRights,
|
|
||||||
castlingBlack: CastlingRights,
|
|
||||||
enPassantTarget: Option[Square],
|
|
||||||
halfMoveClock: Int,
|
|
||||||
fullMoveNumber: Int,
|
|
||||||
status: GameStatus
|
|
||||||
)
|
|
||||||
|
|
||||||
object GameState:
|
|
||||||
/** Standard starting position. */
|
|
||||||
val initial: GameState = GameState(
|
|
||||||
piecePlacement = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR",
|
|
||||||
activeColor = Color.White,
|
|
||||||
castlingWhite = CastlingRights.Both,
|
|
||||||
castlingBlack = CastlingRights.Both,
|
|
||||||
enPassantTarget = None,
|
|
||||||
halfMoveClock = 0,
|
|
||||||
fullMoveNumber = 1,
|
|
||||||
status = GameStatus.InProgress
|
|
||||||
)
|
|
||||||
@@ -39,6 +39,7 @@ dependencies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
implementation(project(":modules:api"))
|
implementation(project(":modules:api"))
|
||||||
|
implementation(project(":modules:io"))
|
||||||
implementation(project(":modules:rule"))
|
implementation(project(":modules:rule"))
|
||||||
|
|
||||||
testImplementation(platform("org.junit:junit-bom:5.13.4"))
|
testImplementation(platform("org.junit:junit-bom:5.13.4"))
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
plugins {
|
||||||
|
id("scala")
|
||||||
|
id("org.scoverage") version "8.1"
|
||||||
|
}
|
||||||
|
|
||||||
|
group = "de.nowchess"
|
||||||
|
version = "1.0-SNAPSHOT"
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
val versions = rootProject.extra["VERSIONS"] as Map<String, String>
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
scala {
|
||||||
|
scalaVersion = versions["SCALA3"]!!
|
||||||
|
}
|
||||||
|
|
||||||
|
scoverage {
|
||||||
|
scoverageVersion.set(versions["SCOVERAGE"]!!)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType<ScalaCompile> {
|
||||||
|
scalaCompileOptions.additionalParameters = listOf("-encoding", "UTF-8")
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
|
||||||
|
implementation("org.scala-lang:scala3-compiler_3") {
|
||||||
|
version {
|
||||||
|
strictly(versions["SCALA3"]!!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
implementation("org.scala-lang:scala3-library_3") {
|
||||||
|
version {
|
||||||
|
strictly(versions["SCALA3"]!!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
implementation(project(":modules:api"))
|
||||||
|
|
||||||
|
testImplementation(platform("org.junit:junit-bom:5.13.4"))
|
||||||
|
testImplementation("org.junit.jupiter:junit-jupiter")
|
||||||
|
testImplementation("org.scalatest:scalatest_3:${versions["SCALATEST"]!!}")
|
||||||
|
testImplementation("co.helmethair:scalatest-junit-runner:${versions["SCALATEST_JUNIT"]!!}")
|
||||||
|
|
||||||
|
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.test {
|
||||||
|
useJUnitPlatform {
|
||||||
|
includeEngines("scalatest")
|
||||||
|
testLogging {
|
||||||
|
events("skipped", "failed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finalizedBy(tasks.reportScoverage)
|
||||||
|
}
|
||||||
|
tasks.reportScoverage {
|
||||||
|
dependsOn(tasks.test)
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package de.nowchess.io
|
||||||
|
|
||||||
|
import de.nowchess.api.game.GameContext
|
||||||
|
|
||||||
|
trait GameContextExport {
|
||||||
|
|
||||||
|
def exportGameContext(context: GameContext): String
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package de.nowchess.io
|
||||||
|
|
||||||
|
import de.nowchess.api.game.GameContext
|
||||||
|
|
||||||
|
trait GameContextImport {
|
||||||
|
|
||||||
|
def importGameContext(input: String): GameContext
|
||||||
|
|
||||||
|
}
|
||||||
+7
-1
@@ -1,2 +1,8 @@
|
|||||||
rootProject.name = "NowChessSystems"
|
rootProject.name = "NowChessSystems"
|
||||||
include("modules:core", "modules:api", "modules:ui", "modules:rule")
|
include(
|
||||||
|
"modules:core",
|
||||||
|
"modules:api",
|
||||||
|
"modules:io",
|
||||||
|
"modules:rule",
|
||||||
|
"modules:ui",
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user