我是希尔先生编码班的9年级学生!最近,他要求我们创建一个连接四个游戏,其中涉及两个玩家,防止作弊(因此玩家1不能继续将棋子放在一个转弯等等)并且将像真正的连接四个游戏一样运作!我已经开始研究这个代码了,但是,希尔先生最近生了一个孩子,过去一周一直没有上学。我们的代课老师对编码一无所知,我已经问过我的朋友,但我没有得到帮助。无论如何,要求涉及使用二维数组,并且当从列中下拉时使游戏“碎片”落到下一个可用位置。游戏需要是6行乘7列,有一个清除游戏的重置按钮,并有一个'玩家获胜'计数器。我已经尽力创建董事会并检查胜利,但我不确定是什么问题。我试图制作一个按钮的二维游戏板,按钮会在点击时变成红色或黑色的图片。我很抱歉,因为我是一名业余程序员,因此会出现业余错误。我完全陷入困境,甚至不确定这是否正确。我很感激任何和所有的帮助!非常感谢你,祝你有个美好的一天!
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.*;
public class ConnectFourGame
{
JFrame frame;
JPanel panel;
final int rowButtons = 6;
final int columnButtons = 7;
int row, column, rowSelected,columnSelected = 0;
int playerTurn = 0;
boolean win = false;
JButton[][]board = new JButton[6][7];
int[][] grid = new int [6][7];
GridLayout gameBoard = new GridLayout (6,7);
final ImageIcon red = new ImageIcon("red.png");
final ImageIcon black = new ImageIcon("black.png");
final ImageIcon blank = new ImageIcon("white.png");
private JButton reset;
private JLabel playerWins;
//JLabelcheck
public ConnectFourGame()
{
frame = new JFrame ("Connect Four Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
panel.setLayout(gameBoard);
for (row = 6; row >= 0; row--)
{
for (column = 7; column >= 0; column--)
{
board[6][7] =new JButton();
board[6][7].addActionListener(new boardListener());
panel.add(board[6][7]);
}
}
frame.setContentPane(panel);
frame.setSize(700,600); //1400,1200
frame.setVisible(true);
frame.pack();
//frame.setResizable(false);
//frame.setLocation(807,170);
/*reset = new JButton("Reset Game");
reset.setBounds(1200,1000,100,170);
reset.addActionListener(this);
frame.add(reset);*/
/*playerWins = new JLabel("Player Wins");
playerWins.setBounds(70,900,100,370);
frame.add(playerWins);*/
/*board[row][column] = new JButton();
board[row][column].addActionListener(new boardListener());*/
}
class boardListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
//String (eventButton) = event.getActionCommand();
if (win = false)
{
if(playerTurn % 2 == 0)
{
board[rowSelected][columnSelected].setIcon((red));
}
if(playerTurn % 2 == 1)
{
board[rowSelected][columnSelected].setIcon((black));
}
//if (JLabelCheck(columnSelected) == true)
{
checkWin();
playerTurn = playerTurn + 1;
}
}
}
}
public boolean checkWin()
{
for (int row = 0; row<6; row++)
{
for (int column = 0; column < 4; column++)
{
if(grid[column][row] != 0 && grid [column][row] == grid[column+1][row] && grid [column][row] == grid[column+2][row] && grid [column][row] == grid[column+3][row]);
{
win = true;
}
}
}
for(int row = 0; row<3; row++)
{
for (int column=0; column<7; column++)
{
if(grid[column][row] !=0 && grid [column][row] == grid[column][row+1] && grid [column][row]== grid[column][row+2] && grid [column][row] == grid[column][row+3]);
{
win = true;
}
}
}
for(int row = 0; row<3; row++)
{
for (int column=0; column<4; column++)
{
if(grid[column][row] !=0 && grid [column][row] == grid[column][row+1] && grid [column][row]== grid[column][row+2] && grid [column][row] == grid[column][row+3]);
{
win = true;
}
}
}
for(int row = 3; row<6; row++)
{
for (int column=0; column<4; column++)
{
if(grid[column][row] !=0 && grid [column][row] == grid[column+1][row-1] && grid [column][row]== grid[column+2][row-2] && grid [column][row] == grid[column+3][row-3]);
{
win = true;
}
}
}
return win;
}
public static void main(String args[])
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
JFrame.setDefaultLookAndFeelDecorated(true);
new ConnectFourGame();
{
}
}
}
);
}
}
答案 0 :(得分:2)
我试着给你一些起点。
您需要使用行和列,请注意1 ..
for (row = 6; row >= 0; row--)
{
for (column = 7; column >= 0; column--)
{
board[6][7] =new JButton();
board[6][7].addActionListener(new boardListener());
panel.add(board[6][7]);
}
}
它可能有用,但问问自己在checkWin()方法中检查整个网格是必要的。检查最后一块设置的周围是不够的? (记住数组的界限)
板[rowSelected] [columnSelected] .setIcon。我没有看到在代码中设置rowSelected和columnSelected值的位置。如果未设置,请尝试弄清楚如何获取这些值。 (提示,调用按钮的动作处理程序,因此按钮知道它已被调用,但他需要记住它的位置。)
希望它有所帮助。