需要帮助为用户function添加难度选项

快速问题,我开发了3个AI,每个AI都有不同的深度。

目前要选择你想要玩的AI,你必须进入名为Main.java的java文件,并将其更改为你想要的任何一个。 要改变的路线是:

chessGame.setPlayer(Piece.COLOR_BLACK, ai3);//Here AI is assigned 

我想让用户在游戏开始时有一个选项来选择我希望对界面有所帮助的AI,我在想像JOptionpane这样的东西可能有用。

(我只是不确定如何为AI选择做一个)

目前A.I’s

ai1 ai2 ai3

 package chess; import chess.ai.SimpleAiPlayerHandler; import chess.gui.ChessGui; import chess.logic.ChessGame; import chess.logic.Piece; public class Main { public static void main(String[] args) { // Creating the Game ChessGame chessGame = new ChessGame(); // Creating the Human Player //Human Player is the Object chessGui ChessGui chessGui = new ChessGui(chessGame); //Creating the AI's SimpleAiPlayerHandler ai1 = new SimpleAiPlayerHandler(chessGame);//Super Dumb SimpleAiPlayerHandler ai2 = new SimpleAiPlayerHandler(chessGame);//Dumb SimpleAiPlayerHandler ai3 = new SimpleAiPlayerHandler(chessGame);//Not So Dumb // Set strength of AI, how far they can see ahead ai1.maxDepth = 1; ai1.maxDepth = 2; ai3.maxDepth = 3; //Assign the Human to White chessGame.setPlayer(Piece.COLOR_WHITE, chessGui); //Assign the not so dumb AI to black chessGame.setPlayer(Piece.COLOR_BLACK, ai3); // in the end we start the game new Thread(chessGame).start(); } } 

谢谢你的帮助。

您应该使用JComboBox来允许用户从3个可用选项中进行选择。 如果你使用这个JComboBox制作一个启动JFrame,那么你可以在之后创建你的主游戏框架并从JComboBox传递它的值。

例如,您可以让JComboBox提供难度设置Easy,Medium和Hard的选项。 在JButton上使用动作侦听器从JComboBox获取选定的值并将其转换为适合您的minimax算法的int值。 也就是说,通过1表示简单,2表示中等,3表示硬。

接下来更改你的ai类,使maxDepth在构造函数中。 然后当你实例化你的ai时,只要给它从前一帧向前传递的值,你就可以在正确的难度设置下创建你需要的唯一ai。

编辑:

看起来你设法得到类似的工作,这是伟大的! 如果它对你有所帮助,我已经在下面列举了一个简短的例子,说明我将如何做到这一点。 请注意,我还将其设置为使得SimpleAiPlayerHandler构造函数也采用int值来实例化maxDepth变量。 你需要添加它。 因为它使用我没有的类,所以我无法编译它。 但是,如果其他人需要做类似的事情,只需删除DifficultyListener中的所有内容,除了print语句和从JComboBox获得困难的行,你会看到它工作(和编译)。

 import javax.swing.*; import java.awt.event.*; public class ChessSplash extends JFrame { private final JComboBox difficultySetting; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ChessSplash gui = new ChessSplash(); gui.setVisible(true); } }); } public enum Difficulty { EASY(1, "Easy"), MEDIUM(2, "Medium"), HARD(3, "Hard"); private final int intValue; private final String stringValue; private Difficulty(int intValue, String stringValue) { this.intValue = intValue; this.stringValue = stringValue; } @Override public String toString() { return stringValue; } }; public ChessSplash() { super("Chess Game"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); difficultySetting = new JComboBox<>(Difficulty.values()); JButton startButton = new JButton("Start Game"); startButton.addActionListener(new DifficultyListener()); JPanel mainPanel = new JPanel(); add(mainPanel); mainPanel.add(difficultySetting); mainPanel.add(startButton); pack(); } private class DifficultyListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { //Declare AI SimpleAiPlayerHandler ai; //Declare and Instantiate Chess Game ChessGame chessGame = new ChessGame(); //Human Player is the Object chessGui ChessGui chessGui = new ChessGui(chessGame); //Assign Human Player to White chessGame.setPlayer(Piece.COLOR_WHITE, chessGui); //Get the selected difficulty setting Difficulty difficulty = (Difficulty)difficultySetting.getSelectedItem(); //Instantiate Computer AI pass it the maxDepth for use in the constructor ai = new SimpleAiPlayerHandler(difficulty.intValue, chessGame); //Assign Computer Player to Black chessGame.setPlayer(Piece.COLOR_BLACK, ai); //Demonstrate the enum combobox works System.out.println(difficulty.intValue); //Dispose of the splash JFrame ChessSplash.this.dispose(); //Start your game thread (I would probably do something to move this //onto the EDT if you're doing this is swing personally new Thread(chessGame).start(); } } }