【发布时间】:2016-05-03 05:04:23
【问题描述】:
我是希尔先生编程课的 9 年级学生!最近,他要求我们创建一个四人连线游戏,该游戏涉及两名玩家,防止作弊(因此玩家 1 不能在一个回合中继续放置棋子等),并且将像真正的四人游戏一样运行!我已经开始编写代码,但是,Hill 先生最近生了一个孩子,并且过去一周一直失学。我们的代课老师对编码一无所知,我已经问过我的朋友,但没有得到帮助。无论如何,要求涉及使用二维数组,并让游戏“棋子”在下降到列时下降到下一个可用位置。游戏需要 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 而不是 1 开始。当您尝试为
board[6][7]之类的东西赋值时,这会引发 ArrayIndexOutOfBoundsException,因为最高有效索引将是board[5][6]。 -
在高中学习英语作文时,请花相当多的时间。这将帮助您编写更有条理的代码和更好的 Stack Overflow 问题。
标签: java arrays multidimensional-array