//这次五子棋添加了下棋范围的限定和提示窗口,开始游戏和结束游戏的按钮,还有棋盘绘制,即棋盘不会消失的功能
import javax.swing.*; import java.awt.*; public class goUI extends JPanel{ GoListener gol = new GoListener (); int X = 50, Y = 50, SIZE = 46, ROW = 15, COL = 15; Graphics g; public void showUI(){ JFrame pang =new JFrame(); pang.setTitle("AI五子棋"); pang.setSize(900,800); pang.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); pang.setLocationRelativeTo(null); Color c1=new Color(113, 154, 255); Color c2=new Color(246, 150, 31); JPanel btnpane =new JPanel(); btnpane.setBackground(c1); Dimension dimW=new Dimension(125,0); btnpane.setPreferredSize(dimW); JPanel chesspane =this; chesspane.setBackground(c2); JButton btn1=new JButton("开始游戏"); btn1.setBounds(20,20,100,35); btnpane.add(btn1); btn1.addActionListener(gol); //添加的按钮,要把鼠标监听器加到按钮上才能生效 pang.add(btnpane,BorderLayout.WEST); pang.add(chesspane,BorderLayout.CENTER); pang.setVisible(true); chesspane.addMouseListener (gol); gol.g = chesspane.getGraphics ();} //绘制棋盘方法改成了paint: paint方法 1:在窗体可视化的时候会执行一次 2: 拖动改变窗体尺寸时 会执行 3: 最小化 最大化的时候会执行 public void paint(Graphics g){ Color c2=new Color(246, 150, 31); g.setColor(c2); g.fillRect (0,0,getWidth (),getHeight ()); g.setColor (Color.BLACK); for(int i = 0; i < 16; i++){ g.drawLine (X, Y + i * SIZE, X + SIZE * COL, Y + i * SIZE); g.drawLine (X + i * SIZE, Y, X + i * SIZE, Y + SIZE * ROW); }} public static void main(String[] args){ goUI go = new goUI(); go.showUI(); }}
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; 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; y=(y-Y+SIZE/2)/SIZE; int S=y; y=Y/2+y*SIZE; //对鼠标的点击范围进行判断,限制鼠标点击范围 if(H<0||H>15 || S<0||S>15){ System.out.println ("此处不能下棋"); JOptionPane.showMessageDialog (null,"此处不能下棋"); return;} if(chessFlag == 1){ chessFlag = 2; g.setColor (Color.BLACK); } else if(chessFlag == 2){ g.setColor (Color.WHITE); chessFlag = 1;} g.fillOval (x, y, 42, 42);} public void mouseReleased(MouseEvent e){}; public void mouseEntered(MouseEvent e){}; public void mouseExited(MouseEvent e){}; }; //游戏未开始点击棋盘的提示 //鼠标在棋盘范围外点击的提示