您好stackoverflow社区!
我正在为我的决赛制作一个AI TicTacToe项目,并且在按下jFut类中的一个jButton之后我在尝试运行另一个类时遇到了问题。
我使用的是NetBeans的jFrame类,您可以通过将其放置在容器中轻松进行设计,并且某些代码不可编辑。
我想要制作的游戏项目是一个可行的主菜单(它是一个jFrame类),它包含三个按钮,分别是Normal,Large和Extra Large。对于Normal按钮,我想让这个按钮在按下后运行TicTacToe(这是一个普通的java类),但由于某些原因我不能使它工作。以下是代码:
MainMenu.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文件,你可以在这里找到它:
My MainMenu.java
Chall's TicTacToe and his java files(向下滚动,直到看到源文件)。
答案 0 :(得分:0)
您应该在按钮中创建它的实例。
您的代码:
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
}
});
你最想要它做的是初始化并开始一个新的tic tac toe board。
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将如何处理你当前正在做的事情,因为我通常不会将applet与JFrame混合,但特别是为了激活tic tac toe board,你应该在你的内容中编写你想要它做的事情。 actionPerformed listener。
如果您真的想节省编码时间,可以使用JFrame中JApplet的内容重建TicTacToe。
答案 1 :(得分:0)
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();