【发布时间】:2018-08-14 21:59:04
【问题描述】:
我正在制作一个游戏,并希望在游戏结束并单击“休息”按钮后重置棋盘。目前游戏首轮运行良好。
我认为问题在于重置方法“this.play()”。有人可以解释一下我打电话时发生了什么。
使用“this.play()”,GUI 不会重置,游戏也不会运行。如果没有“this.play()”,GUI 会重置,但游戏无法运行。
我还想在每次单击按钮而不是循环后运行检查方法。我不断收到无法从静态上下文引用非静态方法的错误。我一直把check方法放在buttons类的actionPerformed方法中
这是我的代码...
板级...
public class ticTacBoard extends JFrame implements ActionListener
{
Toebuttons toe[] = new Toebuttons[9];
JFrame over = new JFrame("Game Over");
JPanel panel = new JPanel();
JLabel winner = new JLabel("");
static boolean win = false;
public static void start()
{
ticTacBoard b = new ticTacBoard();
b.play();
}
public void play()
{
//ticTacBoard one = new ticTacBoard();
while(!win && Toebuttons.count < 9)
{
this.check();
}
endFrame();
}
public ticTacBoard()
{
super("Tic tac board");
toFront();
setSize(500,500);
setLayout(new GridLayout(3,3));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
for(int i = 0; i<toe.length; i++)
{
toe[i] = new Toebuttons();
add(toe[i]);
}
setVisible(true);
}
public void check()
{
checkRow();
checkDiagonal();
checkColumn();
}
public void checkRow()
{
if((toe[0].getText().equals("X")||toe[0].getText().equals("O"))&&(toe[0].getText().equals(toe[1].getText()) && toe[1].getText().equals(toe[2].getText())))
{
winner.setText(toe[2].getText()+" WINS!!!\nROW");
win = true;
}
if((toe[3].getText().equals("X")||toe[3].getText().equals("O"))&&(toe[3].getText().equals(toe[4].getText()) && toe[4].getText().equals(toe[5].getText())))
{
winner.setText(toe[3].getText()+" WINS!!!\nROW");
win = true;
}
if((toe[6].getText().equals("X")||toe[6].getText().equals("O"))&&(toe[6].getText().equals(toe[7].getText()) && toe[7].getText().equals(toe[8].getText())))
{
winner.setText(toe[6].getText()+" WINS!!!\nROW");
win = true;
}
}
public void checkDiagonal()
{
if((toe[0].getText().equals("X")||toe[0].getText().equals("O"))&&(toe[0].getText().equals(toe[4].getText()) && toe[4].getText().equals(toe[8].getText())))
{
winner.setText(toe[0].getText()+" WINS!!!\nDIAGONAL");
win = true;
}
if((toe[2].getText().equals("X")||toe[2].getText().equals("O"))&&(toe[2].getText().equals(toe[4].getText()) && toe[4].getText().equals(toe[6].getText())))
{
winner.setText(toe[0].getText()+" WINS!!!\nDIAGONAL");
win = true;
}
}
public void checkColumn()
{
if((toe[0].getText().equals("X")||toe[0].getText().equals("O"))&&(toe[0].getText().equals(toe[3].getText()) && toe[3].getText().equals(toe[6].getText())))
{
winner.setText(toe[0].getText()+" WINS!!!\nCOLUMN");
win = true;
}
if((toe[1].getText().equals("X")||toe[1].getText().equals("O"))&&(toe[1].getText().equals(toe[4].getText()) && toe[4].getText().equals(toe[7].getText())))
{
winner.setText(toe[1].getText()+" WINS!!!\nCOLUMN");
win = true;
}
if((toe[2].getText().equals("X")||toe[2].getText().equals("O"))&&(toe[2].getText().equals(toe[5].getText()) && toe[5].getText().equals(toe[8].getText())))
{
winner.setText(toe[2].getText()+" WINS!!!\nCOLUMN");
win = true;
}
}
public void endFrame()
{
System.out.println("2222");
over.setLocationRelativeTo(null);
panel.setLayout(new FlowLayout());
over.setLayout(new FlowLayout());
panel.add(winner);
panel.repaint();
over.add(panel);
over.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
over.setSize(500,100);
JButton r = new JButton("Reset");
JPanel p = new JPanel();
p.add(r);
over.add(p);
r.addActionListener(this);
over.repaint();
over.setVisible(true);
}
public void reset()
{
Toebuttons.x = true;
for(int i = 0; i<toe.length;i++)
{
toe[i].setText("blank");
}
win = false;
Toebuttons.count = 0;
this.play();
}
public void actionPerformed(ActionEvent e)
{
over.hide();
reset();
}
}
按钮类 ...
public class Toebuttons extends JButton implements ActionListener
{
static boolean x = true;// if true x's turn if false o's turn
public static int count = 0;
public Toebuttons()
{
super("blank");
this.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if(this.x == true && getText().equals("blank") && !ticTacBoard.win)
{
count++;
System.out.println(count);
setText("X");
this.x = false;
}
else if(this.x == false && getText().equals("blank")&& !ticTacBoard.win)
{
count++;
System.out.println(count);
setText("O");
this.x = true;
}
}
}
【问题讨论】:
标签: java swing oop user-interface jbutton