案列需求:使用Java写一个五子棋游戏,三个按钮控制黑棋,白棋以及删除棋子,随着鼠标的移动,会有选择框出现。(注:并未实现游戏胜负)
public class five_rows{ private JFrame s=new JFrame("五子棋游戏"); //声明四个BufferedImage对象表示四个图片 BufferedImage table; BufferedImage white; BufferedImage black; BufferedImage selected; //声明棋盘的宽和高 final int table_width=535; final int table_height=536; //横向和纵向可以放多少个棋子 final int borad_size=15; //声明每个棋子占用棋盘的比率 final int rate=table_width/borad_size; //声明变量,记录棋子x和y方向边距的偏移量 final int x_pian=5; final int y_pian=6; //定义二维数组,记录棋子,=0没有棋子,=1是白棋,=2是黑棋 int[][] board=new int[borad_size][borad_size]; //红色选择框的坐标 int sel_x=-1; int sel_y=-1; //记录当前下棋的状态 int board_type=0; //画布 private class can extends JPanel{ @Override public void paint(Graphics g) { //绘制棋盘 g.drawImage(table,0,0,null); //绘制选择框 if (sel_x>0&&sel_y>0){ g.drawImage(selected,x_pian+sel_x*rate,y_pian+sel_y*rate,null); } //绘制棋子 for(int i=0;i<borad_size;i++){ for(int j=-0;j<borad_size;j++){ //绘制黑棋 if(board[i][j]==2){ g.drawImage(black,i*rate+x_pian,y_pian+j*rate,null); } //绘制白棋 if(board[i][j]==1){ g.drawImage(white,i*rate+x_pian,y_pian+j*rate,null); } } } } } can chessboard=new can(); //按钮组件 Panel p=new Panel(); Button whitebutton=new Button("白棋"); Button blackbutton=new Button("黑棋"); Button deletebutton=new Button("删除"); public void init() throws IOException { //开始组装 //点击按钮,被点击的显示绿色,未被点击显示灰色 whitebutton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { board_type=1; whitebutton.setBackground(Color.green); blackbutton.setBackground(Color.gray); deletebutton.setBackground(Color.gray); } }); blackbutton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { board_type=2; blackbutton.setBackground(Color.green); whitebutton.setBackground(Color.gray); deletebutton.setBackground(Color.gray); } }); deletebutton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { board_type=0; deletebutton.setBackground(Color.green); whitebutton.setBackground(Color.gray); blackbutton.setBackground(Color.gray); } }); p.add(whitebutton); p.add(blackbutton); p.add(deletebutton); s.add(p,BorderLayout.SOUTH); //组装棋盘 //初始化图片 table=ImageIO.read(new File("D:\\idea\\project\\pro1\\exercise1\\src\\board.jpg")); black=ImageIO.read(new File("D:\\idea\\project\\pro1\\exercise1\\src\\black.gif")); white=ImageIO.read(new File("D:\\idea\\project\\pro1\\exercise1\\src\\white.gif")); selected=ImageIO.read(new File("D:\\idea\\project\\pro1\\exercise1\\src\\selected.gif")); //随着鼠标移动,选择框移动,处理鼠标移动事件 chessboard.addMouseMotionListener(new MouseAdapter() { @Override public void mouseMoved(MouseEvent e) { //当鼠标移动时会调用该方法 sel_x=(e.getX()-x_pian)/rate; sel_y=(e.getY()-y_pian)/rate; chessboard.repaint(); } }); //处理鼠标点击 chessboard.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { //当鼠标被点击时会调用该方法 int xpos=(e.getX()-x_pian)/rate; int ypos=(e.getY()-y_pian)/rate; board[xpos][ypos]=board_type; chessboard.repaint(); } @Override public void mouseExited(MouseEvent e) { //鼠标离开画布区域被调用 sel_x=-1; sel_y=-1; chessboard.repaint(); } }); chessboard.setPreferredSize(new Dimension(table_width,table_height)); s.add(chessboard); s.pack(); s.setVisible(true); } }