- 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.JMenuItem;
import javax.swing.JOptionPane;
import net.berack.upo.ai.gui.MyDecisionPanel;
import net.berack.upo.ai.problem3.SmileLib;
@@ -30,6 +31,13 @@ public class PrototypeGUI extends MyDecisionPanel {
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."
));
menu.add(item);
return menu;
}
}

View File

@@ -1,6 +1,8 @@
package net.berack.upo.ai.decision;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import net.berack.upo.ai.gui.MyDecisionPanel;
import net.berack.upo.ai.problem3.SmileLib;
@@ -28,7 +30,20 @@ public class VehicleGUI extends MyDecisionPanel {
@Override
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.Dimension;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
@@ -47,6 +49,11 @@ public class MainGUI extends JFrame {
this.buildMenu();
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.setSize(this.size);
this.setResizable(false);

View File

@@ -9,6 +9,8 @@ import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import net.berack.upo.ai.gui.MyPanel;
import net.berack.upo.ai.problem1.Puzzle8.Move;
@@ -165,13 +167,24 @@ public class Puzzle8GUI extends MyPanel {
@Override
public JMenu getMenu() {
var menu = new JMenu("Game");
var item1 = new JMenuItem("Shuffle");
item1.addActionListener(action -> this.shuffleGame());
menu.add(item1);
var item = new JMenuItem("Shuffle");
item.addActionListener(action -> this.shuffleGame());
menu.add(item);
var item2 = new JMenuItem("Show solution");
item2.addActionListener(action -> this.solveGame());
menu.add(item2);
item = new JMenuItem("Show solution");
item.addActionListener(action -> this.solveGame());
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;
}

View File

@@ -9,6 +9,7 @@ import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import net.berack.upo.ai.gui.MyPanel;
@@ -138,12 +139,11 @@ public class TrisGUI extends MyPanel {
@Override
public JMenu getMenu() {
var menu = new JMenu("Game");
var item1 = new JMenuItem("Reset");
item1.addActionListener(action -> this.reset());
menu.add(item1);
var item = new JMenuItem("Reset");
item.addActionListener(action -> this.reset());
menu.add(item);
var separator = new JSeparator();
menu.add(separator);
menu.add(new JSeparator());
var item2 = new JCheckBoxMenuItem("AI Enabled");
item2.setSelected(this.ai != null);
@@ -154,6 +154,19 @@ public class TrisGUI extends MyPanel {
this.aiFirst.setSelected(false);
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;
}
}

View File

@@ -2,12 +2,14 @@ package net.berack.upo.ai.problem3;
import java.awt.Component;
import java.awt.FileDialog;
import java.awt.GridBagLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import net.berack.upo.ai.gui.MyDecisionPanel;
@@ -33,6 +35,10 @@ public class LikelihoodWeightingGUI extends MyDecisionPanel {
this.setFont(totLabel);
this.setExtraComponents(new Component[] { totLabel, totValue });
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");
open.addActionListener(action -> this.openFile());
menu.add(open);
menu.add(new JSeparator());
var nets = new JMenuItem[3];
nets[0] = new JMenuItem("Alarm net");
nets[0].addActionListener(action -> this.openFile("lw/Alarm.xdsl"));
nets[1] = new JMenuItem("WetGrass net");
nets[1].addActionListener(action -> this.openFile("lw/WetGrass.xdsl"));
nets[2] = new JMenuItem("Malaria net");
nets[2].addActionListener(action -> this.openFile("lw/Malaria.xdsl"));
menu.add(open);
menu.add(new JSeparator());
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;
}