- added help menu to guide the user
This commit is contained in:
2024-01-12 08:44:56 +01:00
parent 70320860dc
commit e5f953526e
6 changed files with 86 additions and 16 deletions

View File

@@ -2,6 +2,7 @@ package net.berack.upo.ai.decision;
import javax.swing.JMenu; import javax.swing.JMenu;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import net.berack.upo.ai.gui.MyDecisionPanel; import net.berack.upo.ai.gui.MyDecisionPanel;
import net.berack.upo.ai.problem3.SmileLib; import net.berack.upo.ai.problem3.SmileLib;
@@ -30,6 +31,13 @@ public class PrototypeGUI extends MyDecisionPanel {
var item = new JMenuItem("Reset"); var item = new JMenuItem("Reset");
item.addActionListener(a -> { this.net.clearAllEvidence(); this.updateAll(); }); item.addActionListener(a -> { this.net.clearAllEvidence(); this.updateAll(); });
menu.add(item); menu.add(item);
item = new JMenuItem("Help");
item.addActionListener(a -> JOptionPane.showMessageDialog(this,
"Click on the decision and see the changes in the net\n"
+ "The BOLD marked outcomes are the best decision calculated by the model\n"
+ "At the end it will be displayed the expected utility of all the decisions."
));
menu.add(item);
return menu; return menu;
} }
} }

View File

@@ -1,6 +1,8 @@
package net.berack.upo.ai.decision; package net.berack.upo.ai.decision;
import javax.swing.JMenu; import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import net.berack.upo.ai.gui.MyDecisionPanel; import net.berack.upo.ai.gui.MyDecisionPanel;
import net.berack.upo.ai.problem3.SmileLib; import net.berack.upo.ai.problem3.SmileLib;
@@ -28,7 +30,20 @@ public class VehicleGUI extends MyDecisionPanel {
@Override @Override
public JMenu getMenu() { public JMenu getMenu() {
return null; var menu = new JMenu("Network");
var item = new JMenuItem("Reset");
item.addActionListener(a -> { this.net.clearAllEvidence(); this.updateAll(); });
menu.add(item);
item = new JMenuItem("Help");
item.addActionListener(a -> JOptionPane.showMessageDialog(this,
"Click on the decision and see the changes in the net\n"
+ "The BOLD marked outcomes are the best decision calculated by the model\n"
+ "At the end it will be displayed the expected utility of all the decisions.\n\n"
+ "NOTE: this model is hard to compute, so after making a decision\n"
+ "it might freeze the window while it's calculating the results"
));
menu.add(item);
return menu;
} }
} }

View File

