0
点赞
收藏
分享

微信扫一扫

java五子棋NO.1

elvinyang 2022-03-11 阅读 54

先来看看效果

总体介绍

主要有界面、绘图、鼠标监听器三部分构成。

1.界面中构建窗体,作为棋盘的主要载体。

2.绘图,利用画笔画出棋盘,棋子(黑白色的圆形图案)。

3.鼠标监听器,利用鼠标点击功能与界面画笔实现链接。

具体过程

1.创建接口GobangCinfig1,备用

public interface GobangConfig1 {
//配置值 X和Y为左上角七点坐标,SIZE为间隔,C为横向间隔数,R为纵向间隔数
int X=50;
int Y=50;
int SIZE=50;
int C=15;
int R=15;

}

2.创建界面UIZ

1.创建界面组合类,在界面组合类中声明方法、创建主函数并调用方法

import javax.swing.*;
import java.awt.*;

//此处不再用 JFrame jf=new JFrame(); 直接用继承 extends JFrame implements GobangConfig1
public class UIZ extends JFrame implements GobangConfig1{


public void initGobangUIZ() {
        this.setTitle("五子棋-NO.1");
        this.setSize(850, 850);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setVisible(true);


}


//创建主函数,并调用方法
 public static  void main(String[] args) {
        new UIZ().initGobangUIZ();

    }

}

3.画图,开始画棋盘

先在窗体左上角画两条垂直的直线,不要超出窗体数值

//创建画笔对象 
 //Graphics-画笔
        Graphics g = this.getGraphics();


//声明画笔 
public void paint(Graphics g){
        super.paint(g);



//画两条垂直的线

//横线,纵坐标不变。起点坐标,终点坐标
g.drawLine(X=50,Y=50,X=500,Y=50);
//竖线,横坐标不变
g.drawLine(X=50,Y=50,X=50,Y=500);

}

PS:而棋盘不止两条线,需要多跟横线和竖线,所以想到用for循环,用画棋盘这部分代码来代替画两条垂直的线的代码。

// 画棋盘
        for(int i = 0;i <= C;i++){

           // 画多条横线,第一个点的横坐标每次不变,纵坐标每次加上间隔
            g.drawLine(X,Y+i*SIZE,X + C * SIZE,Y + i * SIZE);

            //画多条竖线,第一个点的纵坐标每次不变,横坐标每次加上间隔
            g.drawLine(X + i * SIZE,Y,X + i * SIZE,X + C * SIZE);

4.创建鼠标监听器 GoBangListener

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


public class GoBangListener implements MouseListener,GobangConfig1{
    Graphics g;
    /**
     * 用构造器 创建对象时才调用 且只调用一次
     */
    public GoBangListener(Graphics g){ this.g=g;   }
    int flag=0;


@Override
    public void mousePressed(MouseEvent e){
      //获取鼠标按下的坐标
      int x = e.getX();
      int y = e.getY();

      //判断语句
        if(flag==0){
          g.setColor (Color.BLACK);
          flag=1;
        }else{
           g.setColor (Color.WHITE);
           flag=0;
        }
        //圆的外切矩形左上角
        g.fillOval(x-SIZE/2,y-SIZE/2,SIZE,SIZE);
    }
@Override
    public void mouseClicked(MouseEvent e){}

@Override
    public void mouseReleased(MouseEvent e){}

@Override
    public void mouseEntered(MouseEvent e){}

@Override
    public void mouseExited(MouseEvent e){}



}

5.在界面UIZ中加入监听器

//监听器
        GoBangListener gl = new GoBangListener(g);

        //给界面加上鼠标监听器
        this.addMouseListener(gl);

至此,界面UIZ中的完整代码为:

import javax.swing.*;
import java.awt.*;

public class UIZ extends JFrame implements GobangConfig1 {

    public void initGobangUIZ() {
        this.setTitle("五子棋-NO.1");
        this.setSize(850, 850);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setVisible(true);

        //Graphics-画笔
        Graphics g = this.getGraphics();

        //监听器
        GoBangListener gl = new GoBangListener(g);

        //给界面加上鼠标监听器
        this.addMouseListener(gl);


}
public void paint(Graphics g){
        super.paint(g);

    // 画棋盘
        for(int i = 0;i <= C;i++){

           // 画多条横线,第一个点的横坐标每次不变,纵坐标每次加上间隔
            g.drawLine(X,Y+i*SIZE,X + C * SIZE,Y + i * SIZE);

            //画多条竖线,第一个点的纵坐标每次不变
            g.drawLine(X + i * SIZE,Y,X + i * SIZE,X + C * SIZE);

        }
    }
    public static  void main(String[] args) {
        new UIZ().initGobangUIZ();


    }


}

执行代码,结果为

 

 虽然实现了黑白起轮流下一子,初步矫正了坐标,使得鼠标所点击之处成为了棋子的中心位置,但并没实现矫正鼠标点击之处、棋子不相互重叠的问题,期待下次解决此问题

 

举报

相关推荐

0 条评论