用Java写一个简单的五子棋小游戏

案列需求:使用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);
    }

}

猜你喜欢

转载自blog.csdn.net/gaoqiandr/article/details/128678916