@@ -2,9 +2,11 @@ package net.berack.upo.ai.gui;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu; import javax.swing.JMenu;
import javax.swing.JMenuBar; import javax.swing.JMenuBar;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
@@ -47,6 +49,11 @@ public class MainGUI extends JFrame {
this.buildMenu(); this.buildMenu();
this.setJMenuBar(menuBar); this.setJMenuBar(menuBar);
var label = new JLabel("Use the menù 'view' to choose what to do");
var panel = new JPanel(new GridBagLayout());
panel.add(label);
this.setContentPane(panel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(this.size); this.setSize(this.size);
this.setResizable(false); this.setResizable(false);

View File

@@ -9,6 +9,8 @@ import javax.swing.ImageIcon;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JMenu; import javax.swing.JMenu;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import net.berack.upo.ai.gui.MyPanel; import net.berack.upo.ai.gui.MyPanel;
import net.berack.upo.ai.problem1.Puzzle8.Move; import net.berack.upo.ai.problem1.Puzzle8.Move;
@@ -165,13 +167,24 @@ public class Puzzle8GUI extends MyPanel {
@Override @Override
public JMenu getMenu() { public JMenu getMenu() {
var menu = new JMenu("Game"); var menu = new JMenu("Game");
var item1 = new JMenuItem("Shuffle"); var item = new JMenuItem("Shuffle");
item1.addActionListener(action -> this.shuffleGame()); item.addActionListener(action -> this.shuffleGame());
menu.add(item1); menu.add(item);
var item2 = new JMenuItem("Show solution"); item = new JMenuItem("Show solution");
item2.addActionListener(action -> this.solveGame()); item.addActionListener(action -> this.solveGame());
menu.add(item2); menu.add(item);
menu.add(new JSeparator());
item = new JMenuItem("Help");
item.addActionListener(a -> JOptionPane.showMessageDialog(this,
"This is a recreation of the game of the 8 tiles\n"
+ "To win the game you must sort the tiles in ascending order\n"
+ "with the empty tile at the end.\n"
+ "The empty space is used to move all the other tiles."
));
menu.add(item);
return menu; return menu;
} }

View File

@@ -9,6 +9,7 @@ import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem; import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu; import javax.swing.JMenu;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator; import javax.swing.JSeparator;
import net.berack.upo.ai.gui.MyPanel; import net.berack.upo.ai.gui.MyPanel;
@@ -138,12 +139,11 @@ public class TrisGUI extends MyPanel {
@Override @Override
public JMenu getMenu() { public JMenu getMenu() {
var menu = new JMenu("Game"); var menu = new JMenu("Game");
var item1 = new JMenuItem("Reset"); var item = new JMenuItem("Reset");
item1.addActionListener(action -> this.reset()); item.addActionListener(action -> this.reset());
menu.add(item1); menu.add(item);
var separator = new JSeparator(); menu.add(new JSeparator());
menu.add(separator);
var item2 = new JCheckBoxMenuItem("AI Enabled"); var item2 = new JCheckBoxMenuItem("AI Enabled");
item2.setSelected(this.ai != null); item2.setSelected(this.ai != null);
@@ -154,6 +154,19 @@ public class TrisGUI extends MyPanel {
this.aiFirst.setSelected(false); this.aiFirst.setSelected(false);
menu.add(this.aiFirst); menu.add(this.aiFirst);
menu.add(new JSeparator());
item = new JMenuItem("Help");
item.addActionListener(a -> JOptionPane.showMessageDialog(this,
"This is a recreation of the game of Tris\n"
+ "If you start first you will have the X symbol, otherwise you will have the O symbol.\n"
+ "To win the game you must make 3 consecutive symbols. (horizontally/vertically/diagonally)\n"
+ "You will have an opponent, AI based or human (you can choose it in the menù),\n"
+ "that have the same objective as you have, but of opposite symbol.\n"
+ "When someone wins the game is stopped and the tris is highlighted in red"
));
menu.add(item);
return menu; return menu;
} }
} }

View File

@@ -2,12 +2,14 @@ package net.berack.upo.ai.problem3;
import java.awt.Component; import java.awt.Component;
import java.awt.FileDialog; import java.awt.FileDialog;
import java.awt.GridBagLayout;
import javax.swing.JComboBox; import javax.swing.JComboBox;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JMenu; import javax.swing.JMenu;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator; import javax.swing.JSeparator;
import net.berack.upo.ai.gui.MyDecisionPanel; import net.berack.upo.ai.gui.MyDecisionPanel;
@@ -33,6 +35,10 @@ public class LikelihoodWeightingGUI extends MyDecisionPanel {
this.setFont(totLabel); this.setFont(totLabel);
this.setExtraComponents(new Component[] { totLabel, totValue }); this.setExtraComponents(new Component[] { totLabel, totValue });
this.buildPanel(null); this.buildPanel(null);
var label = new JLabel("Use the menù 'File' to open a net");
this.setLayout(new GridBagLayout());
this.add(label);
} }
/** /**
@@ -98,20 +104,28 @@ public class LikelihoodWeightingGUI extends MyDecisionPanel {
var open = new JMenuItem("Open"); var open = new JMenuItem("Open");
open.addActionListener(action -> this.openFile()); open.addActionListener(action -> this.openFile());
menu.add(open);
menu.add(new JSeparator());
var nets = new JMenuItem[3]; var nets = new JMenuItem[3];
nets[0] = new JMenuItem("Alarm net"); nets[0] = new JMenuItem("Alarm net");
nets[0].addActionListener(action -> this.openFile("lw/Alarm.xdsl")); nets[0].addActionListener(action -> this.openFile("lw/Alarm.xdsl"));
nets[1] = new JMenuItem("WetGrass net"); nets[1] = new JMenuItem("WetGrass net");
nets[1].addActionListener(action -> this.openFile("lw/WetGrass.xdsl")); nets[1].addActionListener(action -> this.openFile("lw/WetGrass.xdsl"));
nets[2] = new JMenuItem("Malaria net"); nets[2] = new JMenuItem("Malaria net");
nets[2].addActionListener(action -> this.openFile("lw/Malaria.xdsl")); nets[2].addActionListener(action -> this.openFile("lw/Malaria.xdsl"));
menu.add(open);
menu.add(new JSeparator());
for(var net : nets) menu.add(net); for(var net : nets) menu.add(net);
menu.add(new JSeparator());
var item = new JMenuItem("Help");
item.addActionListener(a -> JOptionPane.showMessageDialog(this,
"Here you can see the likleihood weighting algoritm.\n"
+ "To do it you have to load a net from the samples provided,\n"
+ "or you can open a custom net.\n\n"
+ "NOTE: this algorithm do not support decision nodes yet"
));
menu.add(item);
return menu; return menu;
} }