Java连接四胜利检查

标签 java

我是编程初学者,我一直在尽可能多地自学。我需要以更简单的方式检查胜利的帮助,而不是对每种可能的组合进行硬编码。 我不知道该怎么做。 这是我当前的代码:

import java.awt.*;
import javax.swing.event.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class connectfour extends JFrame implements ActionListener
{
    JLabel board[][] = new JLabel[8][7];
    //JLabel board[] = new JLabel[64];
    JButton action[] = new JButton[8];
    JButton start;
    JButton clear;
    JFrame Frame = new JFrame();
    ImageIcon red = new ImageIcon("red piece.jpeg");
    ImageIcon black = new ImageIcon("blackpiece.jpeg");

    boolean players = true;
    //Integer[] numclick = new Integer[8];
    int x;

    int numclick1 = 7;
    int numclick2 = 7;
    int numclick3 = 7;
    int numclick4 = 7;
    int numclick5 = 7;
    int numclick6 = 7;
    int numclick7 = 7;
    int numclick0 = 7;


    public connectfour()
    {
        Frame.setSize(100,120);
        Frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        Frame.setLayout(null);
        Frame.setVisible(true);

        start = new JButton("Start");
        start.setBounds(0,0,100,100);
        start.setVisible(true);
        start.addActionListener(this);
        Frame.add(start);
    }

    public void game()
    {

        for(int x = 0; x < 8 ; x++)
        {
            action[x] = new JButton();
            action[x].setSize(100,40);
            action[x].setLocation((x*100) + 50, 0);
            action[x].addActionListener(this);
            action[x].setVisible(true);
            Frame.add(action[x]);
        }
        /**
        board[1][1] = new JLabel();
        board[1][1].setBounds(50,40,100,100);
        board[1][1].setVisible(true);
        board[1][1].setOpaque(true);
        board[1][1].setBorder(BorderFactory.createLineBorder(Color.black));
        Frame.add(board[1][1]);
        **/
        for(int i = 0; i < 8; i++)
        {
            for(int j = 0; j < 7; j++)
            {
            board[i][j] = new JLabel();
            board[i][j].setSize(100,100);
            board[i][j].setLocation((i*100)+50,(j*100)+40);
            board[i][j].setOpaque(true);
            board[i][j].setVisible(true);
            board[i][j].setBorder(BorderFactory.createLineBorder(Color.black));
            Frame.add(board[i][j]);

            }
        }   

        clear = new JButton("Clear");
        clear.setBounds(850,100,100,50);
        clear.addActionListener(this);
        clear.setVisible(true);
        Frame.add(clear);


    }
    public void boardsize()
   {
        Frame.setSize(950,800);
   }

    public static void main(String args[])
    {
        new connectfour();
    }
    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource() == start)
        {
            boardsize();
            start.setVisible(false);
            game();

        }
        for(x = 0;x < 8 ;x ++)
        {
            if(e.getSource() == action[x])
            {
                //numclick[x]++;
                if(x == 0)
                {
                    numclick0--;
                    if(players == true)
                    {
                        board[x][numclick0].setIcon(red);
                        players = false;
                        break;
                    }
                    if(players == false)
                    {
                        board[x][numclick0].setIcon(black);
                        players = true;
                        break;
                    }

                }
                if(x == 1)
                {
                    numclick1--;
                    if(players == true)
                    {
                        board[x][numclick1].setIcon(red);
                        players = false;
                        break;
                    }
                    if(players == false)
                    {
                        board[x][numclick1].setIcon(black);
                        players = true;
                        break;
                    }
                }
                if(x == 2)
                {
                    numclick2--;
                    if(players == true)
                    {
                        board[x][numclick2].setIcon(red);
                        players = false;
                        break;
                    }
                    if(players == false)
                    {
                        board[x][numclick2].setIcon(black);
                        players = true;
                        break;
                    }
                }
                if(x == 3)
                {
                    numclick3--;
                    if(players == true)
                    {
                        board[x][numclick3].setIcon(red);
                        players = false;
                        break;
                    }
                    if(players == false)
                    {
                        board[x][numclick3].setIcon(black);
                        players = true;
                        break;
                    }
                }
                if(x == 4)
                {
                    numclick4--;
                    if(players == true)
                    {
                        board[x][numclick4].setIcon(red);
                        players = false;
                        break;
                    }
                    if(players == false)
                    {
                        board[x][numclick4].setIcon(black);
                        players = true;
                        break;
                    }
                }
                if(x == 5)
                {
                    numclick5--;
                    if(players == true)
                    {
                        board[x][numclick5].setIcon(red);
                        players = false;
                        break;
                    }
                    if(players == false)
                    {
                        board[x][numclick5].setIcon(black);
                        players = true;
                        break;
                    }
                }
                if(x == 6)
                {
                    numclick6--;
                    if(players == true)
                    {
                        board[x][numclick6].setIcon(red);
                        players = false;
                        break;
                    }
                    if(players == false)
                    {
                        board[x][numclick6].setIcon(black);
                        players = true;
                        break;
                    }
                }
                if(x == 7)
                {
                    numclick7--;
                    if(players == true)
                    {
                        board[x][numclick7].setIcon(red);
                        players = false;
                        break;
                    }
                    if(players == false)
                    {
                        board[x][numclick7].setIcon(black);
                        players = true;
                        break;
                    }
                }

                System.out.println(x);
                System.out.println();


            }
        }   
        if(e.getSource() == clear)
        {
            for(int x = 0; x < 8; x++)
            {
                for(int y = 0; y < 7; y++)
                {
                    board[x][y].setIcon(null);

                    numclick1 = 7;
                    numclick2 = 7;
                    numclick3 = 7;
                    numclick4 = 7;
                    numclick5 = 7;
                    numclick6 = 7;
                    numclick7 = 7;
                    numclick0 = 7;

                    players = true;

                    for(int j = 0; j < 8 ; j++)
                    {
                        action[j].setEnabled(true);
                    }

                }
            }
        }
        if(numclick0 == 0)
        {
            action[0].setEnabled(false);
        }
        if(numclick1 == 0)
        {
            action[1].setEnabled(false);
        }
        if(numclick2 == 0)
        {
            action[2].setEnabled(false);
        }
        if(numclick3 == 0)
        {
            action[3].setEnabled(false);
        }
        if(numclick4 == 0)
        {
            action[4].setEnabled(false);
        }
        if(numclick5 == 0)
        {
            action[5].setEnabled(false);
        }
        if(numclick6 == 0)
        {
            action[6].setEnabled(false);
        }
        if(numclick7 == 0)
        {
            action[7].setEnabled(false);
        }
    }

    public void winner()
    {

    }
}

