diff --git a/client/src/main/java/help/FundamentalsGlossary.java b/client/src/main/java/help/FundamentalsGlossary.java
deleted file mode 100644
index 883a8a6..0000000
--- a/client/src/main/java/help/FundamentalsGlossary.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package help;
-
-import java.awt.Color;
-import java.awt.Font;
-
-import javax.swing.JTextPane;
-
-import util.Debug;
-import util.EntropyColour;
-import util.Registry;
-
-@SuppressWarnings("serial")
-public class FundamentalsGlossary extends HelpPanel
- implements Registry
-{
- private String panelName = "FundamentalsGlossary";
- private JTextPane title = new JTextPane();
- private JTextPane paneOne = new JTextPane();
- private JTextPane[] textFields = {title, paneOne};
-
- public FundamentalsGlossary()
- {
- try
- {
- setBackground(Color.WHITE);
- setPanelName(panelName);
- setTextFields(textFields);
- addMouseListeners("perfect", "challenge");
- setNodeName("Glossary");
- setLayout(null);
- paneOne.setFont(new Font("SansSerif", Font.PLAIN, 14));
- paneOne.setContentType("text/html");
- paneOne.setBounds(21, 54, 429, 282);
- add(paneOne);
- title.setText("Glossary");
- title.setForeground(EntropyColour.COLOUR_HELP_TITLE);
- title.setFont(new Font("Tahoma", Font.BOLD, 18));
- title.setBounds(21, 25, 159, 30);
- add(title);
- }
- catch (Throwable t)
- {
- Debug.stackTrace(t);
- }
- }
-
- @Override
- public void refresh()
- {
- boolean blindUnlocked = rewards.getBoolean(REWARDS_BOOLEAN_BLIND, false);
-
- String glossaryText = "\r\n
\r\n";
-
- if (blindUnlocked)
- {
- glossaryText += "- Blind: Playing blind means not looking at your cards.
\r\n";
- }
-
- glossaryText += "- Handicap: Starting a game with fewer cards than your opponents.
\r\n";
- glossaryText += "- Minbid: The minimum possible bid at a given moment, which varies for different variants of Entropy.
\r\n";
- glossaryText += "- Overbid: A bid which will lose to a challenge - the exact definition will vary for different variants of Entropy.
\r\n";
- glossaryText += "- Perfect Bid: The highest possible bid for a particular round. For achievements, this counts only if the numeric value is 5 or higher.
\r\n";
- glossaryText += "
\r\n";
-
- paneOne.setText(glossaryText);
- }
-}
\ No newline at end of file
diff --git a/client/src/main/java/help/FundamentalsTheDeck.java b/client/src/main/java/help/FundamentalsTheDeck.java
deleted file mode 100644
index c24733c..0000000
--- a/client/src/main/java/help/FundamentalsTheDeck.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package help;
-
-import java.awt.Color;
-import java.awt.Font;
-
-import javax.swing.JLabel;
-import javax.swing.JTextPane;
-import javax.swing.SwingConstants;
-
-import screen.ScreenCache;
-import util.CardsUtil;
-import util.Debug;
-import util.EntropyColour;
-import util.Registry;
-
-@SuppressWarnings("serial")
-public class FundamentalsTheDeck extends HelpPanel
- implements Registry
-{
- private String clubString = "clubs (\u2663)";
- private String diamondString = "diamonds (\u2666)";
- private String moonString = null;
-
- private String panelName = "FundamentalsTheDeck";
- private JTextPane title = new JTextPane();
- private JTextPane paneOne = new JTextPane();
- private JTextPane[] textFields = {title, paneOne};
-
- private final JLabel clubLabel = new JLabel("\u2663");
- private final JLabel diamondLabel = new JLabel("\u2666");
- private final JLabel heartLabel = new JLabel("\u2665");
- private final JLabel moonLabel = new JLabel(CardsUtil.MOONS_SYMBOL);
- private final JLabel spadeLabel = new JLabel("\u2660");
- private final JLabel starLabel = new JLabel(CardsUtil.STARS_SYMBOL);
- private final JLabel label_3 = new JLabel("<");
- private final JLabel label_4 = new JLabel("<");
- private final JLabel label_5 = new JLabel("<");
- private final JLabel rightmostLabel = new JLabel("<");
- private final JLabel leftmostLabel = new JLabel("<");
-
- public FundamentalsTheDeck()
- {
- try
- {
- setBackground(Color.WHITE);
- setPanelName(panelName);
- setTextFields(textFields);
- addMouseListeners("bidding");
- setNodeName("The Deck");
- setLayout(null);
- paneOne.setFont(new Font("SansSerif", Font.PLAIN, 14));
- paneOne.setContentType("text/html");
- paneOne.setBounds(21, 54, 429, 310);
- add(paneOne);
- title.setText("The Deck");
- title.setForeground(EntropyColour.COLOUR_HELP_TITLE);
- title.setFont(new Font("Tahoma", Font.BOLD, 18));
- title.setEditable(false);
- title.setBounds(21, 25, 165, 30);
- add(title);
- clubLabel.setHorizontalAlignment(SwingConstants.CENTER);
- clubLabel.setFont(new Font("Segoe UI Symbol", Font.PLAIN, 40));
- clubLabel.setBounds(80, 360, 65, 60);
- add(clubLabel);
- label_4.setHorizontalAlignment(SwingConstants.CENTER);
- label_4.setFont(new Font("Arial", Font.PLAIN, 40));
- label_4.setBounds(120, 360, 65, 60);
- add(label_4);
- diamondLabel.setHorizontalAlignment(SwingConstants.CENTER);
- diamondLabel.setForeground(Color.RED);
- diamondLabel.setFont(new Font("Segoe UI Symbol", Font.PLAIN, 40));
- diamondLabel.setBounds(160, 360, 65, 60);
- add(diamondLabel);
- label_3.setHorizontalAlignment(SwingConstants.CENTER);
- label_3.setFont(new Font("Arial", Font.PLAIN, 40));
- label_3.setBounds(200, 360, 65, 60);
- add(label_3);
- heartLabel.setHorizontalAlignment(SwingConstants.CENTER);
- heartLabel.setForeground(Color.RED);
- heartLabel.setFont(new Font("Segoe UI Symbol", Font.PLAIN, 40));
- heartLabel.setBounds(240, 360, 65, 60);
- add(heartLabel);
- moonLabel.setHorizontalAlignment(SwingConstants.CENTER);
- moonLabel.setForeground(EntropyColour.COLOUR_SUIT_PURPLE);
- moonLabel.setFont(new Font("Segoe UI Symbol", Font.PLAIN, 32));
- moonLabel.setBounds(240, 360, 65, 60);
- add(moonLabel);
- label_5.setHorizontalAlignment(SwingConstants.CENTER);
- label_5.setFont(new Font("Arial", Font.PLAIN, 40));
- label_5.setBounds(280, 360, 65, 60);
- add(label_5);
- spadeLabel.setHorizontalAlignment(SwingConstants.CENTER);
- spadeLabel.setFont(new Font("Segoe UI Symbol", Font.PLAIN, 40));
- spadeLabel.setBounds(320, 360, 65, 60);
- add(spadeLabel);
- rightmostLabel.setHorizontalAlignment(SwingConstants.CENTER);
- rightmostLabel.setFont(new Font("Arial", Font.PLAIN, 40));
- rightmostLabel.setBounds(360, 360, 65, 60);
- add(rightmostLabel);
- leftmostLabel.setHorizontalAlignment(SwingConstants.CENTER);
- leftmostLabel.setFont(new Font("Arial", Font.PLAIN, 40));
- leftmostLabel.setBounds(40, 360, 65, 60);
- add(leftmostLabel);
- starLabel.setHorizontalAlignment(SwingConstants.CENTER);
- starLabel.setFont(new Font("Segoe UI Symbol", Font.PLAIN, 40));
- starLabel.setBounds(400, 360, 65, 60);
- starLabel.setForeground(EntropyColour.COLOUR_SUIT_GOLD);
- add(starLabel);
- }
- catch (Throwable t)
- {
- Debug.stackTrace(t);
- }
- }
-
- private void setPaneOneText(boolean moonsAndStars)
- {
- String paneOneText = "For the standard game, a normal deck of 52 cards is used. This deck is made up of four suits: "
- + clubString + ", " + diamondString + ", hearts (\u2665) and spades (\u2660), "
- + "each of 13 cards. ";
-
- if (moonsAndStars)
- {
- paneOneText += "Two optional suits, " + moonString + " and stars ";
- paneOneText += "(" + CardsUtil.STARS_SYMBOL + ") can also be added to the deck.";
- }
-
- paneOneText += "The 13 cards in each suit are the 13 ranks of cards: ace (A), two (2), three (3), four (4), "
- + "five (5), six (6), seven (7), eight (8), nine (9), ten (T), jack (J), queen (Q) and king (K). "
- + "\r\n
\r\nWhen playing Entropy and its variants, the focus is on the suit as that\u2019s what is used during the bidding. "
- + "Each card is worth one of its own suit, irrespective of rank. For example, the five of hearts (5\u2665) "
- + "is worth one heart. However, aces are special cards. Not only are they worth one of their own suit, but they are also worth an extra one of all the suits. "
- + "This means that the ace of spades (A\u2660) is worth one club, one diamond, one heart and two spades (one for being a spade and one for being an ace)."
- + "\r\n
\r\nTo define whether one bid is higher than another, the suits are also ordered as follows:\r\n";
-
- paneOne.setText(paneOneText);
- }
-
- @Override
- public void fireAppearancePreferencesChange()
- {
- boolean fourColours = ScreenCache.getHelpDialog().fourColours;
- String clubsColour = fourColours?"green":"black";
- String diamondsColour = fourColours?"blue":"red";
- String moonsColour = fourColours?"purple":"CC9900";
-
- clubString = "clubs (\u2663)";
- diamondString = "diamonds (\u2666)";
- moonString = "moons (" + CardsUtil.MOONS_SYMBOL + ")";
-
- boolean moonsAndStars = rewards.getBoolean(REWARDS_BOOLEAN_EXTRA_SUITS, false);
- setPaneOneText(moonsAndStars);
-
- if (fourColours)
- {
- clubLabel.setForeground(new Color(0, 128, 0));
- diamondLabel.setForeground(Color.BLUE);
- moonLabel.setForeground(EntropyColour.COLOUR_SUIT_PURPLE);
- }
- else
- {
- clubLabel.setForeground(Color.black);
- diamondLabel.setForeground(new Color(255, 0, 0));
- moonLabel.setForeground(EntropyColour.COLOUR_SUIT_GOLD);
- }
- }
-
- private void refreshSuitRankingVisibility()
- {
- boolean moonsAndStars = rewards.getBoolean(REWARDS_BOOLEAN_EXTRA_SUITS, false);
-
- if (moonsAndStars)
- {
- moonLabel.setVisible(true);
- starLabel.setVisible(true);
- rightmostLabel.setVisible(true);
- leftmostLabel.setVisible(true);
- clubLabel.setBounds(0, 360, 65, 60);
- diamondLabel.setBounds(80, 360, 65, 60);
- heartLabel.setBounds(160, 360, 65, 60);
- }
- else
- {
- moonLabel.setVisible(false);
- starLabel.setVisible(false);
- rightmostLabel.setVisible(false);
- leftmostLabel.setVisible(false);
- clubLabel.setBounds(80, 360, 65, 60);
- diamondLabel.setBounds(160, 360, 65, 60);
- heartLabel.setBounds(240, 360, 65, 60);
- }
- }
-
- @Override
- public void refresh()
- {
- fireAppearancePreferencesChange();
- refreshSuitRankingVisibility();
- }
-}
\ No newline at end of file
diff --git a/client/src/main/java/help/HelpPanel.java b/client/src/main/java/help/HelpPanel.java
deleted file mode 100644
index a91d631..0000000
--- a/client/src/main/java/help/HelpPanel.java
+++ /dev/null
@@ -1,396 +0,0 @@
-package help;
-
-import java.awt.Color;
-import java.awt.Cursor;
-import java.awt.Point;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.MouseMotionAdapter;
-
-import javax.swing.JPanel;
-import javax.swing.JTextPane;
-import javax.swing.text.DefaultHighlighter;
-import javax.swing.text.Highlighter;
-import javax.swing.text.Highlighter.HighlightPainter;
-
-import screen.HelpDialog;
-import screen.ScreenCache;
-import util.Debug;
-
-@SuppressWarnings("serial")
-/**
- * Object representing a 'page' of the help dialog.
- */
-public class HelpPanel extends JPanel
-{
- private String panelName = null;
- private String nodeName = null;
- private JTextPane[] textFields = null;
-
- public HelpPanel()
- {
-
- }
-
- public boolean contains(String searchStr)
- {
- if (textFields == null)
- {
- Debug.stackTrace("NULL textFields for panel " + panelName);
- return false;
- }
- int length = textFields.length;
-
- String searchStrLowerCase = searchStr.toLowerCase();
-
- for (int i=0; i 1)
- {
- int i = 1;
- String characterToTheLeft = text.substring(position-i-1, position-i);
-
- while (isLetter(characterToTheLeft))
- {
- try
- {
- word = characterToTheLeft + word;
- i++;
- characterToTheLeft = text.substring(position-i-1, position-i);
- }
- catch (IndexOutOfBoundsException e)
- {
- characterToTheLeft = "";
- }
- }
- }
-
- if (position < length)
- {
- int i = 1;
- String characterToTheRight = text.substring(position+i-1, position+i);
-
- while (isLetter(characterToTheRight))
- {
- try
- {
- word += characterToTheRight;
- i++;
- characterToTheRight = text.substring(position+i-1, position+i);
- }
- catch (IndexOutOfBoundsException e)
- {
- characterToTheRight = "";
- }
- }
- }
-
- return word.toLowerCase();
- }
-
- private boolean isLetter(String letter)
- {
- return letter.matches("^[a-zA-Z]+$");
- }
-
- private void navigateToPageBasedOnKeyWord(String keyWord)
- {
- Debug.append("Navigated for word " + keyWord, true);
- HelpDialog helpDialog = ScreenCache.getHelpDialog();
-
- if (keyWord.startsWith("bidd"))
- {
- if (panelName.contains("Entropy"))
- {
- helpDialog.setSelectionForWord("RulesEntropyBidding");
- }
- else if (panelName.contains("Vectropy"))
- {
- helpDialog.setSelectionForWord("RulesVectropyBidding");
- }
- }
- else if (keyWord.startsWith("chall"))
- {
- if (panelName.contains("Entropy"))
- {
- helpDialog.setSelectionForWord("RulesEntropyChallenging");
- }
- else if (panelName.contains("Vectropy"))
- {
- helpDialog.setSelectionForWord("RulesVectropyChallenging");
- }
- }
- else if (keyWord.equals("order"))
- {
- helpDialog.setSelectionForWord("FundamentalsTheDeck");
- }
- else if (keyWord.equals("perfect"))
- {
- helpDialog.setSelectionForWord("FundamentalsGlossary");
- }
- }
-
- private String getDocumentText(JTextPane pane)
- {
- try
- {
- int length = pane.getDocument().getLength();
- String documentText = pane.getDocument().getText(0, length);
- return documentText;
- }
- catch (Throwable e)
- {
- Debug.stackTrace(e);
- return null;
- }
- }
-
- private boolean isKeyWord(String word, String[] wordsToExclude)
- {
- int size = wordsToExclude.length;
- for (int i=0; iYou can report any issues you may find through the 'Bug Report' feature, located under the 'Help' menu. Please include as much information as you can about what you were doing when you encountered the problem. \r\n
\r\nSending the bug report will also send logs that will help me to investigate, however these are lost when you exit the application so please send the bug report before doing so. In more severe circumstances the logs will get emailed automatically, so if you see the following error message you don't need to send a bug report yourself: