Java Swing 棋盘游戏:绘制棋盘、棋子及暂停功能实现
public void paintComponent(Graphics g) {
super.paintComponent(g);//画棋盘
int imgWidth = img.getWidth(this);
int imgHeight = img.getHeight(this);//获得图片的宽度与高度
int FWidth = getWidth();
int FHeight = getHeight();//获得窗口的宽度与高度
int x = (FWidth - imgWidth) / 2;
int y = (FHeight - imgHeight) / 2;
g.drawImage(img, x, y, null);
for (int i = 0; i <= ROWS; i++) {//画横线
for (int j = 0; j < COLS; j++) {
g.drawLine(MARGIN, MARGIN + i * GRID_SPAN, MARGIN + COLS * GRID_SPAN, MARGIN + i * GRID_SPAN);
}
}
//判断游戏是否暂停,如果暂停则不进行绘制
if (!isPaused) {//如果游戏未暂停,进行绘制
for (int i = 0; i <= COLS; i++) {//画竖线
g.drawLine(MARGIN + i * GRID_SPAN, MARGIN, MARGIN + i * GRID_SPAN, MARGIN + ROWS * GRID_SPAN);
}
//画棋子
for (int i = 0; i < chessCount; i++) {
//网格交叉点x,y坐标
int xPos = chessList[i].getX() * GRID_SPAN + MARGIN;
int yPos = chessList[i].getY() * GRID_SPAN + MARGIN;
g.setColor(chessList[i].getColor());//设置颜色
colortemp = chessList[i].getColor();
if (colortemp == Color.black) {
RadialGradientPaint paint = new RadialGradientPaint(xPos - Point.DIAMETER / 2 + 25, yPos - Point.DIAMETER / 2 + 10, 20, new float[]{0f, 1f},
new Color[]{Color.WHITE, Color.BLACK});
((Graphics2D) g).setPaint(paint);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT);
} else if (colortemp == Color.white) {
RadialGradientPaint paint = new RadialGradientPaint(xPos - Point.DIAMETER / 2 + 25, yPos - Point.DIAMETER / 2 + 10, 70, new float[]{0f, 1f},
new Color[]{Color.WHITE, Color.BLACK});
((Graphics2D) g).setPaint(paint);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT);
}
Ellipse2D e = new Ellipse2D.Float(xPos - Point.DIAMETER / 2, yPos - Point.DIAMETER / 2, 34, 35);
((Graphics2D) g).fill(e);
//标记最后一个棋子的红矩形框
}
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == pauseBtn) {//点击了暂停按钮
isPaused = true;//设置游戏状态为暂停
JOptionPane.showMessageDialog(this, "游戏已暂停,请点击继续按钮继续游戏", "提示", JOptionPane.INFORMATION_MESSAGE);
} else if (e.getSource() == resumeBtn) {//点击了继续按钮
isPaused = false;//设置游戏状态为继续
JOptionPane.showMessageDialog(this, "请继续下棋", "提示", JOptionPane.INFORMATION_MESSAGE);
}
}
public void mouseClicked(MouseEvent e) {
//判断游戏是否暂停,如果暂停则不进行下棋
if (isPaused) {
JOptionPane.showMessageDialog(this, "游戏已暂停,请点击继续按钮继续游戏", "提示", JOptionPane.INFORMATION_MESSAGE);
return;
}
//下棋代码
...
}
原文地址: https://www.cveoy.top/t/topic/ozVe 著作权归作者所有。请勿转载和采集!