【JAVA】五子棋2.0

本文是基于之前五子棋程序的改进,具体改进方面如下:

⒈输赢的个性化窗体显示:

要写窗体,自然就是要在继承JFrame的GoBangUI类中写方法,具体代码如下:

 public void WinGameUI(int Winner,Graphics g){   

        JFrame winJf = new JFrame("兄弟!太厉害了");

        winJf.setSize(600,600);

        winJf.setLocationRelativeTo(null);

        winJf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        //设置流式布局管理器

BorderLayout border=new BorderLayout();

winJf.setLayout(border);

//面板:默认是流式布局

JPanel centerPanel=new JPanel();

JPanel northPanel=new JPanel();

//设置背景色

centerPanel.setBackground(Color.white);

northPanel.setBackground(Color.GRAY);

Dimension dm=new Dimension(400,400);

Dimension dt=new Dimension(200,50);

centerPanel.setPreferredSize(dm);

northPanel.setPreferredSize(dt);

winJf.add(centerPanel,BorderLayout.CENTER);

        if(Winner==1){

         JLabel label1=new JLabel("恭喜黑方获胜!!");

         label1.setPreferredSize(new Dimension(100,50));   

         winJf.add(label1,BorderLayout.SOUTH);

        }

        if(Winner==1){

         JLabel label2=new JLabel("恭喜白方获胜!!");

         label2.setPreferredSize(new Dimension(100,50));   

         winJf.add(label2,BorderLayout.SOUTH);

        }

        

        ImageIcon winImg=new ImageIcon("ww.jpg");

            JLabel label=new JLabel(winImg);

            label.setPreferredSize(dm);

            centerPanel.add(label);

        JButton btn1 = new JButton("再战一局");

        btn1.addActionListener(gl);

        winJf.add(btn1,BorderLayout.SOUTH);  

        

//         Graphics wpen = winJf.getGraphics();

//         mylis.setGraphics(wpen);  

//         JButton btn2 = new JButton("结束游戏");

//         btn2.addActionListener(mylis);

//         WinJf.add(btn2,BorderLayout.NORTH);

//

//         JButton btn3 = new JButton("回顾棋局");

//         btn3.addActionListener(mylis);

//         WinJf.add(btn3,BorderLayout.NORTH);

        gl.setGobangUI(this);   //全局??

        gl.setWinJf(winJf);         

        //3.获取画笔:图像显示在哪个组件上,画笔就从该组件上获取

//从窗体上获取画笔对象,一定要在窗体显示可见之后

        winJf.setVisible(true);

    }

在这里注释的内容暂时还没有实现,以及if判断语句中的标签添加尚未实现,这需要在今后的学习改进。同时窗体的切换需要在actionPerformed方法中改进,完整代码见后

2.登录界面的添加

登录界面首先需要将一些共用的属性传过来,比较特别的是需要添加账号和密码,这可以使用文本框来实现,代码如下:

public class LoginListener implements ActionListener{

  private JTextField jTFUser;

  private JTextField jTFPassword;

  public Graphics g;

  public Image lgImg;

    GoBangUI gobangUI;

    //JFrame startJf ;

    JFrame loginJf ;  

    public void setjTFUser(JTextField jTFUser) {this.jTFUser = jTFUser; }

    public void setjTFPassword(JTextField jTFPassword) {this.jTFPassword = jTFPassword; }

    public void setGoBangUI(GoBangUI gobangUI) {this.gobangUI = gobangUI; }

    public void setGraphics(Graphics g){this.g=g;}

    //public void setStartJf(JFrame startJf) {this.startJf = startJf; }

    public void setLoginJf(JFrame loginJf) {this.loginJf = loginJf; }

    @Override

    public void actionPerformed(ActionEvent e) {

        String btnStr = e.getActionCommand();

        String jTFUserStr = jTFUser.getText();

        String jTFPasswordStr = jTFPassword.getText();

        if(btnStr.equals("登录")){

            if(jTFUserStr.equals("wyh") && jTFPasswordStr.equals("wyh")){

                loginJf.setVisible(false);

                gobangUI.startUI();

            }

        }

    }

}

