我有一個ConnectFour程序,它使用一個非常大的if語句來檢查是否有贏家,但它似乎只能在我的代碼的中間工作中使用tile(JButtons)。邊緣,而不是太多......如果你能看到我做錯了什麼,那麼如果這個狀態能起作用,那就太棒了!ConnectFour Win條件
源代碼:
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class ConnectFour extends JPanel
{
private int turn;
private final JButton BOARD[][];
private final Color DEFAULT_COLOR;
public ConnectFour()
{
super(new GridLayout(6, 7));
turn = 0;
BOARD = new JButton[6][7];
HandlerClass handler = new HandlerClass();
for(int i = 0; i < BOARD.length; i++)
{
for(int j = 0; j < BOARD[i].length; j++)
{
BOARD[i][j] = new JButton("");
BOARD[i][j].addActionListener(handler);
if(!(i == BOARD.length - 1))
{
BOARD[i][j].setEnabled(false);
}
add(BOARD[i][j]);
}
}
DEFAULT_COLOR = BOARD[0][0].getBackground();
}
public static void main(String[] args)
{
javax.swing.JFrame frame = new javax.swing.JFrame("test");
frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.add(new ConnectFour());
frame.setVisible(true);
}
private class HandlerClass implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
JButton source = ((JButton) event.getSource());
if(turn % 2 == 0)
{
source.setBackground(Color.RED);
source.setEnabled(false);
}
else
{
source.setBackground(Color.BLACK);
source.setEnabled(false);
}
boolean winner = checkWinner();
if(winner)
{
System.out.println("Player " + (turn % 2 + 1) + " wins!");
}
//---------------------------------
for(int i = 0; i < BOARD.length; i++)
{
for(int j = 0; j < BOARD[i].length; j++)
{
if(BOARD[i][j].equals(source))
{
try
{
BOARD[i - 1][j].setEnabled(true);
break;
}
catch(ArrayIndexOutOfBoundsException e)
{
//System.out.println("Hello, World!");
}
}
}
}
turn++;
}
private boolean checkWinner()
{
for(int i = 0; i < BOARD.length; i++)
{
for(int j = 0; j < BOARD[i].length; j++)
{
try
{
if(((BOARD[i][j].getBackground().equals(BOARD[i + 1][j].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i + 2][j].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i + 3][j].getBackground()))
&& !(BOARD[i][j].getBackground().equals(DEFAULT_COLOR)))
|| ((BOARD[i][j].getBackground().equals(BOARD[i - 1][j].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i - 2][j].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i - 3][j].getBackground()))
&& !(BOARD[i][j].getBackground().equals(DEFAULT_COLOR)))
|| ((BOARD[i][j].getBackground().equals(BOARD[i][j + 1].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i][j + 2].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i][j + 3].getBackground()))
&& !(BOARD[i][j].getBackground().equals(DEFAULT_COLOR)))
|| ((BOARD[i][j].getBackground().equals(BOARD[i][j - 1].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i][j - 2].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i][j - 3].getBackground()))
&& !(BOARD[i][j].getBackground().equals(DEFAULT_COLOR)))
|| ((BOARD[i][j].getBackground().equals(BOARD[i + 1][j + 1].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i + 2][j + 2].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i + 3][j + 3].getBackground()))
&& !(BOARD[i][j].getBackground().equals(DEFAULT_COLOR)))
|| ((BOARD[i][j].getBackground().equals(BOARD[i + 1][j - 1].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i + 2][j - 2].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i + 3][j - 3].getBackground()))
&& !(BOARD[i][j].getBackground().equals(DEFAULT_COLOR)))
|| ((BOARD[i][j].getBackground().equals(BOARD[i - 1][j + 1].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i - 2][j + 2].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i - 3][j + 3].getBackground()))
&& !(BOARD[i][j].getBackground().equals(DEFAULT_COLOR)))
|| ((BOARD[i][j].getBackground().equals(BOARD[i - 1][j - 1].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i - 2][j - 2].getBackground()))
&& (BOARD[i][j].getBackground().equals(BOARD[i - 3][j - 3].getBackground()))
&& !(BOARD[i][j].getBackground().equals(DEFAULT_COLOR))))
return true;
}
catch(ArrayIndexOutOfBoundsException e)
{
}
}
}
return false;
}
}
}
這是我幾年前製作的Connect4 JavaScript玩具,然後在幾年後上傳。如果您在HTML上查看源代碼,則所有代碼都應位於https://googledrive.com/host/0B23IV_kQJJ8wb2piRTE5ZXhCV3M/中,如果您知道最後一個peice的位置,則可以檢查所有可能的運行。 –