私はHill氏のコーディングクラスの9年生です!最近、彼は2人のプレイヤーを含むConnect Fourゲームの作成を依頼しています。不正行為を防止します(プレイヤー1は1ターンに置くことができません)。私はコードの作業を始めましたが、ヒルさんは最近赤ちゃんがいて、先週は学校をやめました。私たちの代わりの教師はコーディングについて何も知らないし、私はすでに友達に尋ねてきましたが、私は助けられませんでした。とにかく、要件は2次元配列を使用し、ゲームの「ピース」を列の下にドロップしたときに次の使用可能な位置に落とします。ゲームは6行×7列でなければならず、ゲームをクリアするリセットボタンがあり、「プレーヤー勝ち」カウンターがあります。私はボードを作って勝利をチェックするのに最善を尽くしましたが、何が間違っているのか分かりません。私は、ボタンを2次元のゲームボードにしようとしました。ここで、ボタンは、クリックされると、赤または黒のピースの絵に変わります。私はアマチュアのプログラマーであり、アマチュアな間違いがあることを謝ります。私は完全に立ち往生しており、これが正しいと確信していません。私はとにかく、すべて助けていただければ幸いです!本当にありがとう、良い一日を!ConnectFour Javaゲームの問題
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から始まり、0ではなく1から始まることに注意してください。たとえば、 'board [6] [7]'などの値に値を代入しようとすると、ArrayIndexOutOfBoundsExceptionがスローされます。 'board [5] [6]'となります。 –
高校に通って英語を学んでいる間、かなりの時間をかけてください。これは、より整理されたコードを作成し、スタックオーバーフローの問題を改善するのに役立ちます。 –