package windowInterface; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import backend.Game; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JLabel; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Arrays; import java.util.LinkedList; import java.awt.event.ActionEvent; import javax.swing.JList; import javax.swing.AbstractListModel; import javax.swing.JToggleButton; import javax.swing.JRadioButton; import javax.swing.JCheckBox; import backend.PieceType; import javax.swing.JOptionPane; public class MyInterface extends JFrame { private static final long serialVersionUID = -6840815447618468846L; private JPanel contentPane; private JLabel turnLabel; private JLabel borderLabel; private JLabel speedLabel; private JPanelChessBoard panelDraw; private Game game; private JLabel actionLabel; private JCheckBox chckbxBlackAI; private JCheckBox chckbxWhiteAI; /** * Create the frame. */ public MyInterface() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(10, 10, 650, 650); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane); JPanel panelTop = new JPanel(); contentPane.add(panelTop, BorderLayout.NORTH); JPanel panelRight = new JPanel(); contentPane.add(panelRight, BorderLayout.EAST); panelRight.setLayout(new GridLayout(4,1)); actionLabel = new JLabel("Waiting For Start"); panelTop.add(actionLabel); JButton btnGo = new JButton("Start/Restart"); btnGo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { clicButtonStart(); } }); panelTop.add(btnGo); turnLabel = new JLabel("Turn : X"); panelTop.add(turnLabel); JButton btnLoad = new JButton("Load File"); btnLoad.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { clicLoadFileButton(); } }); panelRight.add(btnLoad); JButton btnSave = new JButton("Save To File"); btnSave.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { clicSaveToFileButton(); } }); panelRight.add(btnSave); JButton btnAdder = new JButton("Add Piece"); btnAdder.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { clickButtonAdder(); } }); panelRight.add(btnAdder); JButton btnPieceSelector = new JButton("Piece Select"); btnPieceSelector.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { clickButtonSelector(); } }); panelRight.add(btnPieceSelector); JButton btnUndo = new JButton("Undo"); btnUndo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { clicUndoButton(); } }); panelTop.add(btnUndo); chckbxWhiteAI = new JCheckBox("WhiteAI"); chckbxWhiteAI.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { clicAIToggle(true); } }); panelTop.add(chckbxWhiteAI); chckbxBlackAI = new JCheckBox("BlackAI"); chckbxBlackAI.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { clicAIToggle(false); } }); panelTop.add(chckbxBlackAI); panelDraw = new JPanelChessBoard(this); contentPane.add(panelDraw, BorderLayout.CENTER); } public void setStepBanner(String s) { turnLabel.setText(s); } public void setBorderBanner(String s) { borderLabel.setText(s); } public JPanelChessBoard getPanelDessin() { return panelDraw; } public void instantiateSimu() { if(game==null) { game = new Game(this); panelDraw.setGame(game); game.start(); } } public void clicButtonStart() { this.instantiateSimu(); game.setDefaultSetup(); } public void clickButtonAdder() { panelDraw.toggleAdderMode(); } public void clickButtonSelector() { panelDraw.togglePieceSelector(); } private void clicUndoButton() { if(game == null) { System.out.println("error : can't undo while no game present"); } else { game.undoLastMove(); } } public void clicAIToggle(boolean isWhite) { if(game == null) { System.out.println("error : can't activate AI while no game present"); if(isWhite) { chckbxWhiteAI.setSelected(false); }else { chckbxBlackAI.setSelected(false); } } else { game.toggleAI(isWhite); } } public void clicLoadFileButton() { Game loadedSim = new Game(this); String fileName=SelectFile(); LinkedList lines = new LinkedList(); if (fileName.length()>0) { try { BufferedReader fileContent = new BufferedReader(new FileReader(fileName)); String line = fileContent.readLine(); int colorID = 0; while (line != null) { lines.add(line); line = fileContent.readLine(); } loadedSim.setBoard(Arrays.stream(lines.toArray()).map(Object::toString).toArray(String[]::new)); fileContent.close(); } catch (Exception e) { e.printStackTrace(); } game = loadedSim; panelDraw.setGame(game); this.repaint(); } } public void clicSaveToFileButton() { String fileName=SelectFile(); if (fileName.length()>0) { String[] content = game.getFileRepresentation(); writeFile(fileName, content); } } public String SelectFile() { String s; JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new java.io.File(".")); chooser.setDialogTitle("Choose a file"); chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); chooser.setAcceptAllFileFilterUsed(true); if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { s=chooser.getSelectedFile().toString(); } else { System.out.println("No Selection "); s=""; } return s; } public void writeFile(String fileName, String[] content) { FileWriter csvWriter; try { csvWriter = new FileWriter(fileName); for (String row : content) { csvWriter.append(row); csvWriter.append("\n"); } csvWriter.flush(); csvWriter.close(); } catch (IOException e) { e.printStackTrace(); } } public void update(int turnCount, boolean turnIsWhite) { turnLabel.setText("Turn : "+turnCount+", "+ (turnIsWhite?"White":"Black")); actionLabel.setText(panelDraw.isPieceAdderMode()?"Adding Piece": (panelDraw.isPieceSelectorMode()?"Selecting Piece to Add": "Playing")); /*if (game != null && game.isCheckmate(true)) { String winner = turnIsWhite ? "Black" : "White"; // since it's mate, last move won JOptionPane.showMessageDialog(this, "Checkmate! " + winner + " wins.", "Game Over", JOptionPane.INFORMATION_MESSAGE); }*/ this.repaint(); } public void eraseLabels() { this.setStepBanner("Turn : X"); } }