//本次优化添加了数组的概念,并且增加了棋子重绘功能,让棋子不会消失 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import javax.swing.*; public class GoListener implements MouseListener , ActionListener { int X = 50, Y = 50, SIZE = 46, ROW = 15, COL = 15; Graphics g; int chessFlag = 0; int[][] arr=new int[16][16]; public void mouseClicked(MouseEvent e){}; public void actionPerformed(ActionEvent e){ System.out.println("按钮被点击了"); String btnStr = e.getActionCommand (); JButton btn = (JButton) e.getSource (); if(btnStr.equals ("开始游戏")){ chessFlag=1; btn.setText ("结束游戏"); }else if(btnStr.equals ("结束游戏")){ chessFlag=0; btn.setText ("开始游戏"); } } @Override public void mousePressed(MouseEvent e){ if(chessFlag==0){ System.out.println ("游戏未开始"); JOptionPane.showMessageDialog (null,"游戏未开始"); return;} int x=e.getX(); int y=e.getY(); x=(x-X+SIZE/2)/SIZE; int H=x; x=X/2+x*SIZE+4; y=(y-Y+SIZE/2)/SIZE; int S=y; y=Y/2+y*SIZE+4; if(H<0||H>15 || S<0||S>15){ System.out.println ("此处不能下棋"); JOptionPane.showMessageDialog (null,"此处不能下棋"); return;} //对棋子位置判断 if(arr[H][S]!=0){ JOptionPane.showMessageDialog (null,"此处已有棋子"); return; } //更改数组数据,让数组记录棋子位置 if(chessFlag == 1){ arr[H][S]=chessFlag; chessFlag = 2; g.setColor (Color.BLACK); } else if(chessFlag == 2){ arr[H][S]=chessFlag; g.setColor (Color.WHITE); chessFlag = 1;} g.fillOval (x, y, 42, 42);} public void mouseReleased(MouseEvent e){}; //鼠标进入窗口时让棋子重绘,达到棋子在游戏过程中不会消失的目的 public void mouseEntered(MouseEvent e){ //创建二维数组 for(int i=0;i<arr.length;i++){ for(int j=0;j<arr[i].length;j++){ int n =arr[i][j]; //判断数组中的0是否被改写 if(n!=0){ if(n==1){ g.setColor (Color.BLACK); }else if(n==2){ g.setColor (Color.WHITE); } //获取数组内容,即棋子坐标,并在棋盘上重绘 int chessX = j*SIZE+X/2+4; int chessY = i*SIZE+Y/2+4; g.fillOval(chessY, chessX, 42, 42); } }}} public void mouseExited(MouseEvent e){};}
//利用数组的概念判断鼠标点击位置是否有棋子
//鼠标移出后窗口后棋子消失
//鼠标进入窗口后棋子重绘