【问题标题】:How to add a pieces to a checkers board using Kotlin and TornadoFX如何使用 Kotlin 和 TornadoFX 将棋子添加到棋盘
【发布时间】:2020-11-07 20:33:40
【问题描述】:

我目前正在尝试使用 TornadoFX 在 Kotlin 中开发一个小棋盘游戏,主要用于练习目的。但我目前正在努力将这些碎片添加到董事会中。我尝试了许多对我来说似乎合乎逻辑的不同方法,但每次它都给我一个错误消息或根本不工作。因此,当我没有想法或可能的解决方案时,我现在在 stackoverflow 上寻求帮助(有史以来第一次 :-))。

从控制器向棋盘添加棋子的最佳方式或最惯用的方式是什么?我还应该提到我之前没有真正使用过 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 BoardController(): Controller()
{
    private val board: BoardView by inject()

    fun startGame()
    {
        // How to place a Stone (aka piece) from here?
    }
}

非常感谢任何帮助

【问题讨论】:

  • 欢迎您!对不起,但你问的不是我们这里的事。请查看intro tour 中的on topichow to ask。 “告诉我如何解决这个编码问题?”与 Stack Overflow 无关。您必须诚实地尝试解决方案,然后询问有关您的实施的具体问题。 Stack Overflow 并非旨在取代现有教程或文档,也不是为您完成研究、设计或编码工作的方式。
  • @Steve 抱歉,但即使在查看了链接之后,我仍然没有发现我的问题有任何问题。我也不想外包我的研究。 TornadoFX 文档非常基础,不是很深入,而且我还没有在网络上找到其他有类似问题的人。我不是在这里要求完美的工作代码,关于 TornadoFX 的什么方法和/或概念的一点提示或提示,我应该看看谁就可以了。我不会在这里问我是否还有其他想法或解决方案......
  • 类比——人们在这里回答最基本的 R 问题。我不明白为什么这个 Q 有什么不同。我承认:这很深奥。

标签: kotlin tornadofx


【解决方案1】:

经过一周的工作,我终于找到了解决方案。我会把它贴在这里,以防将来有人需要它。

我在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)
                }
             }
         }
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 2019-10-11
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多