103 lines
3.0 KiB
Java
103 lines
3.0 KiB
Java
package dev.kske.chess.ui;
|
|
|
|
import javax.swing.JMenu;
|
|
import javax.swing.JMenuBar;
|
|
import javax.swing.JMenuItem;
|
|
import javax.swing.JOptionPane;
|
|
|
|
import dev.kske.chess.game.Game;
|
|
import dev.kske.chess.ui.EngineUtil.EngineInfo;
|
|
|
|
/**
|
|
* Project: <strong>Chess</strong><br>
|
|
* File: <strong>MenuBar.java</strong><br>
|
|
* Created: <strong>16.07.2019</strong><br>
|
|
* Author: <strong>Kai S. K. Engelbart</strong>
|
|
*/
|
|
public class MenuBar extends JMenuBar {
|
|
|
|
private static final long serialVersionUID = -7221583703531248228L;
|
|
|
|
private final MainWindow mainWindow;
|
|
private final BoardPane boardPane;
|
|
|
|
public MenuBar(MainWindow mainWindow) {
|
|
this.mainWindow = mainWindow;
|
|
boardPane = mainWindow.getBoardPane();
|
|
|
|
initGameMenu();
|
|
initEngineMenu();
|
|
}
|
|
|
|
private void initGameMenu() {
|
|
JMenu gameMenu = new JMenu("Game");
|
|
|
|
JMenuItem naturalMenuItem = new JMenuItem("Game against natural opponent");
|
|
JMenuItem aiMenuItem = new JMenuItem("Game against artificial opponent");
|
|
JMenuItem aiVsAiMenuItem = new JMenuItem("Watch AI vs. AI");
|
|
JMenuItem uciMenuItem = new JMenuItem("UCI");
|
|
|
|
naturalMenuItem.addActionListener((evt) -> startGame(Game.createNatural(boardPane)));
|
|
|
|
aiMenuItem.addActionListener((evt) -> {
|
|
AIConfigDialog dialog = new AIConfigDialog();
|
|
dialog.setVisible(true);
|
|
if (dialog.isStartGame())
|
|
startGame(Game.createNaturalVsAI(boardPane, dialog.getMaxDepth(), dialog.getAlphaBetaThreshold()));
|
|
});
|
|
|
|
aiVsAiMenuItem.addActionListener((evt) -> startGame(Game.createAIVsAI(boardPane, 4, 3, -10, -10)));
|
|
|
|
uciMenuItem.addActionListener((evt) -> {
|
|
String enginePath = JOptionPane.showInputDialog(getParent(),
|
|
"Enter the path to a UCI-compatible chess engine:",
|
|
"Engine selection",
|
|
JOptionPane.QUESTION_MESSAGE);
|
|
if (enginePath != null) startGame(Game.createUCI(boardPane, enginePath));
|
|
});
|
|
|
|
gameMenu.add(naturalMenuItem);
|
|
gameMenu.add(aiMenuItem);
|
|
gameMenu.add(aiVsAiMenuItem);
|
|
gameMenu.add(uciMenuItem);
|
|
|
|
add(gameMenu);
|
|
|
|
// Start a game
|
|
naturalMenuItem.doClick();
|
|
}
|
|
|
|
private void initEngineMenu() {
|
|
JMenu engineMenu = new JMenu("Engine");
|
|
|
|
JMenuItem addEngineMenuItem = new JMenuItem("Add engine");
|
|
addEngineMenuItem.addActionListener((evt) -> {
|
|
String enginePath = JOptionPane.showInputDialog(getParent(),
|
|
"Enter the path to a UCI-compatible chess engine:",
|
|
"Engine selection",
|
|
JOptionPane.QUESTION_MESSAGE);
|
|
if (enginePath != null) {
|
|
EngineUtil.addEngine(enginePath);
|
|
// TODO: Rebuilt the engine menu
|
|
}
|
|
});
|
|
engineMenu.add(addEngineMenuItem);
|
|
|
|
for (EngineInfo info : EngineUtil.getEngineInfos()) {
|
|
JMenuItem engineMenuItem = new JMenuItem(info.name);
|
|
engineMenuItem.addActionListener((evt) -> startGame(Game.createUCI(boardPane, info.path)));
|
|
engineMenu.add(engineMenuItem);
|
|
}
|
|
|
|
add(engineMenu);
|
|
}
|
|
|
|
private void startGame(Game game) {
|
|
mainWindow.setGame(game);
|
|
|
|
// Update board and board component
|
|
game.reset();
|
|
game.start();
|
|
}
|
|
}
|