开发第一个Java项目—五子棋

第一天实现界面(棋盘,棋子,下棋)功能

构思:

  1. 如何绘制棋盘:可以把棋盘看作横竖交叉的线段,参照之前的绘制直线教程,绘制15✖️15条横竖交叉的线段来构造棋盘
  2. 如何绘制棋子:每个棋子其实就是绘制一个圆 具体画法可以参照前面画圆教程
  3. 黑白双方轮流下棋,注意棋子一定要下在交点上 具体操作看后面代码
  4. 个性化功能:添加背景图
public static final Image bgimg = new ImageIcon("img/bg1.jpg").getImage();

易错点:

  1. 一定要记得重写paint方法,为什么?
    因为每次拖动窗体,缩放窗体等操作会重新调用paint方法,导致你之前下的棋子被抹去,重写paint放大的目的就是为了在重新调用paint方法是重下棋子

  2. 如何将棋子绘制在交点:
    首先我们先通过鼠标监听器获得当前点击的坐标,然后我们知道在两点之前的前1/2应该下在前一个交点,若在后二分之一则应该在后一个交点,规则确定以后我们就可以去写算法了: chessX=(x+SIZE/2-X)/SIZE;
    chessY=(y+SIZE/2-Y)/SIZE;
    这个SIZE指的是棋盘间距 兼 棋子直径

  3. 如何实现黑白轮流下棋
    这个很简单,我们首先定义一个chessflag =0; 然后每次下棋完以后改一下这个值,判断一下即可

具体代码实现:

  1. 绘制窗体
    public void initGoBangMainUI(){
        //this指的是当前类的对象
        this.setTitle("简易五子棋V1.0"); //名称
        this.setSize(1200,1000);  //窗体大小
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setVisible(true);  //可视化
        //加上鼠标监听器
        this.addMouseListener(gl);
        this.addMouseMotionListener(gl);

        //获取 Graphics 画笔 传给监听器对象
        Graphics g =this.getGraphics();
        gl.setGraphics(g);
    }

  1. 绘制棋子,以及黑白轮流下棋

    @Override
    @Override
    public void mousePressed(MouseEvent e) {
        int x=e.getX();
        int y=e.getY();// 这边中转一下是因为可能会加一些条件,x,y不一定就是这个x,y

        chessX=(x+SIZE/2-X)/SIZE;
        chessY=(y+SIZE/2-Y)/SIZE;  //算出你的棋子在第几行第几列

        if(chessflag==0){
            g.setColor(Color.WHITE);
            chessArr[chessX][chessY]=1; //保存棋子
            chessflag++;
        }else{
            g.setColor(Color.BLACK);
            chessArr[chessX][chessY]=2; //保存棋子
            chessflag=0;
        } //黑白轮流下棋


        g.fillOval(chessX*SIZE+X-SIZE/2,chessY*SIZE+Y-SIZE/2,SIZE,SIZE);

        System.out.println("按下鼠标按键");

    }
  1. 重写paint方法 paint方法中包含了绘制棋盘以及棋子
   @Override
    public void paint(Graphics g){
        super.paint(g);  //super指的是当前类的父类对象
        //绘制背景图
        g.drawImage(bgimg,X,Y,ROW*SIZE,CLOUM*SIZE,null);
        //绘制棋盘
        for (int i =0; i<=15;i++){
            g.drawLine(X,Y+i*SIZE,X+ROW*SIZE,Y+i*SIZE);
            g.drawLine(X+i*SIZE,Y,X+i*SIZE,Y+CLOUM*SIZE);
        }

        //绘制棋子
        for (int i=0;i<chessArr.length;i++){
            for (int j=0;j<chessArr[0].length;j++){
                if(chessArr[i][j]==1){
                    g.setColor(Color.WHITE);
                    g.fillOval(i*SIZE+X-SIZE/2,j*SIZE+Y-SIZE/2,SIZE,SIZE);
                    System.out.println("白棋");
                }else if(chessArr[i][j]==2){
                    g.setColor(Color.BLACK);
                    g.fillOval(i*SIZE+X-SIZE/2,j*SIZE+Y-SIZE/2,SIZE,SIZE);
                    System.out.println("黑棋");
                }else{
                    System.out.println("空白");
                    continue;
                }
            }


        }

    }
}

大概代码就是以上部分:

效果展示

在这里插入图片描述

第一天的功能大概就是这样,下一步我们继续完善功能(判断输赢,悔棋功能)

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值