public void loginGame(){

Image lgImg = new ImageIcon("han.png").getImage();

        JFrame loginJf = new JFrame("请登录你的五子棋账号");

        loginJf.setSize(600,600);

        loginJf.setLayout(null);

        loginJf.setLocationRelativeTo(null);

        loginJf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        FlowLayout fl = new FlowLayout();

        loginJf.setLayout(fl);

        JTextField jTFLoginUser = new JTextField(12);

        JTextField jTFLoginPassword = new JTextField(12);

        ImageIcon icon=new ImageIcon("han.png");

JLabel label=new JLabel(icon);

loginJf.add(label,BorderLayout.CENTER);

        JButton btn0 = new JButton("登录");

        btn0.addActionListener(loginListener);

        loginJf.add(jTFLoginUser);

        loginJf.add(jTFLoginPassword);

        loginJf.add(btn0);

//        btn0.setLocation(100,200);

//        jTFLoginUser.setLocation(100,100);

//        jTFLoginPassword.setLocation(100,150);

//        btn0.setSize();

//        loginJf.add(jTFLoginUser,BorderLayout.SOUTH);

//        loginJf.add(jTFLoginPassword,BorderLayout.SOUTH);

//        loginJf.add(btn0,BorderLayout.SOUTH);       

        loginJf.setVisible(true);

        loginListener.setGoBangUI(this);

        loginListener.setLoginJf(loginJf);

        loginListener.setjTFUser(jTFLoginUser);

        loginListener.setjTFPassword(jTFLoginPassword);

        Graphics g=loginJf.getGraphics();

        loginListener.setGraphics(g);

 }

还可以改进的地方是密码在显示时需要加密表示,我暂时还没有掌握这方面的知识,以及如何使布局更加合理。

3.棋盘的重绘

棋盘重绘显然是要在paint方法中重写,我们需要用一个chessNum的二维数组来存储信息,在监听器类中写一个getchessNumArr方法简单调用获取数组即可代码如下:

public void paint(Graphics g){

super.paint(g);

System.out.println("绘制组件!");

//绘制背景图

g.drawImage(img,X,Y,ROW*SIZE,CLOUN*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+CLOUN*SIZE);

}

//绘制棋子

// 遍历棋盘 取出有棋子的地方绘制

int[][] chessNumA=gl.getchessNumArr();

 for (int i = 0; i < chessNumA.length; i++) {

for (int j = 0; j < chessNumA[i].length; j++) {

System.out.print(chessNumA[j][i]);

}

System.out.println();

  }

        for (int i=0;i<chessNumA.length;i++){

         for(int j=0;j<chessNumA[i].length;j++){

         if(chessNumA[i][j]==1){

         g.setColor(Color.BLACK);

         g.fillOval(i*SIZE+X-SIZE/2,j*SIZE+Y-SIZE/2,SIZE,SIZE);

         }

         if(chessNumA[i][j]==2){

         g.setColor(Color.white);

         g.fillOval(i*SIZE+X-SIZE/2,j*SIZE+Y-SIZE/2,SIZE,SIZE);

         }

        

         }

        }

}

4.悔棋功能的实现

我首先创建一个chess类来储存棋子的坐标以及颜色,在监听器中加一个private Chess[] chessinfor = new Chess[(ROW+1)*(CLOUN+1)+1];int step=0;来保存棋子和记录步骤,然后在actionPerformed方法中写代码,代码如下:

if(st.equals("悔棋")){

      /*

      //取出当前的栈顶 棋子对象

      System.out.println("悔棋");

      Chess chess=chesslist[chessIndex-1];

      //根据棋子的行列值 去到chessNumArr中删除

      chessNumArr[chess.row][chess.cloun]=0;

      //再将当前的棋子一维数组中的棋子对象删除

      chesslist[chessIndex-1]=null;

      chessIndex--;

      chess=null;

      gobangUI.repaint();

      */

     //将棋子坐标转换回去,然后对应在矩阵中,重置上一步棋子在矩阵中为0

     // System.out.println("chessinfor[i-1]:"+chessinfor[i-1]);

             chessNumArr[chessinfor[step-1].x ][chessinfor[step-1].y] = 0;

             //棋子坐标信息重置

             chessinfor[step-1] = null;

             // step也应该减去1

             step--;

             // 然后重绘棋盘和棋子,注意设置画笔颜色为black,不然上一步棋是白色的话画笔颜色会是白色,会将棋盘的棋格线画成白色

             g.setColor(Color.BLACK);

             gobangUI.paint(g);

         

             if(flag==0){flag=1;count2--;

             }

             else{

              flag=0; count1--;

             }

             System.out.println("重绘后的下白棋"+"flag="+flag);

             System.out.println(step);

     }

5.重新开始功能的添加

重新开始功能与悔棋的类似,就是将所有储存的东西清空,代码如下:

 if(st.equals("重新开始")){

      //重置矩阵

       for (int i = 0; i < chessNumArr.length; i++) {

           for (int j = 0; j < chessNumArr[0].length; j++) {

            chessNumArr[i][j] = 0;

          }

       }

       // 重置chessinfor数组

       Arrays.fill(chessinfor, null);

       step = 0;

       g.setColor(Color.BLACK);

       gobangUI.paint(g);

       count1=0;

       count2=0;

       

     }

除省略导包外,完整代码如下:

public class Chess implements GoBaangConfig{

 public int x;

  public int y;

    public Color c;

    /**

     * GoBnagv2.QIZI 实体构造器,传入时需要三个参数x,y,c并设置给QIZI

     * @param x 当前棋子传入的坐标的x值

     * @param y 当前棋子传入的坐标的y值

     * @param c 传入的坐标的颜色信息,当前棋子是白棋还是黑棋

     */

    public Chess(int x,int y,Color c){

        this.x=x;

        this.y=y;

        this.c=c;

    }

    public void drawChess(Graphics g){

        if (c.equals(Color.black)){

            g.setColor(c);

            g.fillOval(x*SIZE+X-SIZE/2,y*SIZE-SIZE/2+Y,SIZE,SIZE);

        }if (c.equals(Color.white)){

            g.setColor(c);

            g.fillOval(x*SIZE+X-SIZE/2,y*SIZE-SIZE/2+Y,SIZE,SIZE);

        }

    }

}

public interface GoBaangConfig {

int SIZE=50;//棋盘间距和棋子直径

int X=50;//棋盘左上角x坐标

int Y=100;//棋盘左上角y坐标

int ROW=15;

int CLOUN=15;//棋盘的行列值

}

public class GoBangListener implements GoBaangConfig, MouseListener, MouseMotionListener,ActionListener{

int chessX,chessY;

Graphics g;

Graphics g2;

int step=0;

public String name;

int flag=0;

int count1=0;int count2=0;

int[][] chessNumArr=new int[ROW+1][CLOUN+1];

int chessNum=0;//chessNum:0代表空棋,1代表黑,2代表白

int chessIndex=0;

private Chess[] chessinfor = new Chess[(ROW+1)*(CLOUN+1)+1];

public GoBangUI gobangUI;

public JFrame jjf;

public JFrame winJf;

public void setWinJf(JFrame winJf) {this.winJf = winJf; }

public void setGraphics(Graphics g){this.g=g;}

public  void setStartjf(JFrame jjf){this.jjf=jjf;}

public void setGobangUI(GoBangUI gobangUI){this.gobangUI=gobangUI;}

public void actionPerformed(ActionEvent e){

String st=e.getActionCommand();

if(st.equals("开始游戏")){

jjf.setVisible(false);

gobangUI.initGoBangMainUI();

}

if(st.equals("再战一局")){

            winJf.setVisible(false);

            gobangUI.initGoBangMainUI();

}

     if(st.equals("悔棋")){

      /*

      //取出当前的栈顶 棋子对象

      System.out.println("悔棋");

      Chess chess=chesslist[chessIndex-1];

      //根据棋子的行列值 去到chessNumArr中删除

      chessNumArr[chess.row][chess.cloun]=0;

      //再将当前的棋子一维数组中的棋子对象删除

      chesslist[chessIndex-1]=null;

      chessIndex--;

      chess=null;

      gobangUI.repaint();

      */

     //将棋子坐标转换回去,然后对应在矩阵中,重置上一步棋子在矩阵中为0

     // System.out.println("chessinfor[i-1]:"+chessinfor[i-1]);

             chessNumArr[chessinfor[step-1].x ][chessinfor[step-1].y] = 0;

             //棋子坐标信息重置

             chessinfor[step-1] = null;

             // step也应该减去1

             step--;

             // 然后重绘棋盘和棋子,注意设置画笔颜色为black,不然上一步棋是白色的话画笔颜色会是白色,会将棋盘的棋格线画成白色

             g.setColor(Color.BLACK);

             gobangUI.paint(g);

         

             if(flag==0){flag=1;count2--;

             }

             else{

              flag=0; count1--;

             }

             System.out.println("重绘后的下白棋"+"flag="+flag);

             System.out.println(step);

     }

     if(st.equals("重新开始")){

      //重置矩阵

       for (int i = 0; i < chessNumArr.length; i++) {

           for (int j = 0; j < chessNumArr[0].length; j++) {

            chessNumArr[i][j] = 0;

          }

       }

       // 重置chessinfor数组

       Arrays.fill(chessinfor, null);

       step = 0;

       g.setColor(Color.BLACK);

       gobangUI.paint(g);

       count1=0;

       count2=0;

       

     }

     

}

@Override

public void mousePressed(MouseEvent e) {

int x = e.getX();

int y = e.getY();

int chessX = (x+SIZE/2-X)/SIZE;

int chessY = (y+SIZE/2-Y)/SIZE;

System.out.println("chessX:"+chessX);

System.out.println("chessY:"+chessY);

if(chessX<0||chessX>ROW){

return;

}

if(chessY<0||chessY>CLOUN){

return;

}

if(chessNumArr[chessX][chessY]!=0){

return;

}

if(flag==0){

//下黑棋

 g.setColor(Color.BLACK);

chessNum=1;

chessNumArr[chessX][chessY]=chessNum;

System.out.println("weishenm:"+chessNumArr[chessX][chessY]);

flag++;

count1++;

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

//判断输赢

if(whetherwin.iswin1(chessNumArr,chessX,chessY)){

 System.out.println("黑方获胜!");

                 gobangUI.WinGameUI(1,g);

}

//用来悔棋储存

Chess qizi = new Chess(chessX, chessY, Color.BLACK);

qizi.drawChess(g);

chessinfor[step] = qizi;

step++;

 }else{

g.setColor(Color.white);

// 下白棋

chessNum=2;

chessNumArr[chessX][chessY]=chessNum;

System.out.println("weishenm:"+chessNumArr[chessX][chessY]);

//下完白棋之后 赋值为下黑棋可以通过的条件

flag=0;

count2++;

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

if(whetherwin.iswin2(chessNumArr,chessX,chessY)){

System.out.println("白方获胜!");

                gobangUI.WinGameUI(2,g);

}

//用来悔棋储存

Chess qizi = new Chess(chessX, chessY, Color.white);

qizi.drawChess(g);

chessinfor[step] = qizi;

step++;

}

 write();

//在下面显示数字棋盘

 for (int i = 0; i < chessNumArr.length; i++) {

for (int j = 0; j < chessNumArr[i].length; j++) {

System.out.print(chessNumArr[j][i]+" ");

}

System.out.println();

  }

}

public int[][] getchessNumArr() {

        return chessNumArr;

    }

public void write(){

 g.setColor(new Color(238,238,238));

 g.fillRect(850,750,300,400);

 g.setColor(Color.BLACK);

 Font font=new Font("楷体",1,26);

 g.setFont(font);

 g.drawString("黑棋走了"+count1+"步", 850, 800);

 g.drawString("白棋走了"+count2+"步", 850, 850);

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

}

@Override

public void mouseDragged(MouseEvent e) {

}

@Override

public void mouseMoved(MouseEvent e) {

}

@Override

public void mouseClicked(MouseEvent e) {

}

@Override

public void mouseReleased(MouseEvent e) {

}

@Override

public void mouseEntered(MouseEvent e) {

}

@Override

public void mouseExited(MouseEvent e) {

}

}

public class GoBangUI extends JFrame implements GoBaangConfig{

public static final Image img=new ImageIcon("23.jpg").getImage();

//public static final Image winImg = new ImageIcon("E:\\win.jpg").getImage();

public GoBangListener gl = new GoBangListener();

public LoginListener loginListener = new LoginListener();

public void startUI(){

JFrame jjf=new JFrame();

jjf.setSize(1000,1000);

jjf.setLocationRelativeTo(null);

jjf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

JButton btn=new JButton("开始游戏");

btn.addActionListener(gl);

ImageIcon icon=new ImageIcon("60.png");

JLabel label=new JLabel(icon);

jjf.add(label,BorderLayout.CENTER);

jjf.add(btn,BorderLayout.SOUTH);

jjf.setVisible(true);

gl.setGobangUI(this);

gl.setStartjf(jjf);

}

public void  initGoBangMainUI(){

//GoBangUI jf=new GoBangUI();

this.setSize(1000,1000);

this.setTitle("五子棋游戏");

this.setLocationRelativeTo(null);

//设置退出进程

this.setDefaultCloseOperation(3);;

//设置流式布局管理器

BorderLayout border=new BorderLayout();

this.setLayout(border);

//面板:默认是流式布局

    JPanel eastPanel=new JPanel();

//设置背景色

eastPanel.setBackground(Color.white);

Dimension dm=new Dimension(140,0);

//处理JFrame,其他组件设置大小都是该方法

eastPanel.setPreferredSize(dm);

this.add(eastPanel,BorderLayout.EAST);

String[] name={"悔棋","重新开始"};

    for(int i=0;i<name.length;i++){

JButton jbu=new JButton(name[i]);

            jbu.setPreferredSize(new Dimension(120,30));//该dimension不能重复利用

            eastPanel.add(jbu);

jbu.addActionListener(gl);

    

    }

this.setVisible(true);

//3.获取画笔

Graphics g=this.getGraphics();//在前一个之后

//2.监听器

this.addMouseListener(gl);

gl.g=g;

}

public void paint(Graphics g){

super.paint(g);

System.out.println("绘制组件!");

//绘制背景图

g.drawImage(img,X,Y,ROW*SIZE,CLOUN*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+CLOUN*SIZE);

}

//绘制棋子

// 遍历棋盘 取出有棋子的地方绘制

int[][] chessNumA=gl.getchessNumArr();

 for (int i = 0; i < chessNumA.length; i++) {

for (int j = 0; j < chessNumA[i].length; j++) {

System.out.print(chessNumA[j][i]);

}

System.out.println();

  }

        for (int i=0;i<chessNumA.length;i++){

         for(int j=0;j<chessNumA[i].length;j++){

         if(chessNumA[i][j]==1){

         g.setColor(Color.BLACK);

         g.fillOval(i*SIZE+X-SIZE/2,j*SIZE+Y-SIZE/2,SIZE,SIZE);

         }

         if(chessNumA[i][j]==2){

         g.setColor(Color.white);

         g.fillOval(i*SIZE+X-SIZE/2,j*SIZE+Y-SIZE/2,SIZE,SIZE);

         }

        

         }

        }

}

public void loginGame(){

Image lgImg = new ImageIcon("han.png").getImage();

        JFrame loginJf = new JFrame("请登录你的五子棋账号");

        loginJf.setSize(600,600);

        loginJf.setLayout(null);

        loginJf.setLocationRelativeTo(null);

        loginJf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        FlowLayout fl = new FlowLayout();

        loginJf.setLayout(fl);

        JTextField jTFLoginUser = new JTextField(12);

        JTextField jTFLoginPassword = new JTextField(12);

        ImageIcon icon=new ImageIcon("han.png");

JLabel label=new JLabel(icon);

loginJf.add(label,BorderLayout.CENTER);

        JButton btn0 = new JButton("登录");

        btn0.addActionListener(loginListener);

        loginJf.add(jTFLoginUser);

        loginJf.add(jTFLoginPassword);

        loginJf.add(btn0);

//        btn0.setLocation(100,200);

//        jTFLoginUser.setLocation(100,100);

//        jTFLoginPassword.setLocation(100,150);

//        btn0.setSize();

//        loginJf.add(jTFLoginUser,BorderLayout.SOUTH);

//        loginJf.add(jTFLoginPassword,BorderLayout.SOUTH);

//        loginJf.add(btn0,BorderLayout.SOUTH);

        

        loginJf.setVisible(true);

        loginListener.setGoBangUI(this);

        loginListener.setLoginJf(loginJf);

        loginListener.setjTFUser(jTFLoginUser);

        loginListener.setjTFPassword(jTFLoginPassword);

        Graphics g=loginJf.getGraphics();

        loginListener.setGraphics(g);

 }

   public void WinGameUI(int Winner,Graphics g){   

        JFrame winJf = new JFrame("兄弟!太厉害了");

        winJf.setSize(600,600);

        winJf.setLocationRelativeTo(null);

        winJf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        //设置流式布局管理器

BorderLayout border=new BorderLayout();

winJf.setLayout(border);

//面板:默认是流式布局

JPanel centerPanel=new JPanel();

JPanel northPanel=new JPanel();

//设置背景色

centerPanel.setBackground(Color.white);

northPanel.setBackground(Color.GRAY);

Dimension dm=new Dimension(400,400);

Dimension dt=new Dimension(200,50);

centerPanel.setPreferredSize(dm);

northPanel.setPreferredSize(dt);

winJf.add(centerPanel,BorderLayout.CENTER);

        if(Winner==1){

         JLabel label1=new JLabel("恭喜黑方获胜!!");

         label1.setPreferredSize(new Dimension(100,50));   

         winJf.add(label1,BorderLayout.SOUTH);

        }

        if(Winner==1){

         JLabel label2=new JLabel("恭喜白方获胜!!");

         label2.setPreferredSize(new Dimension(100,50));   

         winJf.add(label2,BorderLayout.SOUTH);

        }

        

        ImageIcon winImg=new ImageIcon("ww.jpg");

            JLabel label=new JLabel(winImg);

            label.setPreferredSize(dm);

            centerPanel.add(label);

        JButton btn1 = new JButton("再战一局");

        btn1.addActionListener(gl);

        winJf.add(btn1,BorderLayout.SOUTH);  

        

//         Graphics wpen = winJf.getGraphics();

//         mylis.setGraphics(wpen);  

//         JButton btn2 = new JButton("结束游戏");

//         btn2.addActionListener(mylis);

//         WinJf.add(btn2,BorderLayout.NORTH);

//

//         JButton btn3 = new JButton("回顾棋局");

//         btn3.addActionListener(mylis);

//         WinJf.add(btn3,BorderLayout.NORTH);

        gl.setGobangUI(this);   //全局??

        gl.setWinJf(winJf);         

        //3.获取画笔:图像显示在哪个组件上,画笔就从该组件上获取

//从窗体上获取画笔对象,一定要在窗体显示可见之后

        winJf.setVisible(true);

    }

}

public class LoginListener implements ActionListener{

  private JTextField jTFUser;

  private JTextField jTFPassword;

  public Graphics g;

  public Image lgImg;

    GoBangUI gobangUI;

    //JFrame startJf ;

    JFrame loginJf ;  

    public void setjTFUser(JTextField jTFUser) {this.jTFUser = jTFUser; }

    public void setjTFPassword(JTextField jTFPassword) {this.jTFPassword = jTFPassword; }

    public void setGoBangUI(GoBangUI gobangUI) {this.gobangUI = gobangUI; }

    public void setGraphics(Graphics g){this.g=g;}

    //public void setStartJf(JFrame startJf) {this.startJf = startJf; }

    public void setLoginJf(JFrame loginJf) {this.loginJf = loginJf; }

    @Override

    public void actionPerformed(ActionEvent e) {

        String btnStr = e.getActionCommand();

        String jTFUserStr = jTFUser.getText();

        String jTFPasswordStr = jTFPassword.getText();

        if(btnStr.equals("登录")){

            if(jTFUserStr.equals("wyh") && jTFPasswordStr.equals("wyh")){

                loginJf.setVisible(false);

                gobangUI.startUI();

            }

        }

    }

}

public class StartGame {

public static void main(String[]args){

GoBangUI  gobangUI=new GoBangUI();

gobangUI.loginGame();

}

}

public class whetherwin extends GoBangListener implements GoBaangConfig{

public int column;

public int row;

public int[][] chessArr;

//八个小方向遍历

//黑棋胜利条件

public static boolean iswin1(int[][] chessArr,int row,int column){

if(horizon1(chessArr,row,column)>=5||vertical1(chessArr,row,column)>=

5||right1(chessArr,row,column)>=5||left1(chessArr,row,column)>=5){

return true;

}

return false;

}

//水平方向

public static int horizon1(int [][]chessArr,int row,int column){

int c1=0;

for(int i=column-4;i<=column+4;i++){

if(i<0||i>ROW){

continue;

}

if(chessArr[row][i]==1){

c1++;

}

}

return c1;

}

//竖直方向

public static int vertical1(int [][]chessArr,int row,int column){

int b1=0;

for(int i=row-4;i<=+4;i++){

if(i<0||i>CLOUN){

continue;

}

if(chessArr[i][column]==1){

b1++;

}

}

return b1;

}

//右上到左下

public static int right1(int [][]chessArr,int row,int column){

int  a1=0;

for(int i=row-4,j=column+4;i<=row+4&&j>=column-4;i++,j--){

if(i<0||i>=ROW||j<0||j>=CLOUN) {

continue;

}

if(chessArr[i][j]==1){

a1++;

}

}

return a1;

}

//左上到右下

public static int left1(int [][]chessArr,int row,int column){

int d1=0;

for(int i=row-4,j=column-4;i<=row+4&&j<=column+4;i++,j++){

if(i<0||i>=ROW||j<0||j>=CLOUN) {

continue;

}

if(chessArr[i][j]==1){

d1++;

}

}

return d1;

}

//白棋胜利条件

public static boolean iswin2(int[][] chessArr,int row,int column){

if(horizon2(chessArr,row,column)>=5||vertical2(chessArr,row,column)>=

5||right2(chessArr,row,column)>=5||left2(chessArr,row,column)>=5){

return true;

}

return false;

}

public static int horizon2(int [][]chessArr,int row,int column){

int c1=0;

for(int i=column-4;i<=column+4;i++){

if(i<0||i>ROW){

continue;

}

if(chessArr[row][i]==2){

c1++;

}

}

return c1;

}

//竖直方向

public static int vertical2(int [][]chessArr,int row,int column){

int b1=0;

for(int i=row-4;i<=+4;i++){

if(i<0||i>CLOUN){

continue;

}

if(chessArr[i][column]==2){

b1++;

}

}

return b1;

}

//右上到左下

public static int right2(int [][]chessArr,int row,int column){

int  a1=0;

for(int i=row-4,j=column+4;i<=row+4&&j>=column-4;i++,j--){

if(i<0||i>=ROW||j<0||j>=CLOUN) {

continue;

}

if(chessArr[i][j]==2){

a1++;

}

}

return a1;

}

//左上到右下

public static int left2(int [][]chessArr,int row,int column){

int d1=0;

for(int i=row-4,j=column-4;i<=row+4&&j<=column+4;i++,j++){

if(i<0||i>=ROW||j<0||j>=CLOUN) {

continue;

}

if(chessArr[i][j]==2){

d1++;

}

}

return d1;

}

}

总结:

此次改进把所有基本的功能都实现了,剩下的棋盘回顾录制以及上文提及的一些小问题可能会在今后添加或者改进,希望对读者有所启发,感谢阅读!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值