gpt4 book ai didi

棋盘上的 java2D 棋子拖放

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:35:50 25 4
gpt4 key购买 nike

为了一个学校项目,我正在用 java 制作一个棋盘。

有一些限制,因为我们不能为任何棋子使用图像。我们需要用多种形状制作棋子。

例如,我有一个由圆形和圆形正方形组成的棋子。这是一些代码。这是定义为一组字符的棋盘,每个字符代表棋盘上的一个检查

  private char[][] board = new char[][] { { 'T', 'H', 'B', 'Q', 'K', 'B', 'H', 'T' }, 
{ 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P' },
{ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
{ 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P' },
{ 'T', 'H', 'B', 'Q', 'K', 'B', 'H', 'T' } };

下面是创建普通pawn的方法内容

  for(int i=0; i<8; i++) {
for(int j=0; j<8;j++) {

if(board[j][i] == 'P') {
Ellipse2D.Double ellipse = new Ellipse2D.Double(i * getWidth() / 8 + 20,
j * getHeight() / 8 + 20,
getWidth()/8 - 40,getHeight()/8 - 40);

g2d.setPaint(new GradientPaint(i * getWidth() / 8 , j * getHeight() / 8 + 20, Color.orange, i * getWidth() / 8, j * getHeight() / 8 + 60,
Color.pink, false) );

g2d.fill(ellipse);

RoundRectangle2D.Double roundRect = new RoundRectangle2D.Double(i*getWidth() / 8 + 20,
j*getHeight() / 8 + 10,
getWidth()/8 - 40, getHeight()/8-70,5,5);

g2d.setPaint(new GradientPaint(i * getWidth() / 8 , j * getHeight() / 8 + 20, new Color(20,20,150), i * getWidth() / 8, j * getHeight() / 8 + 60,
new Color(20, 20, 100), false) );

g2d.fill(roundRect);

}
}
}

可能不是最干净的代码,如果有任何建议可以做得更好,请提出建议!

现在,真正的问题,也是我的问题是,我们必须能够同时将这些多个形状拖放到板上的另一个位置,老实说,我完全不知道如何解决这个问题。

非常感谢你们能给我的任何帮助!

提前致谢!

最佳答案

我建议不要使用图像,而是在程序开始时创建一些 BufferedImages 来为您的棋子创建图像。然后将它们添加到 ImageIcons(可以多次使用),并将它们添加到 JLabels(不能)。因此,例如,白色方将有 8 个 JLabel 用于 8 个 pawn,但这些 JLabel 中的每一个都将使用相同的白色 pawn ImageIcon。然后简单地添加代表棋盘上每个单元格的 JLabels JPanels。我会给单元格 JPanels 一个 GridBagLayout,这样 JLabels 就可以毫不费力地添加到它们的中心。

有关此示例,请查看:does-adding-a-jlabel-to-a-jpanel-hide-the-jpanel

关于棋盘上的 java2D 棋子拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8027716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com