Java五子棋的进一步优化

//本次优化添加了数组的概念,并且增加了棋子重绘功能,让棋子不会消失
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;
    int[][] arr=new int[16][16];

    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+4;
        y=(y-Y+SIZE/2)/SIZE;
        int S=y;
        y=Y/2+y*SIZE+4;
        if(H<0||H>15 || S<0||S>15){
            System.out.println ("此处不能下棋");
            JOptionPane.showMessageDialog (null,"此处不能下棋");
            return;}
        //对棋子位置判断
        if(arr[H][S]!=0){
            JOptionPane.showMessageDialog (null,"此处已有棋子");
            return; }
        //更改数组数据,让数组记录棋子位置
        if(chessFlag == 1){
            arr[H][S]=chessFlag;
            chessFlag = 2;
            g.setColor (Color.BLACK);
        } else if(chessFlag == 2){
            arr[H][S]=chessFlag;
            g.setColor (Color.WHITE);
            chessFlag = 1;}
            g.fillOval (x, y, 42, 42);}


    public void mouseReleased(MouseEvent e){};

   //鼠标进入窗口时让棋子重绘,达到棋子在游戏过程中不会消失的目的
    public void mouseEntered(MouseEvent e){
      //创建二维数组 
       for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                int n =arr[i][j];
           //判断数组中的0是否被改写
            if(n!=0){
                if(n==1){
                g.setColor (Color.BLACK);
            }else if(n==2){
                g.setColor (Color.WHITE);
            }
      //获取数组内容,即棋子坐标,并在棋盘上重绘
            int chessX = j*SIZE+X/2+4;
            int chessY = i*SIZE+Y/2+4;
            g.fillOval(chessY, chessX, 42, 42);

        }
    }}}


    public void mouseExited(MouseEvent e){};}

//利用数组的概念判断鼠标点击位置是否有棋子

 //鼠标移出后窗口后棋子消失

 //鼠标进入窗口后棋子重绘

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值