diff --git a/src/mytharena/Arena.java b/src/mytharena/Arena.java index 422cdf8..f0bf7f5 100644 --- a/src/mytharena/Arena.java +++ b/src/mytharena/Arena.java @@ -2,6 +2,7 @@ import mytharena.command.*; import mytharena.data.Data; +import mytharena.data.character.Marketable; import mytharena.data.character.ability.Discipline; import mytharena.data.character.ability.Gift; import mytharena.data.character.ability.Talent; @@ -12,15 +13,18 @@ import mytharena.data.character.factory.minion.Minion; import mytharena.data.character.factory.minion.demon.Demon; import mytharena.data.character.inventory.equipment.Armor; +import mytharena.data.character.inventory.equipment.Equipment; import mytharena.data.character.inventory.equipment.Weapon; import mytharena.data.character.modifier.Modifier; import mytharena.data.combat.Combat; import mytharena.data.combat.Round; +import mytharena.data.market.Offer; import mytharena.data.notification.CombatResultsNotification; import mytharena.data.user.Admin; import mytharena.data.user.Player; import mytharena.data.user.User; import mytharena.gui.MythArenaGui; +import org.json.simple.JSONArray; import java.io.*; import java.text.SimpleDateFormat; @@ -38,7 +42,7 @@ public class Arena { /** * MythArenaGui mythArenaGui */ - private final MythArenaGui mythArenaGui = new MythArenaGui(); + private MythArenaGui mythArenaGui; /** * Data data */ @@ -58,8 +62,9 @@ public class Arena { /** * Starts all, and have main loop of the application + * @param gui boolean gui */ - public void start() { + public void start(boolean gui) { try { // retrieves data if serializable file exists File file = new File(this.serializablePath); @@ -83,15 +88,20 @@ public void start() { this.data.getWeaponPool().add(new Weapon("Rapier", 3, 0, false, "Normal")); this.serializeData(); } - // create commands and insert them into commandMap with respective key - this.commandMap.put("AdminMenu", new AdminMenu(this, this.data, this.mythArenaGui)); - this.commandMap.put("StartMenu", new StartMenu(this, this.data, this.mythArenaGui)); - this.commandMap.put("PlayerMenu", new PlayerMenu(this, this.data, this.mythArenaGui)); // update player bans this.updateBans(); - // main loop - while (true) { - this.commandMap.get("StartMenu").execute(); + // gui = true => normal use / gui = false => test use + if (gui) { + // init gui + this.mythArenaGui = new MythArenaGui(); + // create commands and insert them into commandMap with respective key + this.commandMap.put("AdminMenu", new AdminMenu(this, this.data, this.mythArenaGui)); + this.commandMap.put("StartMenu", new StartMenu(this, this.data, this.mythArenaGui)); + this.commandMap.put("PlayerMenu", new PlayerMenu(this, this.data, this.mythArenaGui)); + // main loop + while (true) { + this.commandMap.get("StartMenu").execute(); + } } } catch (Exception e) { e.printStackTrace(); @@ -149,6 +159,175 @@ public void deleteActiveUserMenu() { } } + /** + * Create market offer + * @param player Player player + * @param totalPrice int totalPrice + * @param armorPack ArrayList Marketable armorPack + * @param weaponPack ArrayList Marketable weaponPack + * @param minionPack ArrayList Marketable minionPack + * @param armorList ArrayList Equipment armorList + * @param weaponList ArrayList Equipment weaponList + * @param minionList ArrayList Minion minionList + * @return Offer offer + */ + public Offer createMarketOffer(Player player, int totalPrice, ArrayList armorPack, ArrayList weaponPack, ArrayList minionPack, ArrayList armorList, ArrayList weaponList, ArrayList minionList) { + // create offer + ArrayList> itemList = new ArrayList<>(); + // use stuff lists because all of them are updated without items inside offer + if (!armorPack.isEmpty()) { + itemList.add(armorPack); + player.getCharacter().getInventory().setArmorArrayList(armorList); + } + if (!weaponPack.isEmpty()) { + itemList.add(weaponPack); + player.getCharacter().getInventory().setWeaponArrayList(weaponList); + } + if (!minionPack.isEmpty()) { + itemList.add(minionPack); + player.getCharacter().setMinionArrayList(minionList); + } + return new Offer(player, totalPrice, itemList); + } + + /** + * Transfer market offer items to buyer when buy or back to seller if offer was denied + * @param offer Offer offer + * @param player Player player => buyer or seller + */ + public void transferMarketOfferItems(Offer offer, Player player) { + for (ArrayList pack : offer.getItemList()) { + if (pack.get(0) instanceof Weapon) { + player.getCharacter().getInventory().getWeaponArrayList().addAll((ArrayList) pack); + } else if (pack.get(0) instanceof Armor) { + player.getCharacter().getInventory().getArmorArrayList().addAll((ArrayList) pack); + } else { + player.getCharacter().getMinionArrayList().addAll((ArrayList) pack); + } + } + // player = buyer + if (player != offer.getSeller()) { + offer.setBuyer(player); + this.data.getPurchasedOffers().add(offer); + player.getCharacter().setGold(player.getCharacter().getGold() - offer.getPrice()); + offer.getSeller().getCharacter().setGold(offer.getSeller().getCharacter().getGold() + offer.getPrice()); + this.data.getMarketOffers().remove(offer); + // player = seller + } else { + this.data.getPendingMarketOffers().remove(offer); + } + } + + /** + * Checks compatibility between offer and player subscriptions + * @param offer Offer offer + * @param player Player player + * @return boolean compatible + */ + public boolean checkCompatibility(Offer offer, Player player) { + boolean compatible = false; + for (ArrayList itemList : offer.getItemList()){ + // Check character type + Map characterSub = (Map) player.getMarketSubscriptions().get("Character"); + compatible = (boolean) characterSub.get(offer.getSeller().getCharacter().getClass().getSimpleName()); + if (compatible) break; + + // Check item type + Map typeSub = (Map) player.getMarketSubscriptions().get("Type"); + if (typeSub.get(itemList.get(0).getClass().getSimpleName()) != null) { + compatible = (boolean) typeSub.get(itemList.get(0).getClass().getSimpleName()); + if (compatible) break; + }else { + compatible = (boolean) typeSub.get("Minion"); + if (compatible) break; + } + + // Check if within price range + JSONArray priceRangeSub = (JSONArray) player.getMarketSubscriptions().get("Price"); + Long minLong = (Long) priceRangeSub.get(0); + Long maxLong = (Long) priceRangeSub.get(1); + compatible = offer.getPrice() >= minLong.intValue() && offer.getPrice() <= maxLong.intValue(); + if (compatible) break; + + //Checks depending on item type + if (itemList.get(0) instanceof Weapon) { + //Check weapon values + Map value = (Map) player.getMarketSubscriptions().get("Value"); + Map weaponSub = (Map) value.get("Weapon"); + for (Marketable item : itemList) { + Weapon weapon = (Weapon) item; + Long attackLong = (Long) weaponSub.get("AttackModification"); + if (attackLong != null) { + int attackModification = attackLong.intValue(); + compatible = weapon.getAttackModification() == attackModification; + if (compatible) break; + } + + Long defenseLong = (Long) weaponSub.get("DefenseModification"); + if (defenseLong != null) { + int defenseModification = defenseLong.intValue(); + compatible = weapon.getDefenseModification() == defenseModification; + if (compatible) break; + } + + //Check weapon rarity + Map raritySub = (Map) player.getMarketSubscriptions().get("Rarity"); + compatible = (boolean) raritySub.get(weapon.getRarity()); + if (compatible) break; + } + } else if (itemList.get(0) instanceof Armor) { + // Check armor values + Map value = (Map) player.getMarketSubscriptions().get("Value"); + Map armorSub = (Map) value.get("Armor"); + for (Marketable item : itemList) { + Armor armor = (Armor) item; + Long attackLong = (Long) armorSub.get("AttackModification"); + if (attackLong != null) { + int attackModification = attackLong.intValue(); + compatible = armor.getAttackModification() == attackModification; + if (compatible) break; + } + Long defenseLong = (Long) armorSub.get("DefenseModification"); + if (defenseLong != null) { + int defenseModification = defenseLong.intValue(); + compatible = armor.getDefenseModification() == defenseModification; + if (compatible) break; + } + Map raritySub = (Map) player.getMarketSubscriptions().get("Rarity"); + compatible = (boolean) raritySub.get(armor.getRarity()); + if (compatible) break; + } + } else { + //Check minion types + Map minionType = (Map) player.getMarketSubscriptions().get("Minion"); + ArrayList total = new ArrayList<>(); + ArrayList minionArrayList = itemList; + displayMinionPack((ArrayList) minionArrayList,total); + for (Minion minion : total) { + compatible = (boolean) minionType.get(minion.getClass().getSimpleName()); + if (compatible) break; + } + } + } + return compatible; + } + + /** + * Displays minion pack recursive + * @param minionPack ArrayList Minion minionPack + * @param total ArrayList Minion total + */ + public void displayMinionPack(ArrayList minionPack, ArrayList total) { + for (Minion minion : minionPack) { + if (minion instanceof Demon demon) { + displayMinionPack(demon.getMinionArrayList(), total); + total.add(demon); + } else { + total.add(minion); + } + } + } + /** * Serialize multiple elements * @param notValid StringBuilder notValid @@ -187,6 +366,14 @@ public void setActiveUser(User activeUser) { this.activeUser = activeUser; } + /** + * Gets Data data + * @return Data data + */ + public Data getData() { + return this.data; + } + /** * Gets specific Command command in commandMap with String key * @param key String key diff --git a/src/mytharena/MythArena.java b/src/mytharena/MythArena.java index 14c6e15..bf1f7cb 100644 --- a/src/mytharena/MythArena.java +++ b/src/mytharena/MythArena.java @@ -11,7 +11,7 @@ public class MythArena { */ public static void main(String[] args) { Arena arena = new Arena(); - arena.start(); + arena.start(true); } } diff --git a/src/mytharena/command/AdminMenu.java b/src/mytharena/command/AdminMenu.java index 8abae19..0195e58 100644 --- a/src/mytharena/command/AdminMenu.java +++ b/src/mytharena/command/AdminMenu.java @@ -8,6 +8,7 @@ import mytharena.data.character.factory.character.vampire.Vampire; import mytharena.data.character.factory.character.werewolf.Werewolf; import mytharena.data.combat.PendingCombat; +import mytharena.data.market.Offer; import mytharena.data.notification.GeneralNotification; import mytharena.data.notification.PendingCombatNotification; import mytharena.data.user.Admin; @@ -45,8 +46,8 @@ public void execute() { super.getMythArenaGui().setOption(0, "Manage admins"); super.getMythArenaGui().setOption(1, "Manage players"); super.getMythArenaGui().setOption(2, "Validate combats"); - super.getMythArenaGui().setOption(3, "Manage characters"); - super.getMythArenaGui().setOption(4, null); + super.getMythArenaGui().setOption(3, "Validate market offers"); + super.getMythArenaGui().setOption(4, "Manage characters"); super.getMythArenaGui().setOption(5, null); super.getMythArenaGui().setOption(6, null); super.getMythArenaGui().setOption(7, null); @@ -59,8 +60,10 @@ public void execute() { case 'B' -> this.managePlayers(); // validate combats case 'C' -> this.validateCombats(); + // validate market offers + case 'D' -> this.validateMarketOffers(); // manage characters - case 'D' -> this.manageCharacters(); + case 'E' -> this.manageCharacters(); // log out case 'I' -> super.getArena().setActiveUser(null); // delete account @@ -294,15 +297,18 @@ private void validateCombats() { if (selected != -1) { PendingCombat pendingCombat = super.getData().getPendingCombatArrayList().get(selected); try { + super.getData().getPendingCombatArrayList().remove(pendingCombat); + super.getArena().serializeData(); // accepted combat notification for challenged pendingCombat.getChallenged().getNotificationArrayList().add(new PendingCombatNotification( - pendingCombat.getChallenger().getNickname() +" wants to challenge you to a battle", + pendingCombat.getChallenger().getNickname() + " wants to challenge you to a battle", "Gold at stake for this battle: " + pendingCombat.getBet(), pendingCombat.getChallenger(), pendingCombat.getBet() )); - super.getData().getPendingCombatArrayList().remove(pendingCombat); - super.getArena().serializeData(); - super.getMythArenaGui().setDescription("Approved selected combat: " + pendingCombat.getChallenger().getNickname() + " -> " + pendingCombat.getChallenged().getNickname()); + super.getMythArenaGui().setDescription( + "Approved selected combat: " + pendingCombat.getChallenger().getNickname() + + " -> " + pendingCombat.getChallenged().getNickname() + ); } catch (IOException e) { e.printStackTrace(); } @@ -323,6 +329,8 @@ private void validateCombats() { calendar.add(Calendar.DAY_OF_MONTH, 1); Date unBanDate = calendar.getTime(); super.getData().getBannedPlayerMap().put(pendingCombat.getChallenger(), unBanDate); + super.getData().getPendingCombatArrayList().remove(pendingCombat); + super.getArena().serializeData(); // 24h ban notification for challenger pendingCombat.getChallenger().getNotificationArrayList().add(new GeneralNotification( "Your pending combat has been denied", @@ -330,9 +338,10 @@ private void validateCombats() { pendingCombat.getChallenged().getCharacter().getGold() + " gold || " + "As a result you have been banned for 24h, until " + unBanDate )); - super.getData().getPendingCombatArrayList().remove(pendingCombat); - super.getArena().serializeData(); - super.getMythArenaGui().setDescription("Denied selected combat: " + pendingCombat.getChallenger().getNickname() + " -> " + pendingCombat.getChallenged().getNickname()); + super.getMythArenaGui().setDescription( + "Denied selected combat: " + pendingCombat.getChallenger().getNickname() + + " -> " + pendingCombat.getChallenged().getNickname() + ); } catch (IOException e) { e.printStackTrace(); } @@ -347,6 +356,92 @@ private void validateCombats() { } } + /** + * Validate Market Offers + */ + private void validateMarketOffers() { + boolean exit = false; + while (!exit) { + super.getMythArenaGui().setListMode(); + super.getMythArenaGui().setTitle("Market Offer Validator Tool"); + super.getMythArenaGui().setDescription("Select what you want to change"); + super.getMythArenaGui().setOption(0, "Approve selected offer"); + super.getMythArenaGui().setOption(1, "Deny selected offer"); + super.getMythArenaGui().setOption(2, "Back to Admin Menu"); + super.getMythArenaGui().setOption(3, null); + ArrayList pendingMarketOfferInfoArrayList = new ArrayList<>(); + for (Offer pendingMarketOffer : super.getData().getPendingMarketOffers()) { + pendingMarketOfferInfoArrayList.add( + pendingMarketOffer.getSeller().getNickname() + " : " + + pendingMarketOffer.getPrice() + " gold" + ); + } + super.getMythArenaGui().setList(pendingMarketOfferInfoArrayList); + switch (super.getMythArenaGui().waitEvent(30)) { + // approve selected offer + case 'A' -> { + int selected = super.getMythArenaGui().getLastSelectedListIndex(); + if (selected != -1) { + Offer pendingMarketOffer = super.getData().getPendingMarketOffers().get(selected); + try { + Player seller = pendingMarketOffer.getSeller(); + super.getData().getMarketOffers().add(pendingMarketOffer); + super.getData().getPendingMarketOffers().remove(pendingMarketOffer); + super.getArena().serializeData(); + // notification for seller + pendingMarketOffer.getSeller().getNotificationArrayList().add(new GeneralNotification( + "Your market offer has been approved", + seller.getNickname() + " : " + + pendingMarketOffer.getPrice() + " gold offer" + )); + super.getMythArenaGui().setDescription( + "Approved selected market offer: " + + seller.getNickname() + " : " + + pendingMarketOffer.getPrice() + " gold" + ); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + super.getMythArenaGui().setDescription("Please select one element of the list before continue"); + } + super.getMythArenaGui().waitEvent(1); + } + // deny selected offer + case 'B' -> { + int selected = super.getMythArenaGui().getLastSelectedListIndex(); + if (selected != -1) { + Offer pendingMarketOffer = super.getData().getPendingMarketOffers().get(selected); + try { + Player seller = pendingMarketOffer.getSeller(); + // serialize data stuff inside + super.getArena().transferMarketOfferItems(pendingMarketOffer, seller); + super.getArena().serializeData(); + // notification for seller + pendingMarketOffer.getSeller().getNotificationArrayList().add(new GeneralNotification( + "Your market offer has been denied", + seller.getNickname() + " : " + + pendingMarketOffer.getPrice() + " gold offer" + )); + super.getMythArenaGui().setDescription( + "Denied selected market offer: " + + seller.getNickname() + " : " + + pendingMarketOffer.getPrice() + " gold" + ); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + super.getMythArenaGui().setDescription("Please select one element of the list before continue"); + } + super.getMythArenaGui().waitEvent(1); + } + // exit validate market offers + case 'C' -> exit = true; + } + } + } + /** * Manage Characters */ diff --git a/src/mytharena/command/PlayerMenu.java b/src/mytharena/command/PlayerMenu.java index 7714c5a..9a4300e 100644 --- a/src/mytharena/command/PlayerMenu.java +++ b/src/mytharena/command/PlayerMenu.java @@ -173,7 +173,7 @@ private void sellMarket() { // minions if (!minionList.isEmpty()) { ArrayList total = new ArrayList<>(); - displayMinionPack(minionList,total); + getArena().displayMinionPack(minionList,total); displayList.add("Minions: " + total.size()); } // list itself @@ -220,26 +220,12 @@ private void sellMarket() { switch (super.getMythArenaGui().waitEvent(30)) { case 'A' -> { try { - // create offer - ArrayList> itemList = new ArrayList<>(); - // use stuff lists because all of them are updated without items inside offer - if (!armorPack.isEmpty()) { - itemList.add(armorPack); - player.getCharacter().getInventory().setArmorArrayList(armorList); - } - if (!weaponPack.isEmpty()) { - itemList.add(weaponPack); - player.getCharacter().getInventory().setWeaponArrayList(weaponList); - } - if (!minionPack.isEmpty()) { - itemList.add(minionPack); - player.getCharacter().setMinionArrayList(minionList); - } - Offer offer = new Offer(player, totalPrice, itemList); - super.getData().getMarketOffers().add(offer); + Offer offer = super.getArena().createMarketOffer(player, totalPrice, armorPack, weaponPack, minionPack, armorList, weaponList, minionList); + super.getData().getPendingMarketOffers().add(offer); + // notify subscribers for (User user : getData().getUserArrayList()) { if (user instanceof Player buyer) { - if (checkCompatibility(offer, buyer)) { + if (getArena().checkCompatibility(offer, buyer)) { buyer.notifyPlayer(); } } @@ -351,7 +337,7 @@ private void buyMarket() { Minion minion = (Minion) item; if (minion instanceof Demon demon) { ArrayList total = new ArrayList<>(); - displayMinionPack(demon.getMinionArrayList(), total); + getArena().displayMinionPack(demon.getMinionArrayList(), total); total.add(demon); for (Minion minion1 : total) { offerList.add("Minion type: " + minion1.getClass().getSimpleName() + @@ -374,15 +360,15 @@ private void buyMarket() { exitOffer = true; } else { if (offer.getPrice() <= player.getCharacter().getGold()) { - transferItems(offer,player); - getMythArenaGui().setDescription("Purchased successfully"); - getMythArenaGui().waitEvent(2); try { + getArena().transferMarketOfferItems(offer, player); getArena().serializeData(); + getMythArenaGui().setDescription("Purchased successfully"); + getMythArenaGui().waitEvent(2); + exitOffer = true; } catch (IOException e) { e.printStackTrace(); } - exitOffer = true; } else { getMythArenaGui().setDescription("You don't have enough gold!"); getMythArenaGui().waitEvent(3); @@ -399,128 +385,6 @@ private void buyMarket() { } } - public void transferItems(Offer offer, Player buyer) { - for (ArrayList pack : offer.getItemList()) { - if (pack.get(0) instanceof Weapon) { - buyer.getCharacter().getInventory().getWeaponArrayList().addAll((ArrayList) pack); - } else if (pack.get(0) instanceof Armor) { - buyer.getCharacter().getInventory().getArmorArrayList().addAll((ArrayList) pack); - } else { - buyer.getCharacter().getMinionArrayList().addAll((ArrayList) pack); - } - } - getData().getMarketOffers().remove(offer); - offer.setBuyer(buyer); - getData().getPurchasedOffers().add(offer); - buyer.getCharacter().setGold(buyer.getCharacter().getGold()-offer.getPrice()); - offer.getSeller().getCharacter().setGold(offer.getSeller().getCharacter().getGold()+offer.getPrice()); - } - - public boolean checkCompatibility(Offer offer, Player player) { - boolean compatible = false; - for (ArrayList itemList : offer.getItemList()){ - // Check character type - Map characterSub = (Map) player.getMarketSubscriptions().get("Character"); - compatible = (boolean) characterSub.get(offer.getSeller().getCharacter().getClass().getSimpleName()); - if (compatible) break; - - // Check item type - Map typeSub = (Map) player.getMarketSubscriptions().get("Type"); - if (typeSub.get(itemList.get(0).getClass().getSimpleName()) != null) { - compatible = (boolean) typeSub.get(itemList.get(0).getClass().getSimpleName()); - if (compatible) break; - }else { - compatible = (boolean) typeSub.get("Minion"); - if (compatible) break; - } - - - // Check if within price range - JSONArray priceRangeSub = (JSONArray) player.getMarketSubscriptions().get("Price"); - Long minLong = (Long) priceRangeSub.get(0); - Long maxLong = (Long) priceRangeSub.get(1); - compatible = offer.getPrice() >= minLong.intValue() && offer.getPrice() <= maxLong.intValue(); - if (compatible) break; - - //Checks depending on item type - if (itemList.get(0) instanceof Weapon) { - //Check weapon values - Map value = (Map) player.getMarketSubscriptions().get("Value"); - Map weaponSub = (Map) value.get("Weapon"); - for (Marketable item : itemList) { - Weapon weapon = (Weapon) item; - Long attackLong = (Long) weaponSub.get("AttackModification"); - if (attackLong != null) { - int attackModification = attackLong.intValue(); - compatible = weapon.getAttackModification() == attackModification; - if (compatible) break; - } - - Long defenseLong = (Long) weaponSub.get("DefenseModification"); - if (defenseLong != null) { - int defenseModification = defenseLong.intValue(); - compatible = weapon.getDefenseModification() == defenseModification; - if (compatible) break; - } - - //Check weapon rarity - Map raritySub = (Map) player.getMarketSubscriptions().get("Rarity"); - compatible = (boolean) raritySub.get(weapon.getRarity()); - if (compatible) break; - } - } else if (itemList.get(0) instanceof Armor) { - // Check armor values - Map value = (Map) player.getMarketSubscriptions().get("Value"); - Map armorSub = (Map) value.get("Armor"); - for (Marketable item : itemList) { - Armor armor = (Armor) item; - Long attackLong = (Long) armorSub.get("AttackModification"); - if (attackLong != null) { - int attackModification = attackLong.intValue(); - compatible = armor.getAttackModification() == attackModification; - if (compatible) break; - } - Long defenseLong = (Long) armorSub.get("DefenseModification"); - if (defenseLong != null) { - int defenseModification = defenseLong.intValue(); - compatible = armor.getDefenseModification() == defenseModification; - if (compatible) break; - } - Map raritySub = (Map) player.getMarketSubscriptions().get("Rarity"); - compatible = (boolean) raritySub.get(armor.getRarity()); - if (compatible) break; - } - }else { - //Check minion types - Map minionType = (Map) player.getMarketSubscriptions().get("Minion"); - ArrayList total = new ArrayList<>(); - ArrayList minionArrayList = itemList; - displayMinionPack((ArrayList) minionArrayList,total); - for (Minion minion : total) { - compatible = (boolean) minionType.get(minion.getClass().getSimpleName()); - if (compatible) break; - } - } - } - return compatible; - } - - /** - * Displays minion pack recursive - * @param minionPack ArrayList Minion minionPack - * @param total ArrayList Minion total - */ - public void displayMinionPack(ArrayList minionPack, ArrayList total) { - for (Minion minion : minionPack) { - if (minion instanceof Demon demon) { - displayMinionPack(demon.getMinionArrayList(), total); - total.add(demon); - } else { - total.add(minion); - } - } - } - /** * Market notification */ diff --git a/src/mytharena/data/Data.java b/src/mytharena/data/Data.java index a4eb36f..e83111d 100644 --- a/src/mytharena/data/Data.java +++ b/src/mytharena/data/Data.java @@ -54,6 +54,10 @@ public class Data implements Serializable { * ArrayList Offer purchasedOffers */ private final ArrayList purchasedOffers = new ArrayList<>(); + /** + * ArrayList Offer pendingMarketOffers + */ + private final ArrayList pendingMarketOffers = new ArrayList<>(); /** * Gets ArrayList User userArrayList @@ -119,6 +123,14 @@ public ArrayList getPurchasedOffers() { return this.purchasedOffers; } + /** + * Gets ArrayList Offer pendingMarketOffers + * @return ArrayList Offer pendingMarketOffers + */ + public ArrayList getPendingMarketOffers() { + return this.pendingMarketOffers; + } + /** * Gets JSONObject defaultMarketSubscriptions * @return JSONObject defaultMarketSubscriptions diff --git a/src/test/AdminTest.java b/src/test/AdminTest.java new file mode 100644 index 0000000..63a7e63 --- /dev/null +++ b/src/test/AdminTest.java @@ -0,0 +1,52 @@ +package test; + +import mytharena.Arena; +import mytharena.data.Data; +import mytharena.data.character.Marketable; +import mytharena.data.character.factory.character.Character; +import mytharena.data.character.factory.character.werewolf.WerewolfFactory; +import mytharena.data.character.factory.minion.Minion; +import mytharena.data.character.inventory.equipment.Equipment; +import mytharena.data.market.Offer; +import mytharena.data.user.Player; +import org.junit.Test; + +import java.util.ArrayList; + +import static junit.framework.TestCase.*; + +public class AdminTest { + + @Test + public void testValidateOffer() { + Arena arena = new Arena(); + arena.start(false); + Data data = arena.getData(); + + Player player = new Player("alejandro", "alejandro", data, "alejandro"); + WerewolfFactory werewolfFactory = new WerewolfFactory(data); + Character werewolf = werewolfFactory.createCharacter(); + player.setCharacter(werewolf); + + ArrayList weapons = player.getCharacter().getInventory().getWeaponArrayList(); + ArrayList weaponPack = new ArrayList<>(weapons); + ArrayList weaponList = new ArrayList<>(); + + ArrayList armorPack = new ArrayList<>(); + ArrayList minionPack = new ArrayList<>(); + + ArrayList armorList = new ArrayList<>(); + ArrayList minionList = new ArrayList<>(); + + assertEquals(3, player.getCharacter().getInventory().getWeaponArrayList().size()); + Offer offer = arena.createMarketOffer(player, 20, + armorPack, weaponPack, minionPack, armorList, weaponList, minionList); + assertNull(offer.getBuyer()); + + arena.transferMarketOfferItems(offer, player); + + assertFalse(data.getPendingMarketOffers().contains(offer)); + assertEquals(player.getCharacter().getInventory().getWeaponArrayList().size(), 3); + } + +} diff --git a/src/test/ArenaTest.java b/src/test/ArenaTest.java index 32a11b0..23e2eb4 100644 --- a/src/test/ArenaTest.java +++ b/src/test/ArenaTest.java @@ -1,5 +1,98 @@ package test; +import mytharena.Arena; +import mytharena.data.Data; +import mytharena.data.character.Marketable; +import mytharena.data.character.factory.character.Character; +import mytharena.data.character.factory.character.vampire.VampireFactory; +import mytharena.data.character.factory.character.werewolf.WerewolfFactory; +import mytharena.data.character.factory.minion.Minion; +import mytharena.data.character.factory.minion.ghoul.Ghoul; +import mytharena.data.character.factory.minion.human.Human; +import mytharena.data.character.inventory.equipment.Armor; +import mytharena.data.character.inventory.equipment.Equipment; +import mytharena.data.character.inventory.equipment.Weapon; +import mytharena.data.market.Offer; +import mytharena.data.user.Player; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Map; + +import static junit.framework.TestCase.*; + public class ArenaTest { + @Test + public void testTransferItems() { + Arena arena = new Arena(); + arena.start(false); + Data data = arena.getData(); + + Player player1 = new Player("gledrian", "gledrian", data, "gledrian"); + VampireFactory vampireFactory = new VampireFactory(data); + Character vampire = vampireFactory.createCharacter(); + player1.setCharacter(vampire); + + Player player2 = new Player("alejandro", "alejandro", data, "alejandro"); + WerewolfFactory werewolfFactory = new WerewolfFactory(data); + Character werewolf = werewolfFactory.createCharacter(); + player2.setCharacter(werewolf); + + ArrayList weapons = new ArrayList<>(player1.getCharacter().getInventory().getWeaponArrayList()); + ArrayList marketables = new ArrayList<>(weapons); + ArrayList> itemList = new ArrayList<>(); + itemList.add(marketables); + + assertEquals(3, player2.getCharacter().getInventory().getWeaponArrayList().size()); + Offer offer = new Offer(player1,20,itemList); + assertNull(offer.getBuyer()); + + arena.transferMarketOfferItems(offer, player2); + + assertEquals(player2.getCharacter().getInventory().getWeaponArrayList().size(), 6); + assertNotNull(offer.getBuyer()); + } + + @Test + public void testCheckCompatability() { + Arena arena = new Arena(); + arena.start(false); + Data data = arena.getData(); + + Player player1 = new Player("gledrian","gledrian", data, "gledrian"); + VampireFactory vampireFactory = new VampireFactory(data); + Character vampire = vampireFactory.createCharacter(); + player1.setCharacter(vampire); + + Player player2 = new Player("alejandro", "alejandro", data, "alejandro"); + WerewolfFactory werewolfFactory = new WerewolfFactory(data); + Character werewolf = werewolfFactory.createCharacter(); + player2.setCharacter(werewolf); + + ArrayList weapons = new ArrayList<>(player1.getCharacter().getInventory().getWeaponArrayList()); + ArrayList marketables = new ArrayList<>(weapons); + ArrayList> itemList = new ArrayList<>(); + itemList.add(marketables); + + Offer offer = new Offer(player1,20,itemList); + assertFalse(arena.checkCompatibility(offer,player2)); + Map typeSub = (Map) player2.getMarketSubscriptions().get("Type"); + typeSub.put("Weapon", true); + assertTrue(arena.checkCompatibility(offer,player2)); + } + + @Test + public void testDisplayMinionPack() { + Arena arena = new Arena(); + + ArrayList minionArrayList = new ArrayList<>(); + ArrayList total = new ArrayList<>(); + minionArrayList.add(new Human()); + minionArrayList.add(new Ghoul()); + minionArrayList.add(new Ghoul()); + arena.displayMinionPack(minionArrayList,total); + assertEquals(3, total.size()); + } + } diff --git a/src/test/ExampleTest.java b/src/test/ExampleTest.java deleted file mode 100644 index a3cd113..0000000 --- a/src/test/ExampleTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package test; - -import mytharena.data.Data; -import mytharena.data.user.Admin; -import org.junit.Test; - -import static org.junit.Assert.assertSame; - -public class ExampleTest { - - @Test - public void defaultAdminCreation() { - Admin admin = new Admin("admin", "admin123", new Data()); - assertSame(admin, admin); - } - -} diff --git a/src/test/PlayerMenuTest.java b/src/test/PlayerMenuTest.java deleted file mode 100644 index 7b451f8..0000000 --- a/src/test/PlayerMenuTest.java +++ /dev/null @@ -1,153 +0,0 @@ -package test; - -import mytharena.Arena; -import mytharena.command.PlayerMenu; -import mytharena.data.Data; -import mytharena.data.character.Marketable; -import mytharena.data.character.ability.Discipline; -import mytharena.data.character.factory.character.Character; -import mytharena.data.character.factory.character.vampire.Vampire; -import mytharena.data.character.factory.character.vampire.VampireFactory; -import mytharena.data.character.factory.character.werewolf.WerewolfFactory; -import mytharena.data.character.factory.minion.Minion; -import mytharena.data.character.factory.minion.demon.Demon; -import mytharena.data.character.factory.minion.demon.DemonFactory; -import mytharena.data.character.factory.minion.ghoul.Ghoul; -import mytharena.data.character.factory.minion.human.Human; -import mytharena.data.character.inventory.equipment.Armor; -import mytharena.data.character.inventory.equipment.Equipment; -import mytharena.data.character.inventory.equipment.Weapon; -import mytharena.data.market.Offer; -import mytharena.data.user.Player; -import mytharena.gui.MythArenaGui; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.Map; - -import static junit.framework.TestCase.*; - -public class PlayerMenuTest { - - @Test - public void testCreateCharacter() { - VampireFactory vampireFactory = new VampireFactory(new Data()); - Character vampire = vampireFactory.createCharacter(); - assertTrue(vampire instanceof Vampire); - assertTrue(vampire.getAbility() instanceof Discipline); - assertEquals(vampire.getWeaknessArrayList().get(0).getName(), "Luz solar"); - assertEquals(((Vampire) vampire).getBloodPoints(), 0); - assertEquals(3, vampire.getInventory().getWeaponArrayList().size()); - assertEquals(3, vampire.getInventory().getArmorArrayList().size()); - assertNotNull(vampire.getEquippedWeaponArrayList()); - assertNotNull(vampire.getArmor()); - } - - @Test - public void testGetGold() { - WerewolfFactory werewolfFactory = new WerewolfFactory(new Data()); - Character werewolf = werewolfFactory.createCharacter(); - assertEquals(100, werewolf.getGold()); - } - - @Test - public void testCreateMinion() { - DemonFactory demonFactory = new DemonFactory(); - Demon demon = (Demon) demonFactory.createMinion(); - assertTrue(demon.getHealth() < 4); - assertTrue(demon.getMinionArrayList().size() < 4); - } - - @Test - public void testNotifyPlayer() { - Player player = new Player("gledrian","gledrian",new Data(),"gledrian"); - assertEquals(0,player.getNotificationArrayList().size()); - player.notifyPlayer(); - player.notifyPlayer(); - player.notifyPlayer(); - assertEquals(3, player.getNotificationArrayList().size()); - } - - @Test - public void testTransferItems() { - Arena arena = new Arena(); - Data data = new Data(); - MythArenaGui mythArenaGui = new MythArenaGui(); - - data.getArmorPool().add(new Armor("Platemail", 0, 2,"Normal")); - data.getWeaponPool().add(new Weapon("Rapier", 3, 0, false, "Normal")); - - PlayerMenu playerMenu = new PlayerMenu(arena, data, mythArenaGui); - Player player1 = new Player("gledrian","gledrian",data, "gledrian"); - VampireFactory vampireFactory = new VampireFactory(data); - Character vampire = vampireFactory.createCharacter(); - player1.setCharacter(vampire); - - Player player2 = new Player("alejandro", "alejandro",data, "alejandro"); - WerewolfFactory werewolfFactory = new WerewolfFactory(data); - Character werewolf = werewolfFactory.createCharacter(); - player2.setCharacter(werewolf); - - ArrayList weapons = new ArrayList<>(player1.getCharacter().getInventory().getWeaponArrayList()); - ArrayList marketables = new ArrayList<>(weapons); - ArrayList> itemList = new ArrayList<>(); - itemList.add(marketables); - - assertEquals(3, player2.getCharacter().getInventory().getWeaponArrayList().size()); - Offer offer = new Offer(player1,20,itemList); - assertNull(offer.getBuyer()); - - playerMenu.transferItems(offer, player2); - - assertEquals(player2.getCharacter().getInventory().getWeaponArrayList().size(),6); - assertNotNull(offer.getBuyer()); - } - - @Test - public void testDisplayMinionPack() { - Arena arena = new Arena(); - Data data = new Data(); - MythArenaGui mythArenaGui = new MythArenaGui(); - PlayerMenu playerMenu = new PlayerMenu(arena,data,mythArenaGui); - - ArrayList minionArrayList = new ArrayList<>(); - ArrayList total = new ArrayList<>(); - minionArrayList.add(new Human()); - minionArrayList.add(new Ghoul()); - minionArrayList.add(new Ghoul()); - playerMenu.displayMinionPack(minionArrayList,total); - assertEquals(3, total.size()); - } - - @Test - public void testCheckCompatability() { - Arena arena = new Arena(); - Data data = new Data(); - MythArenaGui mythArenaGui = new MythArenaGui(); - PlayerMenu playerMenu = new PlayerMenu(arena, data, mythArenaGui); - - data.getArmorPool().add(new Armor("Cuirass", 0, 3,"Legendary")); - data.getWeaponPool().add(new Weapon("Rapier", 3, 0, false, "Normal")); - - Player player1 = new Player("gledrian","gledrian",data, "gledrian"); - VampireFactory vampireFactory = new VampireFactory(data); - Character vampire = vampireFactory.createCharacter(); - player1.setCharacter(vampire); - - Player player2 = new Player("alejandro", "alejandro",data, "alejandro"); - WerewolfFactory werewolfFactory = new WerewolfFactory(data); - Character werewolf = werewolfFactory.createCharacter(); - player2.setCharacter(werewolf); - - ArrayList weapons = new ArrayList<>(player1.getCharacter().getInventory().getWeaponArrayList()); - ArrayList marketables = new ArrayList<>(weapons); - ArrayList> itemList = new ArrayList<>(); - itemList.add(marketables); - - Offer offer = new Offer(player1,20,itemList); - assertFalse(playerMenu.checkCompatibility(offer,player2)); - Map typeSub = (Map) player2.getMarketSubscriptions().get("Type"); - typeSub.put("Weapon", true); - assertTrue(playerMenu.checkCompatibility(offer,player2)); - } -} diff --git a/src/test/PlayerTest.java b/src/test/PlayerTest.java new file mode 100644 index 0000000..01a30e7 --- /dev/null +++ b/src/test/PlayerTest.java @@ -0,0 +1,62 @@ +package test; + +import mytharena.Arena; +import mytharena.data.Data; +import mytharena.data.character.ability.Discipline; +import mytharena.data.character.factory.character.Character; +import mytharena.data.character.factory.character.vampire.Vampire; +import mytharena.data.character.factory.character.vampire.VampireFactory; +import mytharena.data.character.factory.character.werewolf.WerewolfFactory; +import mytharena.data.character.factory.minion.demon.Demon; +import mytharena.data.character.factory.minion.demon.DemonFactory; +import mytharena.data.user.Player; +import org.junit.Test; + +import static junit.framework.TestCase.*; + +public class PlayerTest { + + @Test + public void testCreateCharacter() { + Arena arena = new Arena(); + arena.start(false); + Data data = arena.getData(); + + VampireFactory vampireFactory = new VampireFactory(data); + Character vampire = vampireFactory.createCharacter(); + assertTrue(vampire instanceof Vampire); + assertTrue(vampire.getAbility() instanceof Discipline); + assertEquals(vampire.getWeaknessArrayList().get(0).getName(), "Luz solar"); + assertEquals(((Vampire) vampire).getBloodPoints(), 0); + assertEquals(3, vampire.getInventory().getWeaponArrayList().size()); + assertEquals(3, vampire.getInventory().getArmorArrayList().size()); + assertNotNull(vampire.getEquippedWeaponArrayList()); + assertNotNull(vampire.getArmor()); + } + + @Test + public void testGetGold() { + WerewolfFactory werewolfFactory = new WerewolfFactory(new Data()); + Character werewolf = werewolfFactory.createCharacter(); + assertEquals(100, werewolf.getGold()); + } + + @Test + public void testCreateMinion() { + DemonFactory demonFactory = new DemonFactory(); + Demon demon = (Demon) demonFactory.createMinion(); + assertTrue(demon.getHealth() < 4); + assertTrue(demon.getMinionArrayList().size() < 4); + } + + @Test + public void testNotifyPlayer() { + Player player = new Player("gledrian", "gledrian", new Data(), "gledrian"); + assertEquals(0, player.getNotificationArrayList().size()); + player.notifyPlayer(); + player.notifyPlayer(); + player.notifyPlayer(); + assertEquals(3, player.getNotificationArrayList().size()); + } + +}