如何使用 Kotlin 和 TornadoFX 将棋子添加到跳棋盘
How to add a pieces to a checkers board using Kotlin and TornadoFX
我目前正在尝试使用 TornadoFX 在 Kotlin 中开发一个小棋盘游戏,主要用于练习目的。但我目前正在努力将棋子添加到棋盘上。我尝试了许多对我来说似乎合乎逻辑的不同方式,但每次它的以太给我一条错误消息或根本不工作。因此,当我 运行 没有想法或可能的解决方案时,我现在在这里寻求有关 Whosebug 的帮助(有史以来第一次 :-))。
从控制器向棋盘添加棋子的最佳方式或最惯用的方式是什么?我还应该提到,我以前没有真正使用过 JavaFX,所以我正在从头开始学习 TornadoFX。
这是我的看板视图:
class BoardView : View("BoardView")
{
private val numberOfCells = 8
private val cellSize = 100.0
private val controller: BoardController by inject()
override val root = pane {
prefHeight = cellSize * numberOfCells
prefWidth = cellSize * numberOfCells
gridpane {
for (y in 0 until numberOfCells)
{
row {
for (x in 0 until numberOfCells)
{
if ((x + y) % 2 == 0)
{
add(ChessCell(cellSize, true, x, y))
}
else
{
add(ChessCell(cellSize, false, x, y))
}
}
}
}
}
}
}
我的作品片段:
class Stone(light: Boolean, x: Double, y: Double): Fragment()
{
private val colorLight = c("E4E4E4")
private val colorDark = c("1B1B1B")
override val root = pane {
circle {
fill = if (light)
{
colorLight
}
else
{
colorDark
}
radius = 30.0
centerY = y
centerX = x
}
}
}
最后是我的控制器 class:
class BoardController(): Controller()
{
private val board: BoardView by inject()
fun startGame()
{
// How to place a Stone (aka piece) from here?
}
}
非常感谢任何帮助<3
经过一周的努力,我终于找到了解决方案。我会post这里,以备将来有人需要。
我在 BoardView
中添加了以下函数:
fun placeStone(light: Boolean, xPos: Double, yPos: Double)
{
with(root)
{
this += Stone(light, xPos, yPos)
}
}
然后我在 BoardController
:
中更改了函数 startGame()
fun startGame()
{
for (x in 0 until 8)
{
for (y in 0 until 8)
{
if ((x + y) % 2 != 0)
{
if (y < 3)
{
board.placeStone(false, x, y)
}
else if (y > 4)
{
board.placeStone(true, x, y)
}
}
}
}
}
我目前正在尝试使用 TornadoFX 在 Kotlin 中开发一个小棋盘游戏,主要用于练习目的。但我目前正在努力将棋子添加到棋盘上。我尝试了许多对我来说似乎合乎逻辑的不同方式,但每次它的以太给我一条错误消息或根本不工作。因此,当我 运行 没有想法或可能的解决方案时,我现在在这里寻求有关 Whosebug 的帮助(有史以来第一次 :-))。
从控制器向棋盘添加棋子的最佳方式或最惯用的方式是什么?我还应该提到,我以前没有真正使用过 JavaFX,所以我正在从头开始学习 TornadoFX。
这是我的看板视图:
class BoardView : View("BoardView")
{
private val numberOfCells = 8
private val cellSize = 100.0
private val controller: BoardController by inject()
override val root = pane {
prefHeight = cellSize * numberOfCells
prefWidth = cellSize * numberOfCells
gridpane {
for (y in 0 until numberOfCells)
{
row {
for (x in 0 until numberOfCells)
{
if ((x + y) % 2 == 0)
{
add(ChessCell(cellSize, true, x, y))
}
else
{
add(ChessCell(cellSize, false, x, y))
}
}
}
}
}
}
}
我的作品片段:
class Stone(light: Boolean, x: Double, y: Double): Fragment()
{
private val colorLight = c("E4E4E4")
private val colorDark = c("1B1B1B")
override val root = pane {
circle {
fill = if (light)
{
colorLight
}
else
{
colorDark
}
radius = 30.0
centerY = y
centerX = x
}
}
}
最后是我的控制器 class:
class BoardController(): Controller()
{
private val board: BoardView by inject()
fun startGame()
{
// How to place a Stone (aka piece) from here?
}
}
非常感谢任何帮助<3
经过一周的努力,我终于找到了解决方案。我会post这里,以备将来有人需要。
我在 BoardView
中添加了以下函数:
fun placeStone(light: Boolean, xPos: Double, yPos: Double)
{
with(root)
{
this += Stone(light, xPos, yPos)
}
}
然后我在 BoardController
:
startGame()
fun startGame()
{
for (x in 0 until 8)
{
for (y in 0 until 8)
{
if ((x + y) % 2 != 0)
{
if (y < 3)
{
board.placeStone(false, x, y)
}
else if (y > 4)
{
board.placeStone(true, x, y)
}
}
}
}
}