问题描述
我的代码运行了,但是在棋盘顶部看不到石头
谁能帮帮我!!我的目标是让棋盘上的石头[就像游戏曼卡拉]
解决方法
正如 @camickr 在评论中所写,执行此操作的正常方法是让电路板组件绘制其中的内容。
在具有图形用户界面(以及其他)的程序中,您通常应该将绘画代码(视图)与知道要绘画的代码(视图)分开>模型)。这个想法叫做Model-View-Controller。
在这里实现 MVC 意味着您的 Board
类应该知道要绘制什么,或如何绘制它,但不能同时知道两者。我建议有一个
-
BoardPainter extends JPanel
,视图:知道如何自己绘制事物,对于石头可以到达的每个位置都有一个StonePainter
(它也扩展了JPanel
)。它不保留关于在何处绘制什么的信息;相反,它会在每次需要时从MancalaState
询问此信息。当游戏进一步进行时,您还会在此处生成动作:单击源,单击目标, -
MancalaState
将是模型,它知道每个地方有多少颗石头,谁应该移动,决定游戏何时结束,等等。如果您在此处实现toString()
,您可以轻松测试整个游戏是否正常运行,无论它如何绘制。
要将锅 (StonePainter
s) 放置在 BoardPainter
中的正确位置,您可以使用现有的 LayoutManager
(甚至嵌套 JPanel),编写自己的 {{ 1}},或者直接不使用 LayoutManager
并直接从您的 StonePainter
在正确的位置绘制它们。在我看来,最简单的选择是第一个:
BoardPainter
示例输出: