Skip to content

Commit 45765fd

Browse files
committed
Build: switch to Gradle Version Catalog; upgrade Kotlin to 2.3.0-RC3; align kotlin-test via test-junit5; add Gradle Versions Plugin; reorder plugins; Dockerfile honors catalog; fix king check/castling & undo logic; ignore TODO.txt; remove dependency management doc
1 parent 5e02699 commit 45765fd

File tree

11 files changed

+118
-143
lines changed

11 files changed

+118
-143
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,6 @@ Thumbs.db
1919

2020
# Logs
2121
*.log
22+
23+
# Project notes that should never be committed
24+
/src/main/kotlin/dev/tabansi/chess/TODO.txt

.idea/compiler.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 0 additions & 8 deletions
This file was deleted.

Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
FROM eclipse-temurin:25-jdk AS build
55
WORKDIR /workspace
66

7-
# Copy wrapper and build files first to leverage Docker cache
7+
# Copy wrapper, build, and version catalog files first to leverage Docker cache
88
COPY gradlew gradlew.bat ./
99
COPY gradle/wrapper ./gradle/wrapper
10+
COPY gradle/libs.versions.toml ./gradle/libs.versions.toml
1011
COPY settings.gradle.kts build.gradle.kts ./
1112

1213
# Verify wrapper and warm up dependencies

build.gradle.kts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
plugins {
2-
kotlin("jvm") version "2.3.0-RC2"
32
application
4-
id("com.gradleup.shadow") version "9.3.0"
3+
alias(libs.plugins.kotlin.jvm)
4+
alias(libs.plugins.shadow)
5+
alias(libs.plugins.versions)
56
}
67

78
group = "dev.tabansi"
@@ -17,8 +18,8 @@ dependencies {
1718

1819
// Testing
1920
testImplementation(kotlin("test"))
20-
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
21-
testImplementation("org.junit.jupiter:junit-jupiter:5.11.0")
21+
testImplementation(kotlin("test-junit5"))
22+
testImplementation(libs.junit.jupiter)
2223
}
2324

2425
application {

gradle/libs.versions.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[versions]
2+
kotlin = "2.3.0-RC3"
3+
junit = "6.1.0-M1"
4+
shadow = "9.3.0"
5+
6+
[libraries]
7+
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
8+
9+
[plugins]
10+
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
11+
shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }
12+
versions = { id = "com.github.ben-manes.versions", version = "0.51.0" }

settings.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,8 @@
1+
pluginManagement {
2+
repositories {
3+
gradlePluginPortal()
4+
mavenCentral()
5+
}
6+
}
7+
18
rootProject.name = "TerminalChess"

src/main/kotlin/dev/tabansi/chess/Game.kt

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class Game {
1616
private val player1 = Player(PLAYER_1)
1717
private val player2 = Player(PLAYER_2)
1818
private var currentPiece: Piece? = null
19+
private var lastMovedPiece: Piece? = null
1920
private var lastKilledPiece: Piece? = null
2021
private var castled = false
2122

@@ -106,7 +107,7 @@ class Game {
106107
continue
107108
}
108109
if (destInput == "undo") {
109-
turnsSinceUndo = 0
110+
undo()
110111
continue
111112
}
112113

@@ -121,6 +122,7 @@ class Game {
121122

122123
if (!isEmptySpace(x, y)) {
123124
currentPiece!!.doMove(BoardSpace(x, y))
125+
lastMovedPiece = currentPiece
124126
if (turnTracker % 2 == 0) {
125127
lastKilledPiece = player2.getPiece(BoardSpace(x, y))
126128
player2.killPiece(lastKilledPiece)
@@ -135,9 +137,11 @@ class Game {
135137
promotePawn(x, y, player2)
136138
}
137139
turnTracker++
140+
turnsSinceUndo++
138141
} else {
139142
lastKilledPiece = null
140143
currentPiece!!.doMove(BoardSpace(x, y))
144+
lastMovedPiece = currentPiece
141145
castled = false
142146

143147
if (currentPiece is King) {
@@ -257,24 +261,34 @@ class Game {
257261
}
258262

259263
private fun undo() {
260-
if (turnTracker <= 0)
264+
if (turnTracker <= 0) {
261265
println("You can't undo right now. Please enter a valid coordinate.")
266+
return
267+
}
262268

263-
if (turnsSinceUndo == 0)
269+
if (turnsSinceUndo == 0) {
264270
println("\n\nYou can only undo once!\n")
271+
return
272+
}
273+
274+
val pieceToUndo = lastMovedPiece
275+
if (pieceToUndo == null) {
276+
println("No move to undo.")
277+
return
278+
}
265279

266280
if (lastKilledPiece != null) {
267281
if (turnTracker % 2 == 0) {
268-
currentPiece!!.undoMove(lastKilledPiece!!.pieceConstant + player1.player)
282+
pieceToUndo.undoMove(lastKilledPiece!!.pieceConstant + player1.player)
269283
player1.revivePiece(lastKilledPiece!!)
270284
} else {
271-
currentPiece!!.undoMove(lastKilledPiece!!.pieceConstant + player2.player)
285+
pieceToUndo.undoMove(lastKilledPiece!!.pieceConstant + player2.player)
272286
player2.revivePiece(lastKilledPiece!!)
273287
}
274288
} else {
275-
currentPiece!!.undoMove(EMPTY)
276-
if (currentPiece is King) (currentPiece as King).hasMoved = false
277-
if (currentPiece is Rook) (currentPiece as Rook).hasMoved = false
289+
pieceToUndo.undoMove(EMPTY)
290+
if (pieceToUndo is King) (pieceToUndo as King).hasMoved = false
291+
if (pieceToUndo is Rook) (pieceToUndo as Rook).hasMoved = false
278292

279293
if (castled) {
280294
if (turnTracker % 2 == 1) {
@@ -287,11 +301,11 @@ class Game {
287301
}
288302
} else {
289303
if (board[0][5] == ROOK + PLAYER_2) {
290-
(player1.getPiece(BoardSpace(0, 5)) as Rook).hasMoved = false
291-
(player1.getPiece(BoardSpace(0, 5)) as Rook).undoMove(EMPTY)
304+
(player2.getPiece(BoardSpace(0, 5)) as Rook).hasMoved = false
305+
(player2.getPiece(BoardSpace(0, 5)) as Rook).undoMove(EMPTY)
292306
} else if (board[0][3] == ROOK + PLAYER_2) {
293-
(player1.getPiece(BoardSpace(0, 3)) as Rook).hasMoved = false
294-
(player1.getPiece(BoardSpace(0, 3)) as Rook).undoMove(EMPTY)
307+
(player2.getPiece(BoardSpace(0, 3)) as Rook).hasMoved = false
308+
(player2.getPiece(BoardSpace(0, 3)) as Rook).undoMove(EMPTY)
295309
}
296310
}
297311
}

src/main/kotlin/dev/tabansi/chess/Player.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ class Player(val player: String) {
7878

7979
fun revivePiece(piece: Piece) {
8080
for (i in 0 until 16) {
81-
if (pieces[i]!!.active && pieces[i] == piece) {
82-
pieces[i]!!.active = true
81+
val p = pieces[i]
82+
if (p != null && p == piece) {
83+
p.active = true
8384
break
8485
}
8586
}

0 commit comments

Comments
 (0)