为了一个学校项目,我正在使用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' } };
以下是创建普通棋子的方法内容:
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);
}
}
}
可能这不是最干净的代码来实现它,如果有更好的建议,请提出!
现在,真正的问题和我的问题是,我们必须能够一次性拖放这些多个形状到面板上的另一个位置,但我真的不知道如何处理。
希望您能给我提供任何帮助,将不胜感激!
提前致谢!