diff --git a/client/src/main/java/object/ApiStrategy.java b/client/src/main/java/object/ApiStrategy.java deleted file mode 100644 index 301c9d33..00000000 --- a/client/src/main/java/object/ApiStrategy.java +++ /dev/null @@ -1,93 +0,0 @@ -package object; - -/** - * Wrapper class for an API strategy - */ -public class ApiStrategy -{ - private String name = ""; - private boolean entropy = false; - private boolean vectropy = false; - private int portNumber = -1; - private String messageType = ""; - private String error = ""; - - public Object[] getTableModelRow() - { - boolean enabled = error.isEmpty(); - Object[] row = {name, Integer.valueOf(portNumber), getGameModeDesc(), messageType, Boolean.valueOf(enabled)}; - return row; - } - - public boolean isEnabled() - { - return error.isEmpty(); - } - - private String getGameModeDesc() - { - if (entropy - && vectropy) - { - return "Both"; - } - else if (entropy) - { - return "Entropy"; - } - - return "Vectropy"; - } - - /** - * Gets / sets - */ - public String getName() - { - return name; - } - public void setName(String name) - { - this.name = name; - } - public boolean getEntropy() - { - return entropy; - } - public void setEntropy(boolean entropy) - { - this.entropy = entropy; - } - public boolean getVectropy() - { - return vectropy; - } - public void setVectropy(boolean vectropy) - { - this.vectropy = vectropy; - } - public int getPortNumber() - { - return portNumber; - } - public void setPortNumber(int portNumber) - { - this.portNumber = portNumber; - } - public String getMessageType() - { - return messageType; - } - public void setMessageType(String messageType) - { - this.messageType = messageType; - } - public String getError() - { - return error; - } - public void setError(String error) - { - this.error = error; - } -} diff --git a/core/src/main/java/object/Player.java b/client/src/main/java/object/Player.java similarity index 94% rename from core/src/main/java/object/Player.java rename to client/src/main/java/object/Player.java index 39856b69..773e69de 100644 --- a/core/src/main/java/object/Player.java +++ b/client/src/main/java/object/Player.java @@ -1,5 +1,8 @@ package object; +import strategy.ApiStrategy; +import strategy.IStrategy; + import java.util.ArrayList; import java.util.List; import java.util.prefs.Preferences; @@ -13,7 +16,7 @@ public class Player private int numberOfCards = -1; private int cardsToSubtract = 0; private boolean enabled = false; - private String strategy = null; + private IStrategy strategy = null; private List hand = null; private ArrayList revealedCards = new ArrayList<>(); @@ -136,7 +139,7 @@ public void setRevealedCards(ArrayList revealedCards) public boolean isApiStrategy() { - return strategy.startsWith("API"); + return strategy instanceof ApiStrategy; } public String getName() @@ -171,11 +174,11 @@ public void setEnabled(boolean enabled) { this.enabled = enabled; } - public String getStrategy() + public IStrategy getStrategy() { return strategy; } - public void setStrategy(String strategy) + public void setStrategy(IStrategy strategy) { this.strategy = strategy; } diff --git a/client/src/main/java/screen/ApiAmendDialog.java b/client/src/main/java/screen/ApiAmendDialog.java deleted file mode 100644 index ffee025f..00000000 --- a/client/src/main/java/screen/ApiAmendDialog.java +++ /dev/null @@ -1,227 +0,0 @@ -package screen; - -import java.awt.BorderLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.ButtonGroup; -import javax.swing.JButton; -import javax.swing.JDialog; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.JTextField; - -import object.ApiStrategy; -import util.ApiUtil; -import util.DialogUtil; - -public class ApiAmendDialog extends JDialog - implements ActionListener -{ - private static final int DEFAULT_PORT_NUMBER = 1153; - - private ApiStrategy strategy = null; - - - public ApiAmendDialog() - { - setTitle("API Setup"); - setSize(350, 300); - setLocationRelativeTo(null); - setResizable(false); - setModal(true); - - getContentPane().add(okCancelPanel, BorderLayout.SOUTH); - okCancelPanel.add(btnOk); - okCancelPanel.add(btnCancel); - getContentPane().add(panel, BorderLayout.CENTER); - panel.setLayout(null); - lblName.setBounds(10, 10, 100, 25); - panel.add(lblName); - lblGameMode.setBounds(10, 45, 100, 25); - panel.add(lblGameMode); - rdbtnEntropy.setBounds(110, 45, 80, 25); - panel.add(rdbtnEntropy); - rdbtnVectropy.setBounds(190, 45, 80, 25); - panel.add(rdbtnVectropy); - rdbtnBoth.setBounds(270, 45, 80, 25); - panel.add(rdbtnBoth); - btnGroupMode.add(rdbtnEntropy); - btnGroupMode.add(rdbtnVectropy); - btnGroupMode.add(rdbtnBoth); - textFieldName.setBounds(110, 10, 120, 25); - panel.add(textFieldName); - textFieldName.setColumns(10); - lblPort.setBounds(10, 80, 100, 25); - panel.add(lblPort); - textFieldPort.setBounds(110, 80, 80, 25); - panel.add(textFieldPort); - textFieldPort.setColumns(10); - lblMessageType.setBounds(10, 115, 100, 25); - panel.add(lblMessageType); - rdbtnXml.setBounds(110, 116, 80, 23); - panel.add(rdbtnXml); - rdbtnJson.setBounds(190, 116, 109, 23); - panel.add(rdbtnJson); - btnGroupMessageType.add(rdbtnXml); - btnGroupMessageType.add(rdbtnJson); - btnTest.setBounds(120, 172, 89, 23); - panel.add(btnTest); - - btnOk.addActionListener(this); - btnCancel.addActionListener(this); - btnTest.addActionListener(this); - } - - private final JPanel okCancelPanel = new JPanel(); - private final JButton btnOk = new JButton("Ok"); - private final JButton btnCancel = new JButton("Cancel"); - private final JPanel panel = new JPanel(); - private final JLabel lblName = new JLabel("Name"); - private final JTextField textFieldName = new JTextField(); - private final JLabel lblGameMode = new JLabel("Game Mode"); - private final JRadioButton rdbtnEntropy = new JRadioButton("Entropy"); - private final JRadioButton rdbtnVectropy = new JRadioButton("Vectropy"); - private final JRadioButton rdbtnBoth = new JRadioButton("Both"); - private final ButtonGroup btnGroupMode = new ButtonGroup(); - private final JLabel lblPort = new JLabel("Port"); - private final JTextField textFieldPort = new JTextField(); - private final JLabel lblMessageType = new JLabel("Messaging"); - private final JRadioButton rdbtnXml = new JRadioButton(ApiUtil.MESSAGE_TYPE_XML); - private final JRadioButton rdbtnJson = new JRadioButton(ApiUtil.MESSAGE_TYPE_JSON); - private final ButtonGroup btnGroupMessageType = new ButtonGroup(); - private final JButton btnTest = new JButton("Test"); - - public void init(ApiStrategy strategy) - { - this.strategy = strategy; - - if (strategy == null) - { - //Clear fields - textFieldName.setText(""); - textFieldPort.setText("" + DEFAULT_PORT_NUMBER); - rdbtnEntropy.setSelected(true); - rdbtnXml.setSelected(true); - } - else - { - //Populate fields - textFieldName.setText(strategy.getName()); - textFieldPort.setText("" + strategy.getPortNumber()); - - boolean entropy = strategy.getEntropy(); - boolean vectropy = strategy.getVectropy(); - - rdbtnEntropy.setSelected(entropy); - rdbtnVectropy.setSelected(vectropy); - rdbtnBoth.setSelected(entropy && vectropy); - - String messageType = strategy.getMessageType(); - rdbtnXml.setSelected(messageType.equals(ApiUtil.MESSAGE_TYPE_XML)); - rdbtnJson.setSelected(messageType.equals(ApiUtil.MESSAGE_TYPE_JSON)); - } - - //rdbtnJson.setEnabled(false); - } - - @Override - public void actionPerformed(ActionEvent arg0) - { - JButton source = (JButton)arg0.getSource(); - if (source == btnOk) - { - if (valid()) - { - saveData(); - } - } - else if (source == btnCancel) - { - dispose(); - } - else if (source == btnTest) - { - sendTestMessage(); - } - } - - private boolean valid() - { - String name = textFieldName.getText(); - if (name.isEmpty()) - { - DialogUtil.showError("You must enter a name for this setup."); - return false; - } - - return true; - } - - private void saveData() - { - if (strategy == null) - { - strategy = new ApiStrategy(); - } - - String name = textFieldName.getText(); - strategy.setName(name); - - String portStr = textFieldPort.getText(); - int port = Integer.parseInt(portStr); - strategy.setPortNumber(port); - - boolean entropy = rdbtnEntropy.isSelected() || rdbtnBoth.isSelected(); - boolean vectropy = rdbtnVectropy.isSelected() || rdbtnBoth.isSelected(); - - strategy.setEntropy(entropy); - strategy.setVectropy(vectropy); - - if (rdbtnXml.isSelected()) - { - strategy.setMessageType(ApiUtil.MESSAGE_TYPE_XML); - } - else - { - strategy.setMessageType(ApiUtil.MESSAGE_TYPE_JSON); - } - - dispose(); - } - - private void sendTestMessage() - { - String infoMsg = "About to send a test message on port " + textFieldPort.getText() - + "\n\nEnsure that the third-party software is running and listening on this port."; - - DialogUtil.showInfo(infoMsg); - - String portStr = textFieldPort.getText(); - int port = Integer.parseInt(portStr); - - ApiUtil.sendTestMessage(port, rdbtnXml.isSelected()); - } - - public ApiStrategy getApiStrategy() - { - return strategy; - } - - public static ApiStrategy createStrategy() - { - ApiAmendDialog dialog = new ApiAmendDialog(); - dialog.init(null); - dialog.setVisible(true); - - return dialog.getApiStrategy(); - } - - public static void amendStrategy(ApiStrategy strategy) - { - ApiAmendDialog dialog = new ApiAmendDialog(); - dialog.init(strategy); - dialog.setVisible(true); - } -} diff --git a/client/src/main/java/screen/GameScreen.java b/client/src/main/java/screen/GameScreen.java index a4d724da..b69f5631 100644 --- a/client/src/main/java/screen/GameScreen.java +++ b/client/src/main/java/screen/GameScreen.java @@ -5,6 +5,8 @@ import game.*; import object.Player; import preference.PreferenceSetting; +import strategy.InBuiltStrategy; +import strategy.StrategyParams; import util.*; import javax.swing.*; @@ -19,8 +21,8 @@ import static game.RegistryUtilKt.writeActions; import static preference.PreferenceSettingKt.getPreference; import static screen.ScreenCacheKt.IN_GAME_REPLAY; +import static strategy.StrategyUtilKt.getStrategy; import static util.ClientGlobals.achievementStore; -import static util.ClientGlobals.preferenceStore; import static utils.CoreGlobals.logger; public abstract class GameScreen> extends TransparentPanel @@ -313,9 +315,9 @@ private void getNewGameVariablesFromRegistry() handicapAmount = getPreference(PreferenceSetting.HandicapAmount); opponentTwo.setEnabled(getPreference(PreferenceSetting.OpponentTwoEnabled)); opponentThree.setEnabled(getPreference(PreferenceSetting.OpponentThreeEnabled)); - opponentOne.setStrategy(getPreference(PreferenceSetting.OpponentOneStrategy)); - opponentTwo.setStrategy(getPreference(PreferenceSetting.OpponentTwoStrategy)); - opponentThree.setStrategy(getPreference(PreferenceSetting.OpponentThreeStrategy)); + opponentOne.setStrategy(getStrategy(PreferenceSetting.OpponentOneStrategy)); + opponentTwo.setStrategy(getStrategy(PreferenceSetting.OpponentTwoStrategy)); + opponentThree.setStrategy(getStrategy(PreferenceSetting.OpponentThreeStrategy)); settings = new GameSettings( getGameMode(), @@ -459,9 +461,6 @@ protected void roundEnded(int playerLastToAct) protected void saveRoundForReplay() { inGameReplay.putInt(REPLAY_INT_GAME_MODE, ReplayConstantsKt.toReplayConstant(getGameMode())); - inGameReplay.put(REPLAY_STRING_OPPONENT_ONE_STRATEGY, opponentOne.getStrategy()); - inGameReplay.put(REPLAY_STRING_OPPONENT_TWO_STRATEGY, opponentTwo.getStrategy()); - inGameReplay.put(REPLAY_STRING_OPPONENT_THREE_STRATEGY, opponentThree.getStrategy()); int roundsSoFar = inGameReplay.getInt(REPLAY_INT_ROUNDS_SO_FAR, 0) + 1; inGameReplay.putInt(REPLAY_INT_ROUNDS_SO_FAR, roundsSoFar); @@ -552,11 +551,6 @@ protected void saveGame() //save the current player savedGame.putInt(SAVED_GAME_INT_CURRENT_PLAYER, currentPlayer.getPlayerNumber()); - //save strategies - savedGame.put(SAVED_GAME_STRING_OPPONENT_ONE_STRATEGY, opponentOne.getStrategy()); - savedGame.put(SAVED_GAME_STRING_OPPONENT_TWO_STRATEGY, opponentTwo.getStrategy()); - savedGame.put(SAVED_GAME_STRING_OPPONENT_THREE_STRATEGY, opponentThree.getStrategy()); - //exitedOnChallenge stuff boolean exitedOnChallenge = currentlyOnChallenge; @@ -627,9 +621,9 @@ public void continueGame(BidListCellRenderer bidRenderer) displayHands(); //set the strategies - opponentOne.setStrategy(savedGame.get(SAVED_GAME_STRING_OPPONENT_ONE_STRATEGY, "Basic")); - opponentTwo.setStrategy(savedGame.get(SAVED_GAME_STRING_OPPONENT_TWO_STRATEGY, "Basic")); - opponentThree.setStrategy(savedGame.get(SAVED_GAME_STRING_OPPONENT_THREE_STRATEGY, "Basic")); + opponentOne.setStrategy(getStrategy(PreferenceSetting.OpponentOneStrategy)); + opponentTwo.setStrategy(getStrategy(PreferenceSetting.OpponentTwoStrategy)); + opponentThree.setStrategy(getStrategy(PreferenceSetting.OpponentThreeStrategy)); personToStart = savedGame.getInt(SAVED_GAME_INT_PERSON_TO_START, 0); handPanel.assignAsteriskToStartingPlayer(personToStart); @@ -1125,7 +1119,7 @@ public void run() String info = opponent.getName() + " has had their strategy reset to " + CpuStrategies.STRATEGY_BASIC; DialogUtil.showInfo(info); - opponent.setStrategy(CpuStrategies.STRATEGY_BASIC); + opponent.setStrategy(new InBuiltStrategy(CpuStrategies.STRATEGY_BASIC)); action = CpuStrategies.processOpponentTurn(parms, opponent); } diff --git a/client/src/main/java/screen/MainScreen.java b/client/src/main/java/screen/MainScreen.java index e1f2696d..baf5af35 100644 --- a/client/src/main/java/screen/MainScreen.java +++ b/client/src/main/java/screen/MainScreen.java @@ -39,6 +39,7 @@ import static screen.ScreenCacheKt.IN_GAME_REPLAY; import static screen.online.PlayOnlineDialogKt.showPlayOnlineDialog; import static util.ClientGlobals.achievementStore; +import static util.ClientGlobals.preferenceStore; import static utils.CoreGlobals.logger; import static utils.ThreadUtilKt.dumpThreadStacks; @@ -675,9 +676,9 @@ public String processCommand(String command) } else if (command.startsWith("server ")) { var serverCommand = command.replace("server ", ""); ClientGlobals.INSTANCE.getDevApi().doServerCommand(serverCommand); - } else if (command.equals("keygen")) { - var key = KeyGeneratorUtil.generateSymmetricKey(); - textToShow = EncryptionUtil.convertSecretKeyToString(key); + } else if (command.equals("clearprefs")) { + preferenceStore.clear(); + logger.info("preferenceStore.cleared", "Cleared all preferences"); } else if (command.equals("simulator")) { diff --git a/client/src/main/java/screen/SimulationDialog.java b/client/src/main/java/screen/SimulationDialog.java index 37e41252..77b64c13 100644 --- a/client/src/main/java/screen/SimulationDialog.java +++ b/client/src/main/java/screen/SimulationDialog.java @@ -1,8 +1,10 @@ package screen; +import bean.ComboBoxItem; import bean.NumberField; import game.GameMode; import game.GameSettings; +import strategy.IStrategy; import util.*; import javax.swing.*; @@ -12,6 +14,8 @@ import java.util.HashMap; import java.util.Vector; +import static strategy.StrategyUtilKt.getSelectedStrategy; +import static strategy.StrategyUtilKt.getStrategiesComboBoxModel; import static utils.CoreGlobals.logger; public class SimulationDialog extends JDialog @@ -175,10 +179,10 @@ public SimulationDialog() private final JPanel cpuPanel = new JPanel(); private final JCheckBox cbOpponentTwo = new JCheckBox(); private final JCheckBox cbOpponentThree = new JCheckBox(); - private final JComboBox opponentOneStrat = new JComboBox<>(); - private final JComboBox opponentTwoStrat = new JComboBox<>(); - private final JComboBox opponentThreeStrat = new JComboBox<>(); - private final JComboBox opponentZeroStrat = new JComboBox<>(); + private final JComboBox> opponentOneStrat = new JComboBox<>(); + private final JComboBox> opponentTwoStrat = new JComboBox<>(); + private final JComboBox> opponentThreeStrat = new JComboBox<>(); + private final JComboBox> opponentZeroStrat = new JComboBox<>(); private final JLabel lblTimeTaken = new JLabel("