最佳答案

我会使用递归方法来检查水平、垂直和两条对角线。

当我阅读你的代码时,我意识到你没有跟踪(可能错过了)玩家所在的位置。我建议使用名为 grid[][] 的数组来映射数组到您的 JLabels 将大有帮助。

我将给出一个负垂直检查的例子..

 public Boolean checkVertical(Boolean player, int x, int y){
      if(solveHelper(player, x, y, -1, 0) => 4) return true;
      return false;
 }

public int solveHelper(Boolean player, int x, int y, int addX, int addY){
     if(x == 0 || x == size || y == 0 || y == size || grid[x][y].player != player) 
          return 0;
     return solverHelper(player, x+addX, y+addY, addX, addY) + 1);
}

现在您如何自己创建和使用这些方法?

您需要为每个水平、垂直和双对角线创建一个新方法,以检查您在 addX 中调用 solveHelper 并具有不同属性的所有方法,并且addY 与您想去的方向相对应。例如,如果您想检查水平方向,则需要使用 addY == 1addY == -1 以及 addX == 0 通过执行 solveHelper +solverHelper 更改这两个值。

其他说明...

您需要记住的一些事情是连接四的实际运行方式。当您单击一行时,一个 block 会下降到该特定列中最小的未占用元素。这只是您在编写游戏逻辑时应该记住的事情。

干杯。

关于Java连接四胜利检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20367017/

相关文章:

java - "no method return value"在 Eclipse 调试视角中意味着什么?

java - 从文件读取数据到对象?

java - java中返回多个值的最轻量级方法

java - 如何打乱数组

java - 使用 HttpGet 和 DefaultHttpClient 的默认超时时间是多少?

java - Java + Cucumber 失败的屏幕截图

java - Maven surefire 插件永远挂起

java - 对信号量类有点困惑

java - 客房预订计划

java - 删除过滤后 Jtable 结果错误