创建一个类,extends(继承) JFrame,
创建一个方法,设计窗口(标题,大小,关闭选项,可视化)
调用画笔方法并重写(画一个棋盘底色,网格)【颜色在画操作前】
创建一个监听器,实现implement MouseListener,并重写方法
在监听器中申明画笔Graphic
获取坐标,将坐标进行取整去余操作得相对坐标
窗体添加监听器,获取Graphic传到监听器
实现轮流下棋if(){换颜色}
利用相对坐标限定范围(坐标验证)
创建一个二维数组16*16
根据相对坐标作为下标,存储棋子数据
下棋前判断是否有棋子
还原坐标,利用还原坐标画实心圆
package review.五子棋;
import javax.swing.*;
import java.awt.*;
1.public class GBUI extends JFrame {
7. GListener gListener=new GListener();
2. public void inUI(){
setTitle("五子棋");
setSize(700,800);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
7. addMouseListener(gListener);
gListener.g=getGraphics();
}
3.@Override
public void paint(Graphics g) {
g.setColor(Color.ORANGE);
g.fillRect(0,0,getWidth(),getHeight());
int X=50,Y=75,R=15,SIZE=35;
for (int i=0;i<=R;i++){
g.setColor(Color.BLACK);
g.drawLine(X,Y+i*SIZE,X+R*SIZE,Y+i*SIZE);
g.drawLine(X+i*SIZE,Y,X+i*SIZE,Y+R*SIZE);
}
}
public static void main(String[] args) {
GBUI gbui=new GBUI();
gbui.inUI();
}
}
package review.五子棋;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
4.public class GListener implements MouseListener {
5. Graphics g;
8.int chessplayer=1;
10.int[][] chessArr=new int[16][16];
@Override
public void mouseClicked(MouseEvent e) {
6.int x=e.getX();
int y=e.getY();
//化整去余
int a=(x-50+(35/2))/35;
int b=(y-75+(35/2))/35;
9.if (a>15||b>15){
JOptionPane.showMessageDialog(null,"无法在此处下棋");
return;
}
12.if (chessArr[a][b]!=0){
JOptionPane.showMessageDialog(null,"该处已有棋子");
return;
}
8.if (chessplayer==1){
g.setColor(Color.BLACK);
chessplayer=2;
} else if (chessplayer==2) {
g.setColor(Color.WHITE);
chessplayer=1;
}
//储存
11. chessArr[a][b]=chessplayer;
//还原
13. int cx=a*35-35/2+50;
int cy=b*35-35/2+75;
g.fillOval(cx,cy,35,35);
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}