- 根据鼠标监听事件绘制围棋棋盘
运行效果图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201231221244533.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NDY3NzIw,size_16,color_FFFFFF,t_70)
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class ChessGame extends Frame{
ChessBoard b=new ChessBoard();
public ChessGame() {
setBackground(Color.LIGHT_GRAY);
setLayout(new BorderLayout());
add("Center",b);
Panel p=new Panel();
Button pass=new Button("放弃一次");
Button color=new Button("变棋盘背景");
Button fail=new Button("认输");
Button back=new Button("悔棋");
p.setLayout(new GridLayout(8,1,10,10));
p.add(new Label());
p.add(pass);
p.add(color);
p.add(fail);
p.add(back);
add("East",p);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
}
});
setSize(500,450);
setVisible(true);
}
public static void main(String[] args) {
new ChessGame();
}
}
class ChessBoard extends Canvas{
int chess[][]=new int[19][19];
int sx=20,sy=20;
int w=20;
int cx=200,cy=200;
int player=1;
public ChessBoard() {
this.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
Graphics g=getGraphics();
g.setXORMode(ChessBoard.this.getBackground());
g.setColor(Color.RED);
g.fillRect(cx-w/4, cy-w/4, w/2, w/2);
if(e.getX()%20>=10) {
cx=(e.getX()/10+1)*10;
}else {
cx=e.getX()/10*10;
}
if(e.getY()%20>=10) {
cy=(e.getY()/10+1)*10;
}else {
cy=e.getY()/10*10;
}
g.fillRect(cx-w/4,cy-w/4, w/2, w/2);
}
});
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
Graphics g=getGraphics();
if(chess[(cx-sx)/w][(cy-sy)/w]==0) {
if(player==1) {
g.setColor(Color.BLACK);
chess[(cx-sx)/w][(cy-sy)/w]=1;
}else {
g.setColor(Color.WHITE);
chess[(cx-sx)/w][(cy-sy)/w]=2;
}
g.fillOval(cx-w/2+1,cy-w/2+1, w-2, w-2);
g.setXORMode(ChessBoard.this.getBackground());
g.setColor(Color.RED);
g.fillRect(cx-w/4,cy-w/4, w/2, w/2);
player=(player+1)%2;
}
}
});
}
public void paint(Graphics g) {
for(int k=0;k<19;k++) {
g.drawLine(sx, sy+k*w, sx+w*18, sy+k*w);
}
for(int k=0;k<19;k++){
g.drawLine(sx+k*w, sy, sx+k*w, sy+w*18);
}
}
}