嗨,stackoverflow社区!
我正在为期末考试做一个AI TicTacToe项目,在按下jFrame类中的一个jButton后,我在尝试运行另一个类时遇到了问题。
我使用的是NetBean的jFrame类,在那里你可以通过从容器中放置它来轻松地进行设计,并且有些代码是不可编辑的。
我想为我的游戏项目制作一个可行的主菜单(这是一个jFrame类),它包含三个按钮,分别是Normal、Large和Extra Large。对于Normal按钮,我想让这个按钮在按下后运行TicTacToe(这是一个普通的java类),但由于某些原因,我无法让它工作。以下是代码:
主菜单.java
private void ButtonNormal(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Normal_TicTacToe SIZE1 = new Normal_TicTacToe(); // This is the problem
SIZE1.setVisible(true);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
new MainMenu().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton buttonNormal;
// End of variables declaration
}
Normal_TicTacToe.java-我从互联网上得到了这段代码,我正在将其修改为大号和特大号。我相信这家伙是文档中的原始作者。
public final class Normal_TicTacToe extends JApplet
{
private static final long serialVersionUID = 1L;
private final Normal_Tile[] TILES = new Normal_Tile[9];
private final int TILE_SPACING = 96;
private final int WIDTH = 96, HEIGHT = 96;
private final JFrame GAMEFRAME = new JFrame("Tic-Tac-Toe");
private final Normal_TilePainter PAINTER = new Normal_TilePainter(this);
private final Normal_ClickHandler CLICK_HANDLER = new Normal_ClickHandler(this);
private final boolean AI;
private boolean aiTurn = false;
private Normal_Holder turn = Normal_Holder.X;
private int whoseTurn = 0;
private final Dimension FRAME_SIZE = new Dimension(295, 304);
private final int FONT_SIZE = 64;
private int oWins = 0;
private int xWins = 0;
private boolean gameOver = false;
private boolean nextTurn = false;
public final Normal_AI GAME_AI = new Normal_AI(this);
public void init()
{
Normal_TicTacToe game = new Normal_TicTacToe(true);
game.newGame();
}
public Normal_TicTacToe(boolean ai)
{
this.AI = ai;
PAINTER.setSize(FRAME_SIZE);
buildFrame();
loadTiles();
}
此外,两个java文件都在同一个包中。
如果您正在寻找扩展代码和所有java文件,您可以在这里找到:
我的主菜单.java
Chall的TicTacToe和他的java文件(向下滚动,直到您看到源文件)。
Normal_TICTACTOE的构造函数如下所示:
public Normal_TicTacToe(boolean ai)
{
this.AI = ai;
PAINTER.setSize(FRAME_SIZE);
buildFrame();
loadTiles();
}
它的参数列表中有一个布尔变量。
因此,默认构造函数被覆盖。
使用布尔值(true或false)调用构造函数:
Normal_TicTacToe game = new Normal_TicTacToe(true);
(我认为这与人工智能的开启或关闭有关)
在得到的实例上调用方法newGame()。
game.newGame();
您应该在按钮中创建它的实例。
您的代码:
buttonXLarge.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ButtonXLarge(evt); // not sure what it does, but it doesn't make Tic Tac Toe
}
});
你最想做的可能是初始化并启动一个新的井字游戏板。
buttonXLarge.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Normal_TicTacToe myBoard = new Normal_TicTacToe(true);
myBoard.newGame();
}
});
我不确定JApplet将如何处理您当前正在做的事情,因为我通常从不将小程序与JFrame混合,但特别是为了激活井字游戏板,您应该在actionPerformed监听器中编写您希望它做的事情。
如果你真的想节省编码时间,你可能可以在JFrame中使用JApplet的内脏来重建TicTacToe。