如何使用 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)
                }
             }
         }
     }
}