diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_code_gson_gson_2_8_0.xml b/.idea/libraries/Maven__com_google_code_gson_gson_2_8_5.xml similarity index 66% rename from .idea/libraries/Maven__com_google_code_gson_gson_2_8_0.xml rename to .idea/libraries/Maven__com_google_code_gson_gson_2_8_5.xml index 6e5d5b7..2888f96 100644 --- a/.idea/libraries/Maven__com_google_code_gson_gson_2_8_0.xml +++ b/.idea/libraries/Maven__com_google_code_gson_gson_2_8_5.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml b/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml new file mode 100644 index 0000000..f3f3738 --- /dev/null +++ b/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__nu_pattern_opencv_2_4_9_4.xml b/.idea/libraries/Maven__nu_pattern_opencv_2_4_9_4.xml new file mode 100644 index 0000000..6bcf6be --- /dev/null +++ b/.idea/libraries/Maven__nu_pattern_opencv_2_4_9_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_base_17_ea_11.xml b/.idea/libraries/Maven__org_openjfx_javafx_base_17_ea_11.xml new file mode 100644 index 0000000..0b1261a --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_base_17_ea_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_base_win_17_ea_11.xml b/.idea/libraries/Maven__org_openjfx_javafx_base_win_17_ea_11.xml new file mode 100644 index 0000000..350ad26 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_base_win_17_ea_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_controls_15_0_1.xml b/.idea/libraries/Maven__org_openjfx_javafx_controls_15_0_1.xml new file mode 100644 index 0000000..04240ff --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_controls_15_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_controls_win_15_0_1.xml b/.idea/libraries/Maven__org_openjfx_javafx_controls_win_15_0_1.xml new file mode 100644 index 0000000..befcda2 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_controls_win_15_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_fxml_16.xml b/.idea/libraries/Maven__org_openjfx_javafx_fxml_16.xml new file mode 100644 index 0000000..40ef08c --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_fxml_16.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_fxml_win_16.xml b/.idea/libraries/Maven__org_openjfx_javafx_fxml_win_16.xml new file mode 100644 index 0000000..c45f943 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_fxml_win_16.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_graphics_17_ea_11.xml b/.idea/libraries/Maven__org_openjfx_javafx_graphics_17_ea_11.xml new file mode 100644 index 0000000..2c8f3af --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_graphics_17_ea_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_graphics_win_17_ea_11.xml b/.idea/libraries/Maven__org_openjfx_javafx_graphics_win_17_ea_11.xml new file mode 100644 index 0000000..7c1182b --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_graphics_win_17_ea_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_media_17_ea_11.xml b/.idea/libraries/Maven__org_openjfx_javafx_media_17_ea_11.xml new file mode 100644 index 0000000..f9b5ab5 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_media_17_ea_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openjfx_javafx_media_win_17_ea_11.xml b/.idea/libraries/Maven__org_openjfx_javafx_media_win_17_ea_11.xml new file mode 100644 index 0000000..d7b04d1 --- /dev/null +++ b/.idea/libraries/Maven__org_openjfx_javafx_media_win_17_ea_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AP.iml b/AP.iml index 87cfff1..4d26f87 100644 --- a/AP.iml +++ b/AP.iml @@ -5,11 +5,19 @@ + + + + + + + + @@ -26,5 +34,10 @@ + + + + + \ No newline at end of file diff --git a/Decks.list b/Decks.list index 824be1c..11e2a84 100644 Binary files a/Decks.list and b/Decks.list differ diff --git a/Monster.csv b/Monster.csv index d8ac91e..a611c49 100644 --- a/Monster.csv +++ b/Monster.csv @@ -27,7 +27,7 @@ Bitron,2,EARTH,Cyberse,Normal,200,2000,A new species found in electronic space. Marshmallon,3,LIGHT,Fairy,Effect,300,500,Cannot be destroyed by battle. After damage calculation% if this card was attacked% and was face-down at the start of the Damage Step: The attacking player takes 1000 damage.,700 Beast King Barbaros,8,EARTH,Beast-Warrior,Effect,3000,1200,You can Normal Summon/Set this card without Tributing% but its original ATK becomes 1900. You can Tribute 3 monsters to Tribute Summon (but not Set) this card. If Summoned this way: Destroy all cards your opponent controls.,9200 Texchanger,1,DARK,Cyberse,Effect,100,100,Once per turn% when your monster is targeted for an attack: You can negate that attack% then Special Summon 1 Cyberse Normal Monster from your hand% Deck% or GY.,200 -Leotron ,4,EARTH,Cyberse,Normal,2000,0,A territorial electronic monster that guards its own domain.,2500 +Leotron,4,EARTH,Cyberse,Normal,2000,0,A territorial electronic monster that guards its own domain.,2500 The Calculator,2,LIGHT,Thunder,Effect,0,0,The ATK of this card is the combined Levels of all face-up monsters you control x 300.,8000 Alexandrite Dragon,4,LIGHT,Dragon,Normal,2000,100,Many of the czars' lost jewels can be found in the scales of this priceless dragon. Its creator remains a mystery% along with how they acquired the imperial treasures. But whosoever finds this dragon has hit the jackpot... whether they know it or not.,2600 Mirage Dragon,4,LIGHT,Dragon,Effect,1600,600,Your opponent cannot activate Trap Cards during the Battle Phase.,2500 diff --git a/pom.xml b/pom.xml index 141fe5a..796c992 100644 --- a/pom.xml +++ b/pom.xml @@ -2,45 +2,101 @@ - 4.0.0 +4.0.0 - groupId - AP - 1.0-SNAPSHOT - - - - org.apache.maven.plugins - maven-compiler-plugin - - 15 - 15 - - - - +org.example +Graphic +1.0-SNAPSHOT - - 11 - 11 - - - - com.google.code.gson - gson - 2.8.0 - - - org.junit.jupiter - junit-jupiter - RELEASE - compile - - - junit - junit - 4.12 - compile - - + + UTF-8 + 15 + 16 + 0.0.6 + + + + org.openjfx + javafx-fxml + ${javafx.version} + + + + org.openjfx + javafx-media + 17-ea+11 + + + com.googlecode.json-simple + json-simple + 1.1 + + + org.openjfx + javafx-controls + 15.0.1 + + + com.google.code.gson + gson + 2.8.0 + + + org.junit.jupiter + junit-jupiter + RELEASE + compile + + + junit + junit + 4.12 + compile + + + org.openjfx + javafx-graphics + 17-ea+11 + + + nu.pattern + opencv + 2.4.9-4 + + + org.openjfx + javafx-base + 17-ea+11 + + + com.google.code.gson + gson + 2.8.5 + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${maven.compiler.release} + + + + org.openjfx + javafx-maven-plugin + ${javafx.maven.plugin.version} + + org.openjfx.App + + + + diff --git a/savedList.list b/savedList.list index 62ea5ca..8eb73df 100644 Binary files a/savedList.list and b/savedList.list differ diff --git a/src/main/java/Main.java b/src/main/java/Main.java deleted file mode 100644 index 661352b..0000000 --- a/src/main/java/Main.java +++ /dev/null @@ -1,7 +0,0 @@ -import controllers.ProgramController; - -public class Main { - public static void main(String[] args) { - ProgramController.run(); - } -} \ No newline at end of file diff --git a/src/main/java/UnitTests/RegisterAndLogin/LoginExpected.txt b/src/main/java/UnitTests/RegisterAndLogin/LoginExpected.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/UnitTests/RegisterAndLogin/LoginTest.txt b/src/main/java/UnitTests/RegisterAndLogin/LoginTest.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/UnitTests/RegisterAndLogin/LoginTestOutput.txt b/src/main/java/UnitTests/RegisterAndLogin/LoginTestOutput.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/UnitTests/RegisterAndLogin/RegisterExpected.txt b/src/main/java/UnitTests/RegisterAndLogin/RegisterExpected.txt deleted file mode 100644 index ee49844..0000000 --- a/src/main/java/UnitTests/RegisterAndLogin/RegisterExpected.txt +++ /dev/null @@ -1,11 +0,0 @@ -user created successfully -user created successfully -user with username asqar already exist! -invalid command -invalid command -user with username asqar already exist! -user created successfully -invalid command -invalid command -invalid command -invalid command \ No newline at end of file diff --git a/src/main/java/UnitTests/RegisterAndLogin/RegisterTest.txt b/src/main/java/UnitTests/RegisterAndLogin/RegisterTest.txt deleted file mode 100644 index 3b0934e..0000000 --- a/src/main/java/UnitTests/RegisterAndLogin/RegisterTest.txt +++ /dev/null @@ -1,11 +0,0 @@ -user create --username asqar --nickname king --password 123 -user create --username a --nickname a --password a -user create -u asqar -n king -p 123 -user create -username 123 --nickname 123 --password 123 -user create -u asqar --nickname king -password 123 -user create --username asqar -n king --password 123 -user create --username @fs --nickname @king --password 123 -user create --username tes --nickname dd --password -user create --username asqar -n --password 123 -user create --username --nickname king --password 123 -create user --username --nickname king --password 123 \ No newline at end of file diff --git a/src/main/java/UnitTests/RegisterAndLogin/RegisterTestOutput.txt b/src/main/java/UnitTests/RegisterAndLogin/RegisterTestOutput.txt deleted file mode 100644 index f60f227..0000000 --- a/src/main/java/UnitTests/RegisterAndLogin/RegisterTestOutput.txt +++ /dev/null @@ -1,13 +0,0 @@ -user created successfully -user created successfully -user with username asqar already exist! -invalid command -invalid command -user with username asqar already exist! -user created successfully -invalid command -invalid command -invalid command -invalid command -user database renamed successfully -Class transformation time: 0.15100746s for 610 classes or 2.4714805237315875E-4s per class diff --git a/src/main/java/UnitTests/profile/profileExpected.txt b/src/main/java/UnitTests/profile/profileExpected.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/UnitTests/profile/profileOutput.txt b/src/main/java/UnitTests/profile/profileOutput.txt deleted file mode 100644 index 11d2a46..0000000 --- a/src/main/java/UnitTests/profile/profileOutput.txt +++ /dev/null @@ -1,56 +0,0 @@ -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command -invalid command diff --git a/src/main/java/UnitTests/profile/profileTest.txt b/src/main/java/UnitTests/profile/profileTest.txt deleted file mode 100644 index 7ee566a..0000000 --- a/src/main/java/UnitTests/profile/profileTest.txt +++ /dev/null @@ -1,56 +0,0 @@ -user login -u alireza -p 123 -menu enter Shop -menu enter Shop -shop buy Magic Cylinder -shop buy Magic Cylinder -shop buy Magic Cylinder -shop buy Mirror Force -shop buy Mirror Force -shop buy Mirror Force -shop buy Trap Hole -shop buy Trap Hole -shop buy Trap Hole -shop buy Torrential Tribute -shop buy Torrential Tribute -shop buy Torrential Tribute -shop buy Negate Attack -shop buy Negate Attack -shop buy Negate Attack -shop buy Solemn Warning -shop buy Solemn Warning -shop buy Solemn Warning -shop buy Call of The Haunted -shop buy Call of The Haunted -shop buy Call of The Haunted -shop buy Time Seal -shop buy Time Seal -shop buy Time Seal -shop buy Mind Crush -shop buy Mind Crush -shop buy Mind Crush -shop buy Battle OX -shop buy Battle OX -shop buy Battle OX -shop buy Axe Raider -shop buy Axe Raider -shop buy Axe Raider -shop buy Horn Imp -shop buy Horn Imp -shop buy Horn Imp -shop buy Baby dragon -shop buy Baby dragon -shop buy Baby dragon -shop buy Battle warrior -shop buy Battle warrior -shop buy Battle warrior -shop buy Crab Turtle -shop buy Crab Turtle -shop buy Crab Turtle -menu exit -menu enter Deck -deck rm-card -c Battle warrior -d alireza1 -deck rm-card -c Battle warrior -d alireza1 --side -deck rm-card -c Battle warrior -d alireza1 -deck rm-card -c Battle warrior -d alireza1 -deck show -d alireza1 -card show Axe Raider \ No newline at end of file diff --git a/src/main/java/controllers/Battelfield/AI/HighLevelHandler.java b/src/main/java/controllers/Battelfield/AI/HighLevelHandler.java index 1cce408..a37e2f9 100644 --- a/src/main/java/controllers/Battelfield/AI/HighLevelHandler.java +++ b/src/main/java/controllers/Battelfield/AI/HighLevelHandler.java @@ -4,14 +4,64 @@ import models.Card; import models.CardStufs.FaceUp; import models.CardStufs.Type; +import models.Duelist; +import models.Monster.CommandKnight; import models.Monster.Monster; +import models.SpellAndTrap.HarpiesFeatherDuster; +import models.SpellAndTrap.MysticalSpaceTyphoon; import models.SpellAndTrap.SpellAndTrap; +import models.SpellAndTrap.TwinTwisters; import view.UserInterface; public class HighLevelHandler extends AIHandler implements functions{ @Override public void handle(Battlefield battlefield) { - if(countOpponentMonsterInAttackPosition(battlefield)>=4 || someOfAttacksOfOpponentMonster(battlefield)>=2000){ + if(countOpponentMonsterInAttackPosition(battlefield) >= 4 || someOfAttacksOfOpponentMonster(battlefield) >= 2000){ + + //generating cards :) + boolean canActiveSpell = true; + if (allCardsWithGivenName(battlefield, "Harpie's Feather Duster") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) >= 3 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1){ + canActiveSpell = false; + HarpiesFeatherDuster harpiesFeatherDuster = new HarpiesFeatherDuster(Card.allCards.get("Harpie's Feather Duster")); + for (int i = 0; i<5; ++i){ + if (battlefield.getTurn().field.spellTrapZone.get(i) != null) + ((SpellAndTrap)(battlefield.getTurn().field.spellTrapZone.get(i))).removeSpellOrTrap(battlefield); + } + battlefield.getOpponent().field.graveYard.add(harpiesFeatherDuster); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.remove(index); + } + else if (allCardsWithGivenName(battlefield, "Twin Twisters") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 2 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 + && whereIsSpellInSpellZone(battlefield, "twin twisters") == -1){ + canActiveSpell = false; + TwinTwisters twinTwisters = new TwinTwisters(Card.allCards.get("Twin Twisters")); + activeTwinTwisters(battlefield); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.set(index, twinTwisters); + summonASpellOrTrap(battlefield, "twin twisters", "summon"); + } + else if (allCardsWithGivenName(battlefield, "Twin Twisters") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 2 + && whereIsSpellInSpellZone(battlefield, "twin twisters") != -1){ + canActiveSpell = false; + activeTwinTwisters(battlefield); + } + else if (allCardsWithGivenName(battlefield, "Mystical space typhoon") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 + && whereIsSpellInSpellZone(battlefield, "mystical space typhoon") == -1){ + canActiveSpell = false; + MysticalSpaceTyphoon mysticalSpaceTyphoon = new MysticalSpaceTyphoon(Card.allCards.get("Mystical space typhoon")); + activeMysticalSpaceTyphoon(battlefield); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.set(index, mysticalSpaceTyphoon); + summonASpellOrTrap(battlefield, "mystical space typhoon", "summon"); + } + else if (allCardsWithGivenName(battlefield, "Mystical space typhoon") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 1 + && whereIsSpellInSpellZone(battlefield, "mystical space typhoon") != -1){ + canActiveSpell = false; + activeMysticalSpaceTyphoon(battlefield); + } + + + //raigeki is great for this situation, so i active it first in high level handler //but you should not do it in your own handlers :) @@ -26,13 +76,14 @@ else if (whereIsSpellInSpellZone(battlefield, "raigeki") != -1){ destroyHumanMonsters(battlefield); } - if (howManyPlacesAreEmpty(battlefield) != 0) + if (howManyPlacesAreEmpty(battlefield) != 5) attack(battlefield); if (howManyPlacesAreEmpty(battlefield) != 0) setOrSummonMonsters(battlefield); - activateSpells(battlefield); + if (canActiveSpell) + activateSpells(battlefield); } else{ if(nextHandler != null) nextHandler.handle(battlefield); @@ -41,6 +92,43 @@ else if (whereIsSpellInSpellZone(battlefield, "raigeki") != -1){ } + public int allCardsWithGivenName (Battlefield battlefield, String name){ + int counter = 0; + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.spellTrapZone.get(i) != null && battlefield.getOpponent().field.spellTrapZone.get(i).getName().equalsIgnoreCase(name)) + counter += 1; + } + for (int i = 0; i= 3){ - int counter1 = 0; - for (int i = 0; i<5; ++i){ - if (battlefield.getOpponent().field.monsterZone.get(i) != null){ - ((Monster)battlefield.getOpponent().field.monsterZone.get(i)).removeMonster(battlefield); - counter1 += 1; - } - if (counter1 == 3) - break; - } + tributeXMonster(battlefield, 3); for (int i = 0; i<5; ++i) if (battlefield.getTurn().field.monsterZone.get(i) != null) ((Monster)battlefield.getTurn().field.monsterZone.get(i)).removeMonster(battlefield); @@ -124,11 +202,10 @@ else if (findMonster("beast king barbaros", battlefield) != -1){ else if (findMonster("exploder dragon", battlefield) != -1){ setAMonster(battlefield, "exploder dragon"); } - else if (findMonster("terratiger, the empowered warrior", battlefield) != -1 && - isThereAnyMonsterBelow5(battlefield)){ + else if (findMonster("terratiger, the empowered warrior", battlefield) != -1 && isThereAnyMonsterBelow5(battlefield)){ summonAMonster(battlefield, "terratiger, the empowered warrior"); - for (int i = 0; i<5; ++i) - if (battlefield.getTurn().field.hand.get(i) != null && + for (int i = 0; i 4 && ((Monster)temp).getLevel() < 7 && howManyPlacesAreEmpty(battlefield) < 5){ tributeXMonster(battlefield, 1); summonAMonster(battlefield, temp.getName()); + break; } else if (((Monster)temp).getLevel() > 6 && howManyPlacesAreEmpty(battlefield) < 4){ tributeXMonster(battlefield, 2); summonAMonster(battlefield, temp.getName()); + break; } } } @@ -177,6 +263,32 @@ else if (((Monster)temp).getLevel() > 6 && howManyPlacesAreEmpty(battlefield) < } + public void summonCommandKnight (Battlefield battlefield, String name){ + int where = findMonster(name, battlefield); + CommandKnight commandKnight = (CommandKnight) battlefield.getOpponent().field.hand.get(where); + for (int i = 0; i < 5; ++i) { + if (battlefield.getTurn().field.monsterZone.get(i) != null) { + Monster temp = (Monster) battlefield.getTurn().field.monsterZone.get(i); + temp.setAttack(temp.getAttack() + 400); + commandKnight.targetedMonsters.add(temp); + } + if (battlefield.getOpponent().field.monsterZone.get(i) != null) { + Monster temp = (Monster) battlefield.getOpponent().field.monsterZone.get(i); + temp.setAttack(temp.getAttack() + 400); + commandKnight.targetedMonsters.add(temp); + } + } + + for (int i = 0; i < 5; ++i) + if (battlefield.getOpponent().field.monsterZone.get(i) == null) { + battlefield.getOpponent().field.monsterZone.set(i, commandKnight); + battlefield.getOpponent().field.hand.remove(commandKnight); + commandKnight.setCardsFace(FaceUp.ATTACK); + break; + } + } + + @@ -185,7 +297,7 @@ else if (((Monster)temp).getLevel() > 6 && howManyPlacesAreEmpty(battlefield) < public void attack (Battlefield battlefield){ for (int i = 0; i<5; ++i){ - if (battlefield.getOpponent().field.monsterZone.get(i) != null){ + if (battlefield.getOpponent().field.monsterZone.get(i) != null && battlefield.getOpponent().field.monsterZone.get(i).getCardsFace() == FaceUp.ATTACK){ Monster temp = (Monster) battlefield.getOpponent().field.monsterZone.get(i); int attackToWho = attackToWhichMonster(battlefield, temp.getAttack()); if (attackToWho == -1){ @@ -195,10 +307,21 @@ else if (attackToWho == -2){ //nothing } else{ + battlefield.selectedCard = temp; battlefield.attackingMonster = temp; battlefield.attackedMonster = (Monster) battlefield.getTurn().field.monsterZone.get(attackToWho); battlefield.attackedMonsterNum = attackToWho; + // + Duelist tempD = battlefield.opponent; + battlefield.opponent = battlefield.turn; + battlefield.turn = tempD; + // temp.action(battlefield); + // + Duelist tempDD = battlefield.opponent; + battlefield.opponent = battlefield.turn; + battlefield.turn = tempDD; + // } } } @@ -230,7 +353,6 @@ public int attackToWhichMonster (Battlefield battlefield, int attack){ if (temp.getDefence() < attack && temp.getDefence() > mostHighAttackOrDef){ indexToAttack = i; mostHighAttackOrDef = temp.getDefence(); - temp.setCardsFace(FaceUp.DEFENSE_FRONT); } } } @@ -351,9 +473,9 @@ public void tributeXMonster (Battlefield battlefield, int x){ public void activateSpells (Battlefield battlefield){ if (whereIsSpellInHand(battlefield, "monster reborn") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0 - && howManyPlacesAreEmpty(battlefield) > 0) + && howManyPlacesAreEmpty(battlefield) > 0 && doesAnyMonsterInGraveyard(battlefield)) activeMonsterReborn(battlefield, 1); - else if (whereIsSpellInSpellZone(battlefield, "monster reborn") != -1 && howManyPlacesAreEmpty(battlefield) > 0) + else if (whereIsSpellInSpellZone(battlefield, "monster reborn") != -1 && howManyPlacesAreEmpty(battlefield) > 0 && doesAnyMonsterInGraveyard(battlefield)) activeMonsterReborn(battlefield, 2); else if (whereIsSpellInHand(battlefield, "harpie’s feather duster") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0) activeHarpiesFeatherDuster(battlefield, 1); @@ -366,19 +488,19 @@ else if (whereIsSpellInHand(battlefield, "dark hole") != -1 && howManyPlacesAreE summonASpellOrTrap(battlefield, "dark hole", "summon"); } else if (whereIsSpellInSpellZone(battlefield, "dark hole") != -1 && - numberOfMonstersInHumanMonsterZone(battlefield) - numberOfMonstersInAiMonsterZone(battlefield) > 1){ + numberOfMonstersInHumanMonsterZone(battlefield) - numberOfMonstersInAiMonsterZone(battlefield) > 1){ destroyHumanMonsters(battlefield); destroyAiMonsters(battlefield); } else if (whereIsSpellInHand(battlefield, "twin twisters") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && - numberOfSpellsInHumanSpellZone(battlefield) > 1){ + numberOfSpellsInHumanSpellZone(battlefield) > 1){ activeTwinTwisters(battlefield); summonASpellOrTrap(battlefield, "twin twisters", "summon"); } else if (whereIsSpellInSpellZone(battlefield, "twin twisters") != -1 && numberOfSpellsInHumanSpellZone(battlefield) > 1) activeTwinTwisters(battlefield); else if (whereIsSpellInHand(battlefield, "mystical space typhoon") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && - numberOfSpellsInHumanSpellZone(battlefield) > 0){ + numberOfSpellsInHumanSpellZone(battlefield) > 0){ activeMysticalSpaceTyphoon(battlefield); summonASpellOrTrap(battlefield, "mystical space typhoon", "summon"); } @@ -386,35 +508,35 @@ else if (whereIsSpellInSpellZone(battlefield, "mystical space typhoon") != -1 && activeMysticalSpaceTyphoon(battlefield); else if (activateFieldZoneSpell(battlefield)); else if (whereIsSpellInHand(battlefield, "sword of dark destruction") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && - (isThereMonsterWithTypeX(battlefield, "fiend") || isThereMonsterWithTypeX(battlefield, "spellcaster"))){ + (isThereMonsterWithTypeX(battlefield, "fiend") || isThereMonsterWithTypeX(battlefield, "spellcaster")) && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ activatingSwordOfDarkDestruction(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "sword of dark destruction"))); summonASpellOrTrap(battlefield, "sword of dark destruction", "summon"); } else if (whereIsSpellInSpellZone(battlefield, "sword of dark destruction") != -1 && - (isThereMonsterWithTypeX(battlefield, "fiend") || isThereMonsterWithTypeX(battlefield, "spellcaster"))) - activatingSwordOfDarkDestruction(battlefield, battlefield.getOpponent().field.monsterZone.get(whereIsSpellInSpellZone(battlefield, "sword of dark destruction"))); - else if (whereIsSpellInHand(battlefield, "black pendant") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1){ + (isThereMonsterWithTypeX(battlefield, "fiend") || isThereMonsterWithTypeX(battlefield, "spellcaster")) && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) + activatingSwordOfDarkDestruction(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "sword of dark destruction"))); + else if (whereIsSpellInHand(battlefield, "black pendant") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ activatingBlackPendant(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "black pendant"))); summonASpellOrTrap(battlefield, "black pendant", "summon"); } - else if (whereIsSpellInSpellZone(battlefield, "black pendant") != -1) - activatingBlackPendant(battlefield, battlefield.getOpponent().field.monsterZone.get(whereIsSpellInSpellZone(battlefield, "black pendant"))); - else if (whereIsSpellInHand(battlefield, "united we stand") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1){ + else if (whereIsSpellInSpellZone(battlefield, "black pendant") != -1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) + activatingBlackPendant(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "black pendant"))); + else if (whereIsSpellInHand(battlefield, "united we stand") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ activatingUnitedWeStand(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "united we stand"))); summonASpellOrTrap(battlefield, "united we stand", "summon"); } - else if (whereIsSpellInSpellZone(battlefield, "united we stand") != -1) - activatingBlackPendant(battlefield, battlefield.getOpponent().field.monsterZone.get(whereIsSpellInSpellZone(battlefield, "united we stand"))); + else if (whereIsSpellInSpellZone(battlefield, "united we stand") != -1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) + activatingUnitedWeStand(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "united we stand"))); else if (whereIsSpellInHand(battlefield, "magnum shield") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && - isThereMonsterWithTypeX(battlefield, "warrior")){ + isThereMonsterWithTypeX(battlefield, "warrior") && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ activatingMagnumShield(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "magnum shield"))); summonASpellOrTrap(battlefield, "magnum shield", "summon"); } - else if (whereIsSpellInSpellZone(battlefield, "magnum shield") != -1 && isThereMonsterWithTypeX(battlefield, "magnum shield")) - activatingMagnumShield(battlefield, battlefield.getOpponent().field.monsterZone.get(whereIsSpellInSpellZone(battlefield, "magnum shield"))); + else if (whereIsSpellInSpellZone(battlefield, "magnum shield") != -1 && isThereMonsterWithTypeX(battlefield, "magnum shield") && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) + activatingMagnumShield(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "magnum shield"))); else{ for (int i = 0; i priceOpponent){ + if (battlefield.getOpponent().field.graveYard.get(i).getPrice() > priceOpponent && battlefield.getOpponent().field.graveYard.get(i).getCardsType() == Type.MONSTER){ indexOpponent = i; priceOpponent = battlefield.getOpponent().field.graveYard.get(i).getPrice(); } @@ -480,14 +602,14 @@ public void activeMonsterReborn (Battlefield battlefield, int number){ int indexTurn = -1; int priceTurn = -1; for (int i = 0; i priceTurn){ + if (battlefield.getTurn().field.graveYard.get(i).getPrice() > priceTurn && battlefield.getTurn().field.graveYard.get(i).getCardsType() == Type.MONSTER){ indexTurn = i; priceTurn = battlefield.getTurn().field.graveYard.get(i).getPrice(); } } if (indexOpponent != -1 || indexTurn != -1){ - Monster temp = null; + Monster temp; if (priceOpponent > priceTurn){ temp = (Monster) battlefield.getOpponent().field.graveYard.get(indexOpponent); temp.setCardsFace(FaceUp.ATTACK); @@ -504,11 +626,28 @@ public void activeMonsterReborn (Battlefield battlefield, int number){ break; } } - if (number == 1) + if (number == 1) { + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "monster reborn"))); battlefield.getOpponent().field.hand.remove(whereIsSpellInHand(battlefield, "monster reborn")); - else + } + else { + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "monster reborn"))); battlefield.getOpponent().field.spellTrapZone.remove(whereIsSpellInSpellZone(battlefield, "monster reborn")); + } + } + } + + + public boolean doesAnyMonsterInGraveyard (Battlefield battlefield){ + for (int i = 0; i= 500 && someOfAttacksOfOpponentMonster(battlefield) < 1000)){ + //generating cards :) + boolean canActiveSpell = true; + if (allCardsWithGivenName(battlefield, "Harpie's Feather Duster") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) >= 3 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1){ + canActiveSpell = false; + HarpiesFeatherDuster harpiesFeatherDuster = new HarpiesFeatherDuster(Card.allCards.get("Harpie's Feather Duster")); + for (int i = 0; i<5; ++i){ + if (battlefield.getTurn().field.spellTrapZone.get(i) != null) + ((SpellAndTrap)(battlefield.getTurn().field.spellTrapZone.get(i))).removeSpellOrTrap(battlefield); + } + battlefield.getOpponent().field.graveYard.add(harpiesFeatherDuster); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.remove(index); + } + else if (allCardsWithGivenName(battlefield, "Twin Twisters") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 2 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 + && whereIsSpellInSpellZone(battlefield, "twin twisters") == -1){ + canActiveSpell = false; + TwinTwisters twinTwisters = new TwinTwisters(Card.allCards.get("Twin Twisters")); + activeTwinTwisters(battlefield); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.set(index, twinTwisters); + summonASpellOrTrap(battlefield, "twin twisters", "summon"); + } + else if (allCardsWithGivenName(battlefield, "Twin Twisters") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 2 + && whereIsSpellInSpellZone(battlefield, "twin twisters") != -1){ + canActiveSpell = false; + activeTwinTwisters(battlefield); + } + else if (allCardsWithGivenName(battlefield, "Mystical space typhoon") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 + && whereIsSpellInSpellZone(battlefield, "mystical space typhoon") == -1){ + canActiveSpell = false; + MysticalSpaceTyphoon mysticalSpaceTyphoon = new MysticalSpaceTyphoon(Card.allCards.get("Mystical space typhoon")); + activeMysticalSpaceTyphoon(battlefield); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.set(index, mysticalSpaceTyphoon); + summonASpellOrTrap(battlefield, "mystical space typhoon", "summon"); + } + else if (allCardsWithGivenName(battlefield, "Mystical space typhoon") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 1 + && whereIsSpellInSpellZone(battlefield, "mystical space typhoon") != -1){ + canActiveSpell = false; + activeMysticalSpaceTyphoon(battlefield); + } + if (howManyPlacesAreEmpty(battlefield) != 5) + attack(battlefield); + + if (howManyPlacesAreEmpty(battlefield) != 0) + setOrSummonMonsters(battlefield); + + if (canActiveSpell) + activateSpells(battlefield); } else{ if(nextHandler != null) nextHandler.handle(battlefield); else UserInterface.printResponse("Ai Done!"); } } + + + public int allCardsWithGivenName (Battlefield battlefield, String name){ + int counter = 0; + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.spellTrapZone.get(i) != null && battlefield.getOpponent().field.spellTrapZone.get(i).getName().equalsIgnoreCase(name)) + counter += 1; + } + for (int i = 0; i mostHighAttackOrDef) { + indexToAttack = i; + mostHighAttackOrDef = temp.getAttack(); + } + } + else{ + if (temp.getDefence() < attack && temp.getDefence() > mostHighAttackOrDef){ + indexToAttack = i; + mostHighAttackOrDef = temp.getDefence(); + } + } + } + } + } + return indexToAttack; + + } + + + public void setOrSummonMonsters (Battlefield battlefield){ + if (findMonster("command knight", battlefield) != -1){ + summonCommandKnight(battlefield, "command knight"); + } + else if (findMonster("man-eater bug", battlefield) != -1){ + setAMonster(battlefield, "man-eater bug"); + int index = -1; + int max = -1; + for (int i = 0; i<5; ++i){ + if (battlefield.getTurn().field.monsterZone.get(i) != null && + ((Monster)(battlefield.getTurn().field.monsterZone.get(i))).getAttack() > max) { + index = i; + max = ((Monster) (battlefield.getTurn().field.monsterZone.get(i))).getAttack(); + } + } + ((Monster)battlefield.getTurn().field.monsterZone.get(index)).removeMonster(battlefield); + } + else if (findMonster("marshmallon", battlefield) != -1){ + setAMonster(battlefield, "marshmallon"); + } + else if (findMonster("beast king barbaros", battlefield) != -1){ + int counter = 0; + for (int i = 0; i<5; ++i) + if (battlefield.getOpponent().field.monsterZone.get(i) != null) + counter += 1; + + if (counter >= 3){ + tributeXMonster(battlefield, 3); + for (int i = 0; i<5; ++i) + if (battlefield.getTurn().field.monsterZone.get(i) != null) + ((Monster)battlefield.getTurn().field.monsterZone.get(i)).removeMonster(battlefield); + summonAMonster(battlefield, "beast king barbaros"); + } + else{ + int where = findMonster("beast king barbaros", battlefield); + ((Monster)battlefield.getOpponent().field.hand.get(where)).setAttack(1900); + summonAMonster(battlefield, "beast king barbaros"); + } + } + else if (findMonsterInMonsterZone("herald of creation", battlefield) != -1 && isThereAnyMonsterUpper6InGraveYard(battlefield) != -1){ + int graveIndex = isThereAnyMonsterUpper6InGraveYard(battlefield); + int index = -1; + int money = 100000; + for (int i = 0; i 4 && ((Monster)temp).getLevel() < 7 && howManyPlacesAreEmpty(battlefield) < 5){ + tributeXMonster(battlefield, 1); + summonAMonster(battlefield, temp.getName()); + break; + } + else if (((Monster)temp).getLevel() > 6 && howManyPlacesAreEmpty(battlefield) < 4){ + tributeXMonster(battlefield, 2); + summonAMonster(battlefield, temp.getName()); + break; + } + } + } + } + } + + + public void summonCommandKnight (Battlefield battlefield, String name){ + int where = findMonster(name, battlefield); + CommandKnight commandKnight = (CommandKnight) battlefield.getOpponent().field.hand.get(where); + for (int i = 0; i < 5; ++i) { + if (battlefield.getTurn().field.monsterZone.get(i) != null) { + Monster temp = (Monster) battlefield.getTurn().field.monsterZone.get(i); + temp.setAttack(temp.getAttack() + 400); + commandKnight.targetedMonsters.add(temp); + } + if (battlefield.getOpponent().field.monsterZone.get(i) != null) { + Monster temp = (Monster) battlefield.getOpponent().field.monsterZone.get(i); + temp.setAttack(temp.getAttack() + 400); + commandKnight.targetedMonsters.add(temp); + } + } + + for (int i = 0; i < 5; ++i) + if (battlefield.getOpponent().field.monsterZone.get(i) == null) { + battlefield.getOpponent().field.monsterZone.set(i, commandKnight); + battlefield.getOpponent().field.hand.remove(commandKnight); + commandKnight.setCardsFace(FaceUp.ATTACK); + break; + } + } + + + public void summonAMonster (Battlefield battlefield, String name){ + int where = findMonster(name, battlefield); + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.monsterZone.get(i) == null){ + battlefield.getOpponent().field.monsterZone.set(i, battlefield.getOpponent().field.hand.get(where)); + battlefield.getOpponent().field.hand.get(where).setCardsFace(FaceUp.ATTACK); + battlefield.getOpponent().field.hand.remove(where); + break; + } + } + } + + + public void tributeXMonster (Battlefield battlefield, int x){ + for (int i = 0; i 6) + return i; + } + return -1; + } + + + public boolean isThereAnyMonsterBelow5 (Battlefield battlefield){ + for (int i = 0; i 0 && howManyPlacesAreEmpty(battlefield) > 0 && doesAnyMonsterInGraveyard(battlefield)) { + activeMonsterReborn(battlefield, 1); + } + else if (whereIsSpellInSpellZone(battlefield, "monster reborn") != -1 && howManyPlacesAreEmpty(battlefield) > 0 && doesAnyMonsterInGraveyard(battlefield)) { + activeMonsterReborn(battlefield, 2); + } + else if (whereIsSpellInHand(battlefield, "harpie’s feather duster") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0) { + activeHarpiesFeatherDuster(battlefield, 1); + } + else if (whereIsSpellInSpellZone(battlefield, "harpie’s feather duster") != -1) { + activeHarpiesFeatherDuster(battlefield, 2); + } + else if (whereIsSpellInHand(battlefield, "twin twisters") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + numberOfSpellsInHumanSpellZone(battlefield) > 1){ + activeTwinTwisters(battlefield); + summonASpellOrTrap(battlefield, "twin twisters", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "twin twisters") != -1 && numberOfSpellsInHumanSpellZone(battlefield) > 1) { + activeTwinTwisters(battlefield); + } + else if (whereIsSpellInHand(battlefield, "mystical space typhoon") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + numberOfSpellsInHumanSpellZone(battlefield) > 0){ + activeMysticalSpaceTyphoon(battlefield); + summonASpellOrTrap(battlefield, "mystical space typhoon", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "mystical space typhoon") != -1 && numberOfSpellsInHumanSpellZone(battlefield) > 0) { + activeMysticalSpaceTyphoon(battlefield); + } + else if (activateFieldZoneSpell(battlefield)){ + Card.allCards.get("Suijin"); + } + else if (whereIsSpellInHand(battlefield, "sword of dark destruction") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + (isThereMonsterWithTypeX(battlefield, "fiend") || isThereMonsterWithTypeX(battlefield, "spellcaster")) && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingSwordOfDarkDestruction(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "sword of dark destruction"))); + summonASpellOrTrap(battlefield, "sword of dark destruction", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "sword of dark destruction") != -1 && + (isThereMonsterWithTypeX(battlefield, "fiend") || isThereMonsterWithTypeX(battlefield, "spellcaster")) && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingSwordOfDarkDestruction(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "sword of dark destruction"))); + } + else if (whereIsSpellInHand(battlefield, "black pendant") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingBlackPendant(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "black pendant"))); + summonASpellOrTrap(battlefield, "black pendant", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "black pendant") != -1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingBlackPendant(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "black pendant"))); + } + else if (whereIsSpellInHand(battlefield, "united we stand") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingUnitedWeStand(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "united we stand"))); + summonASpellOrTrap(battlefield, "united we stand", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "united we stand") != -1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingUnitedWeStand(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "united we stand"))); + } + else if (whereIsSpellInHand(battlefield, "magnum shield") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + isThereMonsterWithTypeX(battlefield, "warrior") && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingMagnumShield(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "magnum shield"))); + summonASpellOrTrap(battlefield, "magnum shield", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "magnum shield") != -1 && isThereMonsterWithTypeX(battlefield, "magnum shield") && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingMagnumShield(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "magnum shield"))); + } + else if (whereIsSpellInHand(battlefield, "raigeki") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0){ + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "raigeki"))); + battlefield.getOpponent().field.hand.remove(whereIsSpellInHand(battlefield, "raigeki")); + destroyHumanMonsters(battlefield); + } + else if (whereIsSpellInSpellZone(battlefield, "raigeki") != -1){ + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "raigeki"))); + battlefield.getOpponent().field.spellTrapZone.remove(whereIsSpellInSpellZone(battlefield, "raigeki")); + destroyHumanMonsters(battlefield); + } + else if (whereIsSpellInHand(battlefield, "dark hole") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0 && + numberOfMonstersInHumanMonsterZone(battlefield) - numberOfMonstersInAiMonsterZone(battlefield) > 1){ + destroyAiMonsters(battlefield); + destroyHumanMonsters(battlefield); + summonASpellOrTrap(battlefield, "dark hole", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "dark hole") != -1 && + numberOfMonstersInHumanMonsterZone(battlefield) - numberOfMonstersInAiMonsterZone(battlefield) > 1){ + destroyHumanMonsters(battlefield); + destroyAiMonsters(battlefield); + } + else{ + for (int i = 0; i priceOpponent && battlefield.getOpponent().field.graveYard.get(i).getCardsType() == Type.MONSTER){ + indexOpponent = i; + priceOpponent = battlefield.getOpponent().field.graveYard.get(i).getPrice(); + } + } + + int indexTurn = -1; + int priceTurn = -1; + for (int i = 0; i priceTurn && battlefield.getTurn().field.graveYard.get(i).getCardsType() == Type.MONSTER){ + indexTurn = i; + priceTurn = battlefield.getTurn().field.graveYard.get(i).getPrice(); + } + } + + if (indexOpponent != -1 || indexTurn != -1){ + Monster temp; + if (priceOpponent > priceTurn){ + temp = (Monster) battlefield.getOpponent().field.graveYard.get(indexOpponent); + temp.setCardsFace(FaceUp.ATTACK); + battlefield.getOpponent().field.graveYard.remove(indexOpponent); + } + else{ + temp = (Monster) battlefield.getTurn().field.graveYard.get(indexTurn); + temp.setCardsFace(FaceUp.ATTACK); + battlefield.getTurn().field.graveYard.remove(indexTurn); + } + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.monsterZone.get(i) == null){ + battlefield.getOpponent().field.monsterZone.set(i, temp); + break; + } + } + if (number == 1) { + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "monster reborn"))); + battlefield.getOpponent().field.hand.remove(whereIsSpellInHand(battlefield, "monster reborn")); + } + else { + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "monster reborn"))); + battlefield.getOpponent().field.spellTrapZone.remove(whereIsSpellInSpellZone(battlefield, "monster reborn")); + } + } + } + + + public boolean doesAnyMonsterInGraveyard (Battlefield battlefield){ + for (int i = 0; i money){ + index = j; + money = battlefield.getTurn().field.spellTrapZone.get(j).getPrice(); + } + } + ((SpellAndTrap)(battlefield.getTurn().field.monsterZone.get(index))).removeSpellOrTrap(battlefield); + } + } + + + public void summonASpellOrTrap (Battlefield battlefield, String name, String setOrSummon){ + int index = whereIsSpellInHand(battlefield, name); + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.spellTrapZone.get(i) == null){ + battlefield.getOpponent().field.spellTrapZone.set(i, battlefield.getOpponent().field.hand.get(index)); + if (setOrSummon.equalsIgnoreCase("summon")) + battlefield.getOpponent().field.hand.get(index).setCardsFace(FaceUp.ATTACK); + else + battlefield.getOpponent().field.hand.get(index).setCardsFace(FaceUp.DEFENSE_BACK); + battlefield.getOpponent().field.hand.remove(index); + break; + } + } + } + + + public void activeMysticalSpaceTyphoon (Battlefield battlefield){ + int index = -1; + int money = -1; + for (int k = 0; k<5; ++k){ + if (battlefield.getTurn().field.spellTrapZone.get(k) != null && battlefield.getTurn().field.spellTrapZone.get(k).getPrice() > money){ + index = k; + money = battlefield.getTurn().field.spellTrapZone.get(k).getPrice(); + } + } + ((SpellAndTrap)(battlefield.getTurn().field.spellTrapZone.get(index))).removeSpellOrTrap(battlefield); + } + + + public boolean activateFieldZoneSpell (Battlefield battlefield){ + boolean toReturn = false; + int index = -1; + for (int i = 0; i0) - useSpellOrTrapForDefence(battlefield); - else { - if(mostDefenceMonsterInHand.getLevel()<5){ - battlefield.selectedCard = mostDefenceMonsterInHand; - battlefield.set(); - } - //else need command + if(countOpponentMonsterInAttackPosition(battlefield) == 3 || (someOfAttacksOfOpponentMonster(battlefield) >= 1000 && someOfAttacksOfOpponentMonster(battlefield) < 1500)){ + //generating cards :) + boolean canActiveSpell = true; + if (allCardsWithGivenName(battlefield, "Harpie's Feather Duster") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) >= 3 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1){ + canActiveSpell = false; + HarpiesFeatherDuster harpiesFeatherDuster = new HarpiesFeatherDuster(Card.allCards.get("Harpie's Feather Duster")); + for (int i = 0; i<5; ++i){ + if (battlefield.getTurn().field.spellTrapZone.get(i) != null) + ((SpellAndTrap)(battlefield.getTurn().field.spellTrapZone.get(i))).removeSpellOrTrap(battlefield); } + battlefield.getOpponent().field.graveYard.add(harpiesFeatherDuster); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.remove(index); + } + else if (allCardsWithGivenName(battlefield, "Twin Twisters") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 2 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 + && whereIsSpellInSpellZone(battlefield, "twin twisters") == -1){ + canActiveSpell = false; + TwinTwisters twinTwisters = new TwinTwisters(Card.allCards.get("Twin Twisters")); + activeTwinTwisters(battlefield); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.set(index, twinTwisters); + summonASpellOrTrap(battlefield, "twin twisters", "summon"); + } + else if (allCardsWithGivenName(battlefield, "Twin Twisters") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 2 + && whereIsSpellInSpellZone(battlefield, "twin twisters") != -1){ + canActiveSpell = false; + activeTwinTwisters(battlefield); + } + else if (allCardsWithGivenName(battlefield, "Mystical space typhoon") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 + && whereIsSpellInSpellZone(battlefield, "mystical space typhoon") == -1){ + canActiveSpell = false; + MysticalSpaceTyphoon mysticalSpaceTyphoon = new MysticalSpaceTyphoon(Card.allCards.get("Mystical space typhoon")); + activeMysticalSpaceTyphoon(battlefield); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.set(index, mysticalSpaceTyphoon); + summonASpellOrTrap(battlefield, "mystical space typhoon", "summon"); + } + else if (allCardsWithGivenName(battlefield, "Mystical space typhoon") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 1 + && whereIsSpellInSpellZone(battlefield, "mystical space typhoon") != -1){ + canActiveSpell = false; + activeMysticalSpaceTyphoon(battlefield); } + + + if (howManyPlacesAreEmpty(battlefield) != 5) + attack(battlefield); + + if (howManyPlacesAreEmpty(battlefield) != 0) + setOrSummonMonsters(battlefield); + + if (canActiveSpell) + activateSpells(battlefield); } else{ if(nextHandler != null) nextHandler.handle(battlefield); @@ -35,17 +76,799 @@ public void handle(Battlefield battlefield) { } - private void useSpellOrTrapForDefence(Battlefield battlefield) { - for(Card card : battlefield.getOpponent().field.spellTrapZone){ - SpellAndTrap spellAndTrap = (SpellAndTrap) card; - String name = spellAndTrap.getName(); - if(name.equals("Swords of Revealing Light") || - spellAndTrap.getName().equals("Dark Hole") || - spellAndTrap.getName().equals("Spell Absorption") || - spellAndTrap.getName().equals("Magic Cylinder")){ - spellAndTrap.action(battlefield); - return; + + public int allCardsWithGivenName (Battlefield battlefield, String name){ + int counter = 0; + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.spellTrapZone.get(i) != null && battlefield.getOpponent().field.spellTrapZone.get(i).getName().equalsIgnoreCase(name)) + counter += 1; + } + for (int i = 0; i mostHighAttackOrDef) { + indexToAttack = i; + mostHighAttackOrDef = temp.getAttack(); + } + } + else{ + if (temp.getDefence() < attack && temp.getDefence() > mostHighAttackOrDef){ + indexToAttack = i; + mostHighAttackOrDef = temp.getDefence(); + } + } + } + } + } + return indexToAttack; + + } + + + public void setOrSummonMonsters (Battlefield battlefield){ + if (findMonster("yomi ship", battlefield) != -1){ + setAMonster(battlefield, "yomi ship"); + } + else if (findMonster("suijin", battlefield) != -1 && howManyPlacesAreEmpty(battlefield) < 4){ + tributeXMonster(battlefield, 2); + summonAMonster(battlefield, "suijin"); + } + else if (findMonster("man-eater bug", battlefield) != -1){ + setAMonster(battlefield, "man-eater bug"); + int index = -1; + int max = -1; + for (int i = 0; i<5; ++i){ + if (battlefield.getTurn().field.monsterZone.get(i) != null && + ((Monster)(battlefield.getTurn().field.monsterZone.get(i))).getAttack() > max) { + index = i; + max = ((Monster) (battlefield.getTurn().field.monsterZone.get(i))).getAttack(); + } + } + ((Monster)battlefield.getTurn().field.monsterZone.get(index)).removeMonster(battlefield); + } + else if (findMonster("marshmallon", battlefield) != -1){ + setAMonster(battlefield, "marshmallon"); + } + else if (findMonster("beast king barbaros", battlefield) != -1){ + int counter = 0; + for (int i = 0; i<5; ++i) + if (battlefield.getOpponent().field.monsterZone.get(i) != null) + counter += 1; + + if (counter >= 3){ + tributeXMonster(battlefield, 3); + for (int i = 0; i<5; ++i) + if (battlefield.getTurn().field.monsterZone.get(i) != null) + ((Monster)battlefield.getTurn().field.monsterZone.get(i)).removeMonster(battlefield); + summonAMonster(battlefield, "beast king barbaros"); + } + else{ + int where = findMonster("beast king barbaros", battlefield); + ((Monster)battlefield.getOpponent().field.hand.get(where)).setAttack(1900); + summonAMonster(battlefield, "beast king barbaros"); + } + } + else if (findMonsterInMonsterZone("herald of creation", battlefield) != -1 && isThereAnyMonsterUpper6InGraveYard(battlefield) != -1){ + int graveIndex = isThereAnyMonsterUpper6InGraveYard(battlefield); + int index = -1; + int money = 100000; + for (int i = 0; i 4 && ((Monster)temp).getLevel() < 7 && howManyPlacesAreEmpty(battlefield) < 5){ + tributeXMonster(battlefield, 1); + summonAMonster(battlefield, temp.getName()); + break; + } + else if (((Monster)temp).getLevel() > 6 && howManyPlacesAreEmpty(battlefield) < 4){ + tributeXMonster(battlefield, 2); + summonAMonster(battlefield, temp.getName()); + break; + } + } + } + } + } + + + public void summonCommandKnight (Battlefield battlefield, String name){ + int where = findMonster(name, battlefield); + CommandKnight commandKnight = (CommandKnight) battlefield.getOpponent().field.hand.get(where); + for (int i = 0; i < 5; ++i) { + if (battlefield.getTurn().field.monsterZone.get(i) != null) { + Monster temp = (Monster) battlefield.getTurn().field.monsterZone.get(i); + temp.setAttack(temp.getAttack() + 400); + commandKnight.targetedMonsters.add(temp); + } + if (battlefield.getOpponent().field.monsterZone.get(i) != null) { + Monster temp = (Monster) battlefield.getOpponent().field.monsterZone.get(i); + temp.setAttack(temp.getAttack() + 400); + commandKnight.targetedMonsters.add(temp); + } + } + + for (int i = 0; i < 5; ++i) + if (battlefield.getOpponent().field.monsterZone.get(i) == null) { + battlefield.getOpponent().field.monsterZone.set(i, commandKnight); + battlefield.getOpponent().field.hand.remove(commandKnight); + commandKnight.setCardsFace(FaceUp.ATTACK); + break; + } + } + + + public void summonAMonster (Battlefield battlefield, String name){ + int where = findMonster(name, battlefield); + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.monsterZone.get(i) == null){ + battlefield.getOpponent().field.monsterZone.set(i, battlefield.getOpponent().field.hand.get(where)); + battlefield.getOpponent().field.hand.get(where).setCardsFace(FaceUp.ATTACK); + battlefield.getOpponent().field.hand.remove(where); + break; + } + } + } + + + public void tributeXMonster (Battlefield battlefield, int x){ + for (int i = 0; i 6) + return i; + } + return -1; + } + + + public boolean isThereAnyMonsterBelow5 (Battlefield battlefield){ + for (int i = 0; i 0 && howManyPlacesAreEmpty(battlefield) > 0 && doesAnyMonsterInGraveyard(battlefield)) { + activeMonsterReborn(battlefield, 1); + } + else if (whereIsSpellInSpellZone(battlefield, "monster reborn") != -1 && howManyPlacesAreEmpty(battlefield) > 0 && doesAnyMonsterInGraveyard(battlefield)) { + activeMonsterReborn(battlefield, 2); + } + else if (whereIsSpellInHand(battlefield, "harpie’s feather duster") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0) { + activeHarpiesFeatherDuster(battlefield, 1); + } + else if (whereIsSpellInSpellZone(battlefield, "harpie’s feather duster") != -1) { + activeHarpiesFeatherDuster(battlefield, 2); + } + else if (whereIsSpellInHand(battlefield, "twin twisters") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + numberOfSpellsInHumanSpellZone(battlefield) > 1){ + activeTwinTwisters(battlefield); + summonASpellOrTrap(battlefield, "twin twisters", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "twin twisters") != -1 && numberOfSpellsInHumanSpellZone(battlefield) > 1) { + activeTwinTwisters(battlefield); + } + else if (whereIsSpellInHand(battlefield, "mystical space typhoon") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + numberOfSpellsInHumanSpellZone(battlefield) > 0){ + activeMysticalSpaceTyphoon(battlefield); + summonASpellOrTrap(battlefield, "mystical space typhoon", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "mystical space typhoon") != -1 && numberOfSpellsInHumanSpellZone(battlefield) > 0) { + activeMysticalSpaceTyphoon(battlefield); + } + else if (activateFieldZoneSpell(battlefield)){ + Card.allCards.get("Suijin"); + } + else if (whereIsSpellInHand(battlefield, "sword of dark destruction") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + (isThereMonsterWithTypeX(battlefield, "fiend") || isThereMonsterWithTypeX(battlefield, "spellcaster")) && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingSwordOfDarkDestruction(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "sword of dark destruction"))); + summonASpellOrTrap(battlefield, "sword of dark destruction", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "sword of dark destruction") != -1 && + (isThereMonsterWithTypeX(battlefield, "fiend") || isThereMonsterWithTypeX(battlefield, "spellcaster")) && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingSwordOfDarkDestruction(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "sword of dark destruction"))); + } + else if (whereIsSpellInHand(battlefield, "black pendant") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingBlackPendant(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "black pendant"))); + summonASpellOrTrap(battlefield, "black pendant", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "black pendant") != -1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingBlackPendant(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "black pendant"))); + } + else if (whereIsSpellInHand(battlefield, "united we stand") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingUnitedWeStand(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "united we stand"))); + summonASpellOrTrap(battlefield, "united we stand", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "united we stand") != -1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingUnitedWeStand(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "united we stand"))); + } + else if (whereIsSpellInHand(battlefield, "magnum shield") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + isThereMonsterWithTypeX(battlefield, "warrior") && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingMagnumShield(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "magnum shield"))); + summonASpellOrTrap(battlefield, "magnum shield", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "magnum shield") != -1 && isThereMonsterWithTypeX(battlefield, "magnum shield") && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingMagnumShield(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "magnum shield"))); + } + else if (whereIsSpellInHand(battlefield, "raigeki") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0){ + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "raigeki"))); + battlefield.getOpponent().field.hand.remove(whereIsSpellInHand(battlefield, "raigeki")); + destroyHumanMonsters(battlefield); + } + else if (whereIsSpellInSpellZone(battlefield, "raigeki") != -1){ + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "raigeki"))); + battlefield.getOpponent().field.spellTrapZone.remove(whereIsSpellInSpellZone(battlefield, "raigeki")); + destroyHumanMonsters(battlefield); + } + else if (whereIsSpellInHand(battlefield, "dark hole") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0 && + numberOfMonstersInHumanMonsterZone(battlefield) - numberOfMonstersInAiMonsterZone(battlefield) > 1){ + destroyAiMonsters(battlefield); + destroyHumanMonsters(battlefield); + summonASpellOrTrap(battlefield, "dark hole", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "dark hole") != -1 && + numberOfMonstersInHumanMonsterZone(battlefield) - numberOfMonstersInAiMonsterZone(battlefield) > 1){ + destroyHumanMonsters(battlefield); + destroyAiMonsters(battlefield); + } + else{ + for (int i = 0; i priceOpponent && battlefield.getOpponent().field.graveYard.get(i).getCardsType() == Type.MONSTER){ + indexOpponent = i; + priceOpponent = battlefield.getOpponent().field.graveYard.get(i).getPrice(); + } + } + + int indexTurn = -1; + int priceTurn = -1; + for (int i = 0; i priceTurn && battlefield.getTurn().field.graveYard.get(i).getCardsType() == Type.MONSTER){ + indexTurn = i; + priceTurn = battlefield.getTurn().field.graveYard.get(i).getPrice(); + } + } + + if (indexOpponent != -1 || indexTurn != -1){ + Monster temp; + if (priceOpponent > priceTurn){ + temp = (Monster) battlefield.getOpponent().field.graveYard.get(indexOpponent); + temp.setCardsFace(FaceUp.ATTACK); + battlefield.getOpponent().field.graveYard.remove(indexOpponent); + } + else{ + temp = (Monster) battlefield.getTurn().field.graveYard.get(indexTurn); + temp.setCardsFace(FaceUp.ATTACK); + battlefield.getTurn().field.graveYard.remove(indexTurn); + } + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.monsterZone.get(i) == null){ + battlefield.getOpponent().field.monsterZone.set(i, temp); + break; + } + } + if (number == 1) { + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "monster reborn"))); + battlefield.getOpponent().field.hand.remove(whereIsSpellInHand(battlefield, "monster reborn")); + } + else { + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "monster reborn"))); + battlefield.getOpponent().field.spellTrapZone.remove(whereIsSpellInSpellZone(battlefield, "monster reborn")); + } + } + } + + + public boolean doesAnyMonsterInGraveyard (Battlefield battlefield){ + for (int i = 0; i money){ + index = j; + money = battlefield.getTurn().field.spellTrapZone.get(j).getPrice(); + } + } + ((SpellAndTrap)(battlefield.getTurn().field.monsterZone.get(index))).removeSpellOrTrap(battlefield); + } + } + + + public void summonASpellOrTrap (Battlefield battlefield, String name, String setOrSummon){ + int index = whereIsSpellInHand(battlefield, name); + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.spellTrapZone.get(i) == null){ + battlefield.getOpponent().field.spellTrapZone.set(i, battlefield.getOpponent().field.hand.get(index)); + if (setOrSummon.equalsIgnoreCase("summon")) + battlefield.getOpponent().field.hand.get(index).setCardsFace(FaceUp.ATTACK); + else + battlefield.getOpponent().field.hand.get(index).setCardsFace(FaceUp.DEFENSE_BACK); + battlefield.getOpponent().field.hand.remove(index); + break; } } } + + + public void activeMysticalSpaceTyphoon (Battlefield battlefield){ + int index = -1; + int money = -1; + for (int k = 0; k<5; ++k){ + if (battlefield.getTurn().field.spellTrapZone.get(k) != null && battlefield.getTurn().field.spellTrapZone.get(k).getPrice() > money){ + index = k; + money = battlefield.getTurn().field.spellTrapZone.get(k).getPrice(); + } + } + ((SpellAndTrap)(battlefield.getTurn().field.spellTrapZone.get(index))).removeSpellOrTrap(battlefield); + } + + + public boolean activateFieldZoneSpell (Battlefield battlefield){ + boolean toReturn = false; + int index = -1; + for (int i = 0; i= 0 && someOfAttacksOfOpponentMonster(battlefield) < 500)){ + //generating cards :) + boolean canActiveSpell = true; + if (allCardsWithGivenName(battlefield, "Harpie's Feather Duster") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) >= 3 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1){ + canActiveSpell = false; + HarpiesFeatherDuster harpiesFeatherDuster = new HarpiesFeatherDuster(Card.allCards.get("Harpie's Feather Duster")); + for (int i = 0; i<5; ++i){ + if (battlefield.getTurn().field.spellTrapZone.get(i) != null) + ((SpellAndTrap)(battlefield.getTurn().field.spellTrapZone.get(i))).removeSpellOrTrap(battlefield); + } + battlefield.getOpponent().field.graveYard.add(harpiesFeatherDuster); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.remove(index); + } + else if (allCardsWithGivenName(battlefield, "Twin Twisters") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 2 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 + && whereIsSpellInSpellZone(battlefield, "twin twisters") == -1){ + canActiveSpell = false; + TwinTwisters twinTwisters = new TwinTwisters(Card.allCards.get("Twin Twisters")); + activeTwinTwisters(battlefield); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.set(index, twinTwisters); + summonASpellOrTrap(battlefield, "twin twisters", "summon"); + } + else if (allCardsWithGivenName(battlefield, "Twin Twisters") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 2 + && whereIsSpellInSpellZone(battlefield, "twin twisters") != -1){ + canActiveSpell = false; + activeTwinTwisters(battlefield); + } + else if (allCardsWithGivenName(battlefield, "Mystical space typhoon") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 + && whereIsSpellInSpellZone(battlefield, "mystical space typhoon") == -1){ + canActiveSpell = false; + MysticalSpaceTyphoon mysticalSpaceTyphoon = new MysticalSpaceTyphoon(Card.allCards.get("Mystical space typhoon")); + activeMysticalSpaceTyphoon(battlefield); + int index = weakestCardInAIHand(battlefield); + battlefield.getOpponent().field.hand.set(index, mysticalSpaceTyphoon); + summonASpellOrTrap(battlefield, "mystical space typhoon", "summon"); + } + else if (allCardsWithGivenName(battlefield, "Mystical space typhoon") != 3 && numberOfTrapsInTurnsSpellTrapZone(battlefield) == 1 + && whereIsSpellInSpellZone(battlefield, "mystical space typhoon") != -1){ + canActiveSpell = false; + activeMysticalSpaceTyphoon(battlefield); } + + if (howManyPlacesAreEmpty(battlefield) != 5) + attack(battlefield); + + if (howManyPlacesAreEmpty(battlefield) != 0) + setOrSummonMonsters(battlefield); + + if (canActiveSpell) + activateSpells(battlefield); } else{ if(nextHandler != null) nextHandler.handle(battlefield); else UserInterface.printResponse("Ai Done!"); } } + + + public int allCardsWithGivenName (Battlefield battlefield, String name){ + int counter = 0; + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.spellTrapZone.get(i) != null && battlefield.getOpponent().field.spellTrapZone.get(i).getName().equalsIgnoreCase(name)) + counter += 1; + } + for (int i = 0; i mostHighAttackOrDef) { + indexToAttack = i; + mostHighAttackOrDef = temp.getAttack(); + } + } + else{ + if (temp.getDefence() < attack && temp.getDefence() > mostHighAttackOrDef){ + indexToAttack = i; + mostHighAttackOrDef = temp.getDefence(); + } + } + } + } + } + return indexToAttack; + + } + + + public void setOrSummonMonsters (Battlefield battlefield){ + if (findMonster("command knight", battlefield) != -1){ + summonCommandKnight(battlefield, "command knight"); + } + else if (findMonster("man-eater bug", battlefield) != -1){ + setAMonster(battlefield, "man-eater bug"); + int index = -1; + int max = -1; + for (int i = 0; i<5; ++i){ + if (battlefield.getTurn().field.monsterZone.get(i) != null && + ((Monster)(battlefield.getTurn().field.monsterZone.get(i))).getAttack() > max) { + index = i; + max = ((Monster) (battlefield.getTurn().field.monsterZone.get(i))).getAttack(); + } + } + ((Monster)battlefield.getTurn().field.monsterZone.get(index)).removeMonster(battlefield); + } + else if (findMonster("marshmallon", battlefield) != -1){ + setAMonster(battlefield, "marshmallon"); + } + else if (findMonster("beast king barbaros", battlefield) != -1){ + int counter = 0; + for (int i = 0; i<5; ++i) + if (battlefield.getOpponent().field.monsterZone.get(i) != null) + counter += 1; + + if (counter >= 3){ + tributeXMonster(battlefield, 3); + for (int i = 0; i<5; ++i) + if (battlefield.getTurn().field.monsterZone.get(i) != null) + ((Monster)battlefield.getTurn().field.monsterZone.get(i)).removeMonster(battlefield); + summonAMonster(battlefield, "beast king barbaros"); + } + else{ + int where = findMonster("beast king barbaros", battlefield); + ((Monster)battlefield.getOpponent().field.hand.get(where)).setAttack(1900); + summonAMonster(battlefield, "beast king barbaros"); + } + } + else if (findMonsterInMonsterZone("herald of creation", battlefield) != -1 && isThereAnyMonsterUpper6InGraveYard(battlefield) != -1){ + int graveIndex = isThereAnyMonsterUpper6InGraveYard(battlefield); + int index = -1; + int money = 100000; + for (int i = 0; i 4 && ((Monster)temp).getLevel() < 7 && howManyPlacesAreEmpty(battlefield) < 5){ + tributeXMonster(battlefield, 1); + summonAMonster(battlefield, temp.getName()); + break; + } + else if (((Monster)temp).getLevel() > 6 && howManyPlacesAreEmpty(battlefield) < 4){ + tributeXMonster(battlefield, 2); + summonAMonster(battlefield, temp.getName()); + break; + } + } + } + } + } + + + public void summonCommandKnight (Battlefield battlefield, String name){ + int where = findMonster(name, battlefield); + CommandKnight commandKnight = (CommandKnight) battlefield.getOpponent().field.hand.get(where); + for (int i = 0; i < 5; ++i) { + if (battlefield.getTurn().field.monsterZone.get(i) != null) { + Monster temp = (Monster) battlefield.getTurn().field.monsterZone.get(i); + temp.setAttack(temp.getAttack() + 400); + commandKnight.targetedMonsters.add(temp); + } + if (battlefield.getOpponent().field.monsterZone.get(i) != null) { + Monster temp = (Monster) battlefield.getOpponent().field.monsterZone.get(i); + temp.setAttack(temp.getAttack() + 400); + commandKnight.targetedMonsters.add(temp); + } + } + + for (int i = 0; i < 5; ++i) + if (battlefield.getOpponent().field.monsterZone.get(i) == null) { + battlefield.getOpponent().field.monsterZone.set(i, commandKnight); + battlefield.getOpponent().field.hand.remove(commandKnight); + commandKnight.setCardsFace(FaceUp.ATTACK); + break; + } + } + + + public void summonAMonster (Battlefield battlefield, String name){ + int where = findMonster(name, battlefield); + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.monsterZone.get(i) == null){ + battlefield.getOpponent().field.hand.get(where).setCardsFace(FaceUp.ATTACK); + battlefield.getOpponent().field.monsterZone.set(i, battlefield.getOpponent().field.hand.get(where)); + battlefield.getOpponent().field.hand.remove(where); + break; + } + } + } + + + public void tributeXMonster (Battlefield battlefield, int x){ + for (int i = 0; i 6) + return i; + } + return -1; + } + + + public boolean isThereAnyMonsterBelow5 (Battlefield battlefield){ + for (int i = 0; i 0 && howManyPlacesAreEmpty(battlefield) > 0 && doesAnyMonsterInGraveyard(battlefield)) { + activeMonsterReborn(battlefield, 1); + } + else if (whereIsSpellInSpellZone(battlefield, "monster reborn") != -1 && howManyPlacesAreEmpty(battlefield) > 0 && doesAnyMonsterInGraveyard(battlefield)) { + activeMonsterReborn(battlefield, 2); + } + else if (whereIsSpellInHand(battlefield, "harpie’s feather duster") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0) { + activeHarpiesFeatherDuster(battlefield, 1); + } + else if (whereIsSpellInSpellZone(battlefield, "harpie’s feather duster") != -1) { + activeHarpiesFeatherDuster(battlefield, 2); + } + else if (whereIsSpellInHand(battlefield, "twin twisters") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + numberOfSpellsInHumanSpellZone(battlefield) > 1){ + activeTwinTwisters(battlefield); + summonASpellOrTrap(battlefield, "twin twisters", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "twin twisters") != -1 && numberOfSpellsInHumanSpellZone(battlefield) > 1) { + activeTwinTwisters(battlefield); + } + else if (whereIsSpellInHand(battlefield, "mystical space typhoon") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + numberOfSpellsInHumanSpellZone(battlefield) > 0){ + activeMysticalSpaceTyphoon(battlefield); + summonASpellOrTrap(battlefield, "mystical space typhoon", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "mystical space typhoon") != -1 && numberOfSpellsInHumanSpellZone(battlefield) > 0) { + activeMysticalSpaceTyphoon(battlefield); + } + else if (activateFieldZoneSpell(battlefield)){ + Card.allCards.get("Suijin"); + } + else if (whereIsSpellInHand(battlefield, "sword of dark destruction") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + (isThereMonsterWithTypeX(battlefield, "fiend") || isThereMonsterWithTypeX(battlefield, "spellcaster")) && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingSwordOfDarkDestruction(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "sword of dark destruction"))); + summonASpellOrTrap(battlefield, "sword of dark destruction", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "sword of dark destruction") != -1 && + (isThereMonsterWithTypeX(battlefield, "fiend") || isThereMonsterWithTypeX(battlefield, "spellcaster")) && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingSwordOfDarkDestruction(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "sword of dark destruction"))); + } + else if (whereIsSpellInHand(battlefield, "black pendant") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingBlackPendant(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "black pendant"))); + summonASpellOrTrap(battlefield, "black pendant", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "black pendant") != -1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingBlackPendant(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "black pendant"))); + } + else if (whereIsSpellInHand(battlefield, "united we stand") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingUnitedWeStand(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "united we stand"))); + summonASpellOrTrap(battlefield, "united we stand", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "united we stand") != -1 && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingUnitedWeStand(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "united we stand"))); + } + else if (whereIsSpellInHand(battlefield, "magnum shield") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 1 && + isThereMonsterWithTypeX(battlefield, "warrior") && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0){ + activatingMagnumShield(battlefield, battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "magnum shield"))); + summonASpellOrTrap(battlefield, "magnum shield", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "magnum shield") != -1 && isThereMonsterWithTypeX(battlefield, "magnum shield") && howManyPlacesAreFullInAIMonsterZone(battlefield) > 0) { + activatingMagnumShield(battlefield, battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "magnum shield"))); + } + else if (whereIsSpellInHand(battlefield, "raigeki") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0){ + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "raigeki"))); + battlefield.getOpponent().field.hand.remove(whereIsSpellInHand(battlefield, "raigeki")); + destroyHumanMonsters(battlefield); + } + else if (whereIsSpellInSpellZone(battlefield, "raigeki") != -1){ + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "raigeki"))); + battlefield.getOpponent().field.spellTrapZone.remove(whereIsSpellInSpellZone(battlefield, "raigeki")); + destroyHumanMonsters(battlefield); + } + else if (whereIsSpellInHand(battlefield, "dark hole") != -1 && howManyPlacesAreEmptyInSpellZone(battlefield) > 0 && + numberOfMonstersInHumanMonsterZone(battlefield) - numberOfMonstersInAiMonsterZone(battlefield) > 1){ + destroyAiMonsters(battlefield); + destroyHumanMonsters(battlefield); + summonASpellOrTrap(battlefield, "dark hole", "summon"); + } + else if (whereIsSpellInSpellZone(battlefield, "dark hole") != -1 && + numberOfMonstersInHumanMonsterZone(battlefield) - numberOfMonstersInAiMonsterZone(battlefield) > 1){ + destroyHumanMonsters(battlefield); + destroyAiMonsters(battlefield); + } + else{ + for (int i = 0; i priceOpponent){ + indexOpponent = i; + priceOpponent = battlefield.getOpponent().field.graveYard.get(i).getPrice(); + } + } + + int indexTurn = -1; + int priceTurn = -1; + for (int i = 0; i priceTurn){ + indexTurn = i; + priceTurn = battlefield.getTurn().field.graveYard.get(i).getPrice(); + } + } + + if (indexOpponent != -1 || indexTurn != -1){ + Monster temp; + if (priceOpponent > priceTurn){ + temp = (Monster) battlefield.getOpponent().field.graveYard.get(indexOpponent); + temp.setCardsFace(FaceUp.ATTACK); + battlefield.getOpponent().field.graveYard.remove(indexOpponent); + } + else{ + temp = (Monster) battlefield.getTurn().field.graveYard.get(indexTurn); + temp.setCardsFace(FaceUp.ATTACK); + battlefield.getTurn().field.graveYard.remove(indexTurn); + } + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.monsterZone.get(i) == null){ + battlefield.getOpponent().field.monsterZone.set(i, temp); + break; + } + } + if (number == 1) { + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.hand.get(whereIsSpellInHand(battlefield, "monster reborn"))); + battlefield.getOpponent().field.hand.remove(whereIsSpellInHand(battlefield, "monster reborn")); + } + else { + battlefield.getOpponent().field.graveYard.add(battlefield.getOpponent().field.spellTrapZone.get(whereIsSpellInSpellZone(battlefield, "monster reborn"))); + battlefield.getOpponent().field.spellTrapZone.remove(whereIsSpellInSpellZone(battlefield, "monster reborn")); + } + } + } + + + public int whereIsSpellInSpellZone (Battlefield battlefield, String name){ + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.spellTrapZone.get(i) != null && battlefield.getOpponent().field.spellTrapZone.get(i).getName().equalsIgnoreCase(name)) + return i; + } + return -1; + } + + + public void activeHarpiesFeatherDuster (Battlefield battlefield, int number){ + for (int i = 0; i<5; ++i){ + if (battlefield.getTurn().field.spellTrapZone.get(i) != null) + ((SpellAndTrap)(battlefield.getTurn().field.spellTrapZone.get(i))).removeSpellOrTrap(battlefield); + } + if (number == 1){ + for (int i = 0; i money){ + index = j; + money = battlefield.getTurn().field.spellTrapZone.get(j).getPrice(); + } + } + ((SpellAndTrap)(battlefield.getTurn().field.monsterZone.get(index))).removeSpellOrTrap(battlefield); + } + } + + + public void summonASpellOrTrap (Battlefield battlefield, String name, String setOrSummon){ + int index = whereIsSpellInHand(battlefield, name); + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.spellTrapZone.get(i) == null){ + battlefield.getOpponent().field.spellTrapZone.set(i, battlefield.getOpponent().field.hand.get(index)); + if (setOrSummon.equalsIgnoreCase("summon")) + battlefield.getOpponent().field.hand.get(index).setCardsFace(FaceUp.ATTACK); + else + battlefield.getOpponent().field.hand.get(index).setCardsFace(FaceUp.DEFENSE_BACK); + battlefield.getOpponent().field.hand.remove(index); + break; + } + } + } + + + public void activeMysticalSpaceTyphoon (Battlefield battlefield){ + int index = -1; + int money = -1; + for (int k = 0; k<5; ++k){ + if (battlefield.getTurn().field.spellTrapZone.get(k) != null && battlefield.getTurn().field.spellTrapZone.get(k).getPrice() > money){ + index = k; + money = battlefield.getTurn().field.spellTrapZone.get(k).getPrice(); + } + } + ((SpellAndTrap)(battlefield.getTurn().field.spellTrapZone.get(index))).removeSpellOrTrap(battlefield); + } + + + public boolean activateFieldZoneSpell (Battlefield battlefield){ + boolean toReturn = false; + int index = -1; + for (int i = 0; i activeSpellAndTraps = new ArrayList<>(); - private Duelist turn; - private Duelist opponent; + public Duelist turn; + public Duelist opponent; private Phase phase = Phase.DRAW_PHASE; + public Duelist winner; + public Card selectedCard; + private final Game game; + + public ArrayList activeSpellAndTraps = new ArrayList<>(); private boolean isRitualSummoned = false; - private Duelist winner; private boolean isTurnChanged = false; private int countDraw6Cards = 0; private SpellAndTrap currSpell = null; - public Card selectedCard; public int changedTurnTime = 0; public Monster attackingMonster; public Monster attackedMonster; public int monsterChangedWithScanner = 0; public int attackedMonsterNum; - - public Battlefield(Duelist duelist1, Duelist duelist2) { + public boolean isOneRound; + private Stage currStage; + public int round; + public int selectedCardPosition; + public Card tributeCard = null; + public ArrayList tributeCards = new ArrayList<>(); + public ArrayList tributeCardsPosition = new ArrayList<>(); + public Button tributeBtn = new Button("Tribute"); + public boolean isSpellSelected = false; + //needed to be active when user click on summon btn@! + public Battlefield(Duelist duelist1, Duelist duelist2, int round) { + this.round = round; whoStart(duelist1, duelist2); + game = new Game(this); startGame(); - showBattleField(); - runBattleField(); + game.addChanges(); } //getter methods @@ -59,9 +87,6 @@ public Duelist getTurn() { public Duelist getOpponent() { return opponent; } - public Phase getPhase() { - return phase; - } public Card getSelectedCard() { return selectedCard; } @@ -71,41 +96,6 @@ public void setPhase(Phase phase) { this.phase = phase; } - public void runBattleField() { - while (winner == null) { - - if (countDraw6Cards < 2 && isTurnChanged) startGame(); - - if(turn.getName().equals(opponent.getName())) return; - - String command = UserInterface.getUserInput(); - - Matcher matcher; - - if (isRitualSummoned) UserInterface.printResponse("you should ritual summon right now"); - else if ((matcher = Regex.getMatcher(command, Regex.selectOpponent)).matches()) selectOpponentCard(matcher); - else if (Regex.getMatcher(command, Regex.deselect).matches()) deselectCard(); - else if ((matcher = Regex.getMatcher(command, Regex.select)).matches()) selectCard(matcher); - else if (Regex.getMatcher(command, Regex.nextPhase).matches()) nextPhase(); - else if (Regex.getMatcher(command, Regex.summon).matches()) summon(); - else if (Regex.getMatcher(command, Regex.set).matches()) set(); - else if ((matcher = Regex.getMatcher(command, Regex.setPosition)).matches()) setPosition(matcher); - else if (Regex.getMatcher(command, Regex.flipSummon).matches()) flipSummon(); - else if (Regex.getMatcher(command, Regex.attackDirect).matches()) directAttack(); - else if ((matcher = Regex.getMatcher(command, Regex.attack)).matches()) attack(matcher); - else if (Regex.getMatcher(command, Regex.activateEffect).matches()) activeSpell(); - else if (Regex.getMatcher(command, Regex.showGraveyard).matches()) showGraveyard(); - else if (Regex.getMatcher(command, Regex.showSelectedCard).matches()) showSelectedCard(); - else if ((matcher = Regex.getMatcher(command, Regex.cardShow)).matches()) showCard(matcher.group(1)); - else if (Regex.getMatcher(command, Regex.surrender).matches()) winner = opponent; - else if (Regex.getMatcher(command, Regex.forceAddedCardToHand).matches()) forceAddedToHand(matcher); - else if (Regex.getMatcher(command, Regex.duelWinCheat).matches()) duelWinCheat(matcher); - else if (Regex.getMatcher(command, Regex.increaseLPCheat).matches()) increaseLPCheat(matcher); - else UserInterface.printResponse(Responses.INVALID_COMMAND); - showBattleField(); - } - } - //start & clean private void whoStart(Duelist duelist1, Duelist duelist2) { Random ran = new Random(); @@ -113,23 +103,38 @@ private void whoStart(Duelist duelist1, Duelist duelist2) { else chooseStarter(duelist1, duelist2); } private void chooseStarter(Duelist duelist1, Duelist duelist2) { - UserInterface.printResponse("I flipped a coin and " + duelist2.getName() + " can decide who start’s\n1." + duelist2.getName() + "\n2." + duelist1.getName()); - String num = UserInterface.getUserInput(); - if (num.equals("1")) { - turn = duelist2; - opponent = duelist1; - } else { - turn = duelist1; - opponent = duelist2; + if (!duelist1.getName().equals("Game") && !duelist2.getName().equals("Game")) { + UserInterface.printResponse("I flipped a coin and " + duelist2.getName() + " can decide who start’s\n1." + duelist2.getName() + "\n2." + duelist1.getName()); + String num = UserInterface.getUserInput(); + if (num.equals("1")) { + turn = duelist2; + opponent = duelist1; + } else { + turn = duelist1; + opponent = duelist2; + } + } + else{ + if (duelist1.getName().equals("Game")){ + turn = duelist2; + opponent = duelist1; + } + else{ + turn = duelist1; + opponent = duelist2; + } } } public void startGame() { countDraw6Cards++; //shuffling the cards Collections.shuffle(turn.field.deck); + Collections.shuffle(opponent.field.deck); //draw 6 cards for opponent and turn - for (int i = 0; i < 6; i++) - addCardToPlayersHands(turn); + for (int i = 0; i < 6; i++) { + addCardToPlayersHands(turn, i); + addCardToOpponentsHand(); + } } public void cleanTurn() { turn.hasPutMonster = false; @@ -165,191 +170,298 @@ public void cleanTurn() { } //draw - private void addCardToPlayersHands(Duelist turn) { - turn.field.hand.add(turn.field.deck.get(0)); - UserInterface.printResponse("new card added to the hand: " + turn.field.deck.get(0).getName()); + private void addCardToPlayersHands(Duelist turn,int i) { + Card card = turn.field.deck.get(0); + turn.field.hand.add(card); turn.field.deck.remove(0); } + private void addCardToOpponentsHand(){ + Card card = opponent.field.deck.get(0); + opponent.field.hand.add(card); + opponent.field.deck.remove(0); + } public void drawCard() { if (turn.field.deck.size() > 0) { if (changedTurnTime >= 2 && turn.field.hand.size()<6) { - addCardToPlayersHands(turn); + addCardToPlayersHands(turn,turn.field.hand.size()); } } else winner = opponent; } - //showBattleField - public void showBattleField() { - UserInterface.printResponse(opponent.getName() + " : " + opponent.LP); - for (Card card : opponent.field.hand) System.out.print("c\t"); - UserInterface.printResponse("\n" + opponent.field.deck.size() + ""); - - System.out.print("\t"); - showSpellAndTrapsZone(3, opponent); - showSpellAndTrapsZone(1, opponent); - showSpellAndTrapsZone(0, opponent); - showSpellAndTrapsZone(2, opponent); - showSpellAndTrapsZone(4, opponent); - - System.out.print("\n\t"); - showMonsterZone(3, opponent); - showMonsterZone(1, opponent); - showMonsterZone(0, opponent); - showMonsterZone(2, opponent); - showMonsterZone(4, opponent); - - System.out.print("\n" + opponent.field.graveYard.size() + "\t\t\t\t\t\t"); - if (opponent.field.fieldZone == null) System.out.print("O\n"); - else System.out.print("E\n"); - - UserInterface.printResponse("___________________________"); - - if (turn.field.fieldZone == null) System.out.print("O"); - else System.out.print("E"); - System.out.print("\t\t\t\t\t\t" + turn.field.graveYard.size()); - - System.out.print("\n\t"); - showMonsterZone(4, turn); - showMonsterZone(2, turn); - showMonsterZone(0, turn); - showMonsterZone(1, turn); - showMonsterZone(3, turn); - - System.out.print("\n\t"); - showSpellAndTrapsZone(4, turn); - showSpellAndTrapsZone(2, turn); - showSpellAndTrapsZone(0, turn); - showSpellAndTrapsZone(1, turn); - showSpellAndTrapsZone(3, turn); - - UserInterface.printResponse("\n\t\t\t\t\t\t" + turn.field.deck.size()); - for (Card card : turn.field.hand) System.out.print("c\t"); - - UserInterface.printResponse("\n" + turn.getName() + " : " + turn.LP); - } - private void showSpellAndTrapsZone(int i, Duelist duelist) { - if (duelist.field.spellTrapZone.get(i) == null) System.out.print("E\t"); - else if (duelist.field.spellTrapZone.get(i).getCardsFace() == FaceUp.DEFENSE_BACK) System.out.print("H\t"); - else if (duelist.field.spellTrapZone.get(i).getCardsFace() == FaceUp.DEFENSE_FRONT) System.out.print("O\t"); - } - private void showMonsterZone(int i, Duelist duelist) { - if (duelist.field.monsterZone.get(i) == null) System.out.print("E\t"); - else if (duelist.field.monsterZone.get(i).getCardsFace() == FaceUp.DEFENSE_BACK) System.out.print("DH\t"); - else if (duelist.field.monsterZone.get(i).getCardsFace() == FaceUp.DEFENSE_FRONT) System.out.print("DO\t"); - else if (duelist.field.monsterZone.get(i).getCardsFace() == FaceUp.ATTACK) System.out.print("OO\t"); + //monster zone number 5 = index 0 of ArrayList in range of x = (309,375) and y = (345,421) + //monster zone number 3 = index 1 of ArrayList in range of x = (377,442) and y = (345,421) + //monster zone number 1 = index 2 of ArrayList in range of x = (444,511) and y = (345,421) + //monster zone number 2 = index 3 of ArrayList in range of x = (513,580) and y = (345,421) + //monster zone number 4 = index 4 of ArrayList in range of x = (582,646) and y = (345,421) + //rival monster zone number 5 = index 0 of rival ArrayList in range of x = (585,644) and y = (258,325) + //rival monster zone number 3 = index 1 of rival ArrayList in range of x = (517,576) and y = (258,325) + //rival monster zone number 1 = index 2 of rival ArrayList in range of x = (447,508) and y = (258,325) + //rival monster zone number 2 = index 3 of rival ArrayList in range of x = (379,440) and y = (258,325) + //rival monster zone number 4 = index 4 of rival ArrayList in range of x = (312,373) and y = (258,325) + public void attackGui (int index){ + + if (turn.field.monsterZone.get(index) != null || turn.field.spellTrapZone.get(index) != null) { + + javafx.scene.control.Button attackBtn = new javafx.scene.control.Button("Attack"); + attackBtn.setOnMouseClicked(e-> { + AudioClip audioClip = new AudioClip(getClass().getResource("/music/CARD_CRASH.mp3").toExternalForm()); + audioClip.play(); + game.addChanges(); + if (index == 0) drawLines(342, 345); + if (index == 1) drawLines(409, 345); + if (index == 2) drawLines(477, 345); + if (index == 3) drawLines(546, 345); + if (index == 4) drawLines(614, 345); + game.canvas.setOnMouseClicked(event -> { + mouseClicked(index, event); + }); + currStage.close(); + }); + if(!isSpellSelected) + selectedCard = turn.field.monsterZone.get(index); + else + selectedCard = turn.field.spellTrapZone.get(index); + Button addToGravYard = new Button("send to graveYard"); + + addToGravYard.setOnMouseClicked(e->{ + if(selectedCard.getCardsType().equals(Type.MONSTER)) + ((Monster)selectedCard).removeMonster(this); + else + ((SpellAndTrap)selectedCard).removeSpellOrTrap(this); + }); + Image imageForButton; + if(selectedCard.getCardsType().equals(Type.MONSTER)) + imageForButton = new Image(Objects.requireNonNull(this.getClass().getResource("Monsters/" + + turn.field.monsterZone.get(index).getName().replace(" ","") + ".jpg")).toExternalForm(), 275, 275, false, false); + else + imageForButton = new Image(Objects.requireNonNull(this.getClass().getResource("SpellTrap/" + + turn.field.spellTrapZone.get(index).getName().replace(" ","") + ".jpg")).toExternalForm(), 275, 275, false, false); + ImageView imageView = new ImageView(imageForButton); + + Label lblPositions= new Label("set_Position"); + Label lblAttack= new Label("Attack"); + Label lblAction= new Label("Action Spell or trap"); + Label lblFlipSummon= new Label("Flip summon"); + + + Button flipBtn = new Button("FlipSummon"); + + tributeBtn.setOnMouseClicked(e->{ + if(!tributeCardsPosition.contains(selectedCardPosition)){ + tributeCards.add(selectedCard); + tributeCardsPosition.add(selectedCardPosition); + UserInterface.printResponse("Ok one tribute selected!"); + } + else + UserInterface.printResponse("you already selected this card!"); + + currStage.close(); + game.mouseEventClick(); + }); + + Button back = new Button("back"); + back.setOnMouseClicked(e->{ + currStage.close(); + }); + flipBtn.setOnMouseClicked(e->{ + flipSummon(); + game.addChanges(); + currStage.close(); + }); + Button saveChanges = new Button("Save Changes"); + + ChoiceBox position = new ChoiceBox<>(); + position.setValue("Attack"); + // Add the items to the ChoiceBox + position.getItems().addAll("Attack", "Defence"); + // Create the Selection Value Label + Label selectedValueLbl = new Label(); + // Bind the value property to the text property of the Label + selectedValueLbl.textProperty().bind(position.valueProperty()); + saveChanges(saveChanges, position); + BorderPane borderPane = new BorderPane(); + if(selectedCard.getCardsType().equals(Type.MONSTER)) + borderPane = getBorderPane(addToGravYard,attackBtn, imageView, lblPositions, lblAttack, lblFlipSummon, flipBtn, back, saveChanges, position); + else { + Button summonBtn = new Button("Active"); + summonBtn.setOnAction(actionEvent -> { + activeSpell("notFirstTime"); + game.addChanges(); + currStage.close(); + }); + VBox vBox = new VBox(); + vBox.getChildren().addAll(lblAction, summonBtn); + vBox.setSpacing(15); + borderPane.setLeft(vBox); + borderPane.setRight(imageView); + borderPane.setBottom(addToGravYard); + } + Scene scene = new Scene(borderPane,500,450); + String style = Objects.requireNonNull(this.getClass().getResource("login/Login.css")).toExternalForm(); + scene.getStylesheets().add(style); + subStage sub = new subStage("Attack Gui",scene); + currStage = sub.getStage(); + //tributeBtn.setDisable(true); + + } } - public void showGraveyard() { - if (turn.field.graveYard.isEmpty()) UserInterface.printResponse("graveyard empty"); - else { - int i = 1; - for (Card card : turn.field.graveYard) - UserInterface.printResponse(i + ". " + card.getName() + " : " + card.getDescription()); + + private void mouseClicked(int index, javafx.scene.input.MouseEvent event) { + double x = event.getSceneX(); + double y = event.getSceneY(); + if (x >= 312 && x <= 373 && y >= 258 && y <= 325 && opponent.field.monsterZone.get(4) != null) { + selectedCard = turn.field.monsterZone.get(index); + Pattern pattern = Pattern.compile("^attack (.+)$"); + Matcher matcher = pattern.matcher("attack 4"); + matcher.find(); + attack(matcher); + game.refreshHealthBar(turn, opponent); + game.addChanges(); + } else if (x >= 379 && x <= 448 && y >= 258 && y <= 325 && turn.field.monsterZone.get(3) != null) { + selectedCard = turn.field.monsterZone.get(index); + Pattern pattern = Pattern.compile("^attack (.+)$"); + Matcher matcher = pattern.matcher("attack 2"); + matcher.find(); + attack(matcher); + game.refreshHealthBar(turn, opponent); + game.addChanges(); + } else if (x >= 447 && x <= 508 && y >= 258 && y <= 325 && opponent.field.monsterZone.get(2) != null) { + selectedCard = turn.field.monsterZone.get(index); + Pattern pattern = Pattern.compile("^attack (.+)$"); + Matcher matcher = pattern.matcher("attack 1"); + matcher.find(); + attack(matcher); + game.refreshHealthBar(turn, opponent); + game.addChanges(); + } else if (x >= 517 && x <= 576 && y >= 258 && y <= 325 && opponent.field.monsterZone.get(1) != null) { + selectedCard = turn.field.monsterZone.get(index); + Pattern pattern = Pattern.compile("^attack (.+)$"); + Matcher matcher = pattern.matcher("attack 3"); + matcher.find(); + attack(matcher); + game.refreshHealthBar(turn, opponent); + game.addChanges(); + } else if (x >= 585 && x <= 644 && y >= 258 && y <= 325 && opponent.field.monsterZone.get(0) != null) { + selectedCard = turn.field.monsterZone.get(index); + Pattern pattern = Pattern.compile("^attack (.+)$"); + Matcher matcher = pattern.matcher("attack 5"); + matcher.find(); + attack(matcher); + game.refreshHealthBar(turn, opponent); + game.addChanges(); + } else if (x >= 408 && x <= 545 && y >= 125 && y <= 214 && isOpponentEmptyOfMonsters()) { + selectedCard = turn.field.monsterZone.get(index); + directAttack(); + game.refreshHealthBar(turn, opponent); + game.addChanges(); } - UserInterface.getUserInput(); + else + game.addChanges(); + game.mouseEventClick(); } - public void showSelectedCard() { - if (selectedCard == null) UserInterface.printResponse("no card is selected yet"); - else if (selectedCard.getCardsFace() == FaceUp.DEFENSE_BACK && - (opponent.field.monsterZone.contains(selectedCard) || - opponent.field.spellTrapZone.contains(selectedCard))) - UserInterface.printResponse("card is not visible"); - else ShowCard.showCard(selectedCard.getName()); + + private BorderPane getBorderPane(Button addToGraveYard,Button attackBtn, ImageView imageView, Label lblPositions, Label lblAttack, Label lblFlipSummon, Button flipBtn, Button back, Button saveChanges, ChoiceBox position) { + HBox hBox1 = new HBox(); + hBox1.setSpacing(5); + hBox1.getChildren().addAll(lblPositions, position); + HBox hBox2 = new HBox(); + hBox2.setSpacing(15); + hBox2.getChildren().addAll(lblAttack, attackBtn); + HBox hBox3 = new HBox(); + hBox3.setSpacing(15); + hBox3.getChildren().addAll(lblFlipSummon, flipBtn); + HBox hBox4 = new HBox(); + hBox4.setSpacing(60); + hBox4.getChildren().addAll(back,addToGraveYard,saveChanges); + VBox vboxLeft = new VBox(); + vboxLeft.getChildren().addAll(hBox1,hBox2,hBox3,tributeBtn); + VBox vboxRight = new VBox(); + vboxLeft.setSpacing(40); + vboxRight.getChildren().addAll(imageView); + BorderPane borderPane = new BorderPane(); + borderPane.setRight(vboxRight); + borderPane.setLeft(vboxLeft); + borderPane.setBottom(hBox4); + return borderPane; } - //select & deselect - public void selectCard(Matcher matcher) { - String restOfCommand = matcher.group(1); - String[] temp = restOfCommand.split(" "); - String[] brokenCommand = new String[5]; - int counter = 0; - for (int i = 0; i < temp.length; ++i) { - if (temp[i].length() > 0) { - brokenCommand[counter] = temp[i]; - counter += 1; - } - } - if (brokenCommand[0].equals("--monster")) { - if (Integer.parseInt(brokenCommand[1]) < 1 || Integer.parseInt(brokenCommand[1]) > 5) - UserInterface.printResponse("invalid selection"); - else if (turn.field.monsterZone.get(Integer.parseInt(brokenCommand[1]) - 1) == null) - UserInterface.printResponse("no card found in the given position"); - else { - selectedCard = turn.field.monsterZone.get(Integer.parseInt(brokenCommand[1]) - 1); - UserInterface.printResponse("card selected"); - } - } else if (brokenCommand[0].equals("--spell")) { - if (Integer.parseInt(brokenCommand[1]) < 1 || Integer.parseInt(brokenCommand[1]) > 5) - UserInterface.printResponse("invalid selection"); - else if (turn.field.spellTrapZone.get(Integer.parseInt(brokenCommand[1]) - 1) == null) - UserInterface.printResponse("no card found in the given position"); - else { - selectedCard = turn.field.spellTrapZone.get(Integer.parseInt(brokenCommand[1]) - 1); - UserInterface.printResponse("card selected"); - } - } else if (brokenCommand[0].equals("--field")) { - if (turn.field.fieldZone == null) - UserInterface.printResponse("no card found in the given position"); - else - selectedCard = turn.field.fieldZone; - } else if (brokenCommand[0].equals("--hand")) { - if (Integer.parseInt(brokenCommand[1]) < 1 || Integer.parseInt(brokenCommand[1]) > turn.field.hand.size()) - UserInterface.printResponse("invalid selection"); - else if (turn.field.hand.get(Integer.parseInt(brokenCommand[1]) - 1) == null) - UserInterface.printResponse("no card found in the given position"); - else { - selectedCard = turn.field.hand.get(Integer.parseInt(brokenCommand[1]) - 1); - UserInterface.printResponse("card selected"); + private void saveChanges(Button saveChanges, ChoiceBox position) { + saveChanges.setOnMouseClicked(e->{ + if (position.getValue().equals("Attack")) { + if (!turn.field.monsterZone.contains(selectedCard)) + UserInterface.printResponse("you can’t change this card position"); + else if (!(phase == Phase.MAIN1_PHASE || phase == Phase.MAIN2_PHASE)) + UserInterface.printResponse("you can’t do this action in this phase"); + else if (selectedCard.getCardsFace() == FaceUp.ATTACK) + UserInterface.printResponse("this card is already in the wanted position"); + else if (selectedCard.getSetChanged()) + UserInterface.printResponse("you already changed this card position in this turn"); + else { + selectedCard.setSetChanged(true); + selectedCard.setCardsFace(FaceUp.ATTACK); + UserInterface.printResponse("monster card position changed successfully"); + selectedCard = null; + } + } else if (position.getValue().equals("Defence")) { + if (!turn.field.monsterZone.contains(selectedCard)) + UserInterface.printResponse("you can’t change this card position"); + else if (!(phase == Phase.MAIN1_PHASE || phase == Phase.MAIN2_PHASE)) + UserInterface.printResponse("you can’t do this action in this phase"); + else if (selectedCard.getCardsFace() != FaceUp.ATTACK) + UserInterface.printResponse("this card is already in the wanted position"); + else if (selectedCard.getSetChanged()) + UserInterface.printResponse("you already changed this card position in this turn"); + else { + selectedCard.setSetChanged(true); + selectedCard.setCardsFace(FaceUp.DEFENSE_FRONT); + UserInterface.printResponse("monster card position changed successfully"); + selectedCard = null; + } } - } else { - UserInterface.printResponse("invalid selection"); - } + game.addChanges(); + }); } - public void selectOpponentCard(Matcher matcher) { - String restOfCommand = matcher.group(1); - String[] temp = restOfCommand.split(" "); - String[] breakedCommand = new String[5]; + + public void drawLines (double x, double y){ int counter = 0; - for (int i = 0; i < temp.length; ++i) { - if (temp[i].length() > 0) { - breakedCommand[counter] = temp[i]; + for (int i = 0; i<5; ++i){ + if (opponent.field.monsterZone.get(i) != null){ counter += 1; + if (i == 4){ + game.getMainGraphic().setStroke(Color.GOLD); + game.getMainGraphic().setLineWidth(5); + game.getMainGraphic().strokeLine(342-226, 325-114, x-226, y-114); + } + if (i == 3){ + game.getMainGraphic().setStroke(Color.GOLD); + game.getMainGraphic().setLineWidth(5); + game.getMainGraphic().strokeLine(409-226, 325-114, x-226, y-114); + } + if (i == 2){ + game.getMainGraphic().setStroke(Color.GOLD); + game.getMainGraphic().setLineWidth(5); + game.getMainGraphic().strokeLine(477-226, 325-114, x-226, y-114); + } + if (i == 1){ + game.getMainGraphic().setStroke(Color.GOLD); + game.getMainGraphic().setLineWidth(5); + game.getMainGraphic().strokeLine(546-226, 325-114, x-226, y-114); + } + if (i == 0){ + game.getMainGraphic().setStroke(Color.GOLD); + game.getMainGraphic().setLineWidth(5); + game.getMainGraphic().strokeLine(614-226, 325-114, x-226, y-114); + } } } - if (breakedCommand[0].equals("--monster")) { - if (Integer.parseInt(breakedCommand[1]) < 1 || Integer.parseInt(breakedCommand[1]) > 5) - UserInterface.printResponse("invalid selection"); - else if (opponent.field.monsterZone.get(Integer.parseInt(breakedCommand[1]) - 1) == null) - UserInterface.printResponse("no card found in the given position"); - else { - selectedCard = opponent.field.monsterZone.get(Integer.parseInt(breakedCommand[1]) - 1); - UserInterface.printResponse("card selected"); - } - } else if (breakedCommand[0].equals("--spell")) { - if (Integer.parseInt(breakedCommand[1]) < 1 || Integer.parseInt(breakedCommand[1]) > 5) - UserInterface.printResponse("invalid selection"); - else if (opponent.field.spellTrapZone.get(Integer.parseInt(breakedCommand[1]) - 1) == null) - UserInterface.printResponse("no card found in the given position"); - else { - selectedCard = opponent.field.spellTrapZone.get(Integer.parseInt(breakedCommand[1]) - 1); - UserInterface.printResponse("card selected"); - } - } else if (breakedCommand[0].equals("--field")) { - if (opponent.field.fieldZone == null) - UserInterface.printResponse("no card found in the given position"); - else - selectedCard = opponent.field.fieldZone; - } else { - UserInterface.printResponse("invalid selection"); - } - } - public void deselectCard() { - if (Objects.isNull(selectedCard)) UserInterface.printResponse("no card is selected yet"); - else { - UserInterface.printResponse("card deselected"); - selectedCard = null; + if (counter == 0){ + game.getMainGraphic().setStroke(Color.GOLD); + game.getMainGraphic().setLineWidth(5); + game.getMainGraphic().strokeLine(473-226, 134-114, x-226, y-114); } } + //end phase & turn public void nextPhase() { // to active all needed spells @@ -357,7 +469,7 @@ public void nextPhase() { selectedCard = null; if (phase == Phase.DRAW_PHASE) phase = Phase.STANDBY_PHASE; - else if (phase == Phase.STANDBY_PHASE) phase = Phase.MAIN1_PHASE; + else if (phase == Phase.STANDBY_PHASE)phase = Phase.MAIN1_PHASE; else if (phase == Phase.MAIN1_PHASE) phase = Phase.BATTLE_PHASE; else if (phase == Phase.BATTLE_PHASE) phase = Phase.MAIN2_PHASE; else if (phase == Phase.MAIN2_PHASE) phase = Phase.END_TURN; @@ -377,7 +489,12 @@ public void changeTurn() { //timer increase changedTurnTime++; isTurnChanged = true; - if (opponent.getName().equals("admin")) { + if (opponent.getName().equals("Game")) { + if (opponent.field.deck.size() > 0) { + if (changedTurnTime >= 2 && turn.field.hand.size()<6) { + addCardToPlayersHands(opponent,opponent.field.hand.size()); + } + } else winner = turn; ((AI) opponent).runAi(this); } else { Duelist temp; @@ -388,13 +505,12 @@ public void changeTurn() { } //summon - public void summon() { + public void summon(int position) { //checking is a card selected or not if (Objects.isNull(selectedCard)) UserInterface.printResponse("no card is selected yet"); //checking that if we have monster - else if (!turn.field.hand.contains(selectedCard) - || !(selectedCard.getCardsType() == Type.MONSTER)) + else if (!turn.field.hand.contains(selectedCard) || !(selectedCard.getCardsType() == Type.MONSTER)) UserInterface.printResponse("you cant summon this card"); else { //loading the monster from selected card @@ -409,34 +525,37 @@ else if (getSizeOfMonsterZone() == 5) else if (turn.hasPutMonster) UserInterface.printResponse("you already summoned/set on this turn"); //exception for King Barbaros - else if (monster.getName().equals("Beast King Barbaros")) - summonKingBarbaros(monster); - //exception for gate guardian - else if (monster.getName().equals("Gate Guardian")) - summonOrSetGateGuardian("summoned successfully"); - - else if (monster.getName().equals("Command Knight")) - summonOrFlipSummonCommandKnight("summoned successfully"); - //summon level 5 or 6 monsters + else if (monster.getName().equals("Beast King Barbaros")) { + summonKingBarbaros(monster, position); + } + //exception for gate guardian + else if (monster.getName().equals("Gate Guardian")) { + summonOrSetGateGuardian("summoned successfully", position); + } + else if (monster.getName().equals("Command Knight")) { + summonOrFlipSummonCommandKnight("summoned successfully", position); + } + //exception for ritual monsters + else if (monster.getName().equals("Crab Turtle") || monster.getName().equals("Skull Guardian")){ + UserInterface.printResponse("You can't summon this card in this way because this is a ritual card."); + } + //summon level 5 or 6 monsters else if (monster.getLevel() == 5 || monster.getLevel() == 6) { - summonLevel6Or5("summoned successfully"); + summonLevel6Or5("summoned successfully",position); selectedCard = null; } //summon level 7 , 8 monsters else if (monster.getLevel() == 7 || monster.getLevel() == 8) { - summonLevel8Or7(monster, "summoned successfully"); + summonLevel8Or7(monster, "summoned successfully",position); selectedCard = null; } //normal summon else if (monster.getLevel() <= 4) { - summonedMonster("summoned successfully"); - //check that monster put - turn.hasPutMonster = true; - selectedCard = null; + summonedMonster("summoned successfully",position); } } } - private void summonKingBarbaros(Monster monster) { + private void summonKingBarbaros(Monster monster,int position) { String command; UserInterface.printResponse(""" you can summon this card without tribute two monster by normal summon @@ -451,7 +570,7 @@ private void summonKingBarbaros(Monster monster) { command = UserInterface.getUserInput(); if (command.equals("Y")) { getThreeMonsterForTribute(); - } else if (command.equals("N")) summonLevel8Or7(monster, "summoned successfully"); + } else if (command.equals("N")) summonLevel8Or7(monster, "summoned successfully",position); else UserInterface.printResponse(Responses.INVALID_COMMAND); } else UserInterface.printResponse(Responses.INVALID_COMMAND); @@ -459,26 +578,28 @@ private void summonKingBarbaros(Monster monster) { private void getThreeMonsterForTribute() { if (getSizeOfMonsterZone() < 3) UserInterface.printResponse("not enough monster"); else { - Monster monsterForTribute1, monsterForTribute2, monsterForTribute3; - UserInterface.printResponse("please select there card to tribute!"); - UserInterface.printResponse("please select the first one"); - monsterForTribute1 = tributeOneMonster(); - UserInterface.printResponse("please select the next one"); - monsterForTribute2 = tributeOneMonster(); - UserInterface.printResponse("please select the next one"); - monsterForTribute3 = tributeOneMonster(); - //checking is error happened or not - if (Objects.isNull(monsterForTribute1) || Objects.isNull(monsterForTribute2) - || Objects.isNull(monsterForTribute3)) - UserInterface.printResponse("no Valid monster has inputted"); - else { - monsterForTribute1.removeMonster(this); - monsterForTribute2.removeMonster(this); - monsterForTribute3.removeMonster(this); + Monster monsterForTribute1 = null, monsterForTribute2 = null, monsterForTribute3 = null; + if(tributeCards.size() >= 3){ + monsterForTribute1 = (Monster)tributeCards.get(0); + monsterForTribute2 = (Monster)tributeCards.get(1); + monsterForTribute3 = (Monster)tributeCards.get(2); + tributeCards.clear(); + //checking is error happened or not + if (Objects.isNull(monsterForTribute1) || Objects.isNull(monsterForTribute2) + || Objects.isNull(monsterForTribute3)) + UserInterface.printResponse("no Valid monster has inputted"); + else { + monsterForTribute1.removeMonster(this); + monsterForTribute2.removeMonster(this); + monsterForTribute3.removeMonster(this); + } } + else + UserInterface.printResponse("please select three monster for tribute"); + } } - public void summonOrSetGateGuardian(String message) { + public void summonOrSetGateGuardian(String message,int position) { int counter = 0; for (int i = 0; i < 5; ++i) if (turn.field.monsterZone.get(i) != null) @@ -500,20 +621,22 @@ public void summonOrSetGateGuardian(String message) { monster2.removeMonster(this); monster3.removeMonster(this); - for (int i = 0; i < 5; ++i) - if (turn.field.monsterZone.get(i) == null) { - turn.field.monsterZone.set(i, selectedCard); - turn.field.hand.remove(selectedCard); - selectedCard.setIsSetThisTurn(true); - turn.hasPutMonster = true; - if (message.equals("summon successfully")) - selectedCard.setCardsFace(FaceUp.ATTACK); - else - selectedCard.setCardsFace(FaceUp.DEFENSE_BACK); - selectedCard = null; - UserInterface.printResponse(message); - break; - } + + if (turn.field.monsterZone.get(position) == null) { + turn.field.monsterZone.set(position, selectedCard); + turn.field.hand.remove(selectedCard); + selectedCard.setIsSetThisTurn(true); + turn.hasPutMonster = true; + if (message.equals("summon successfully")) + selectedCard.setCardsFace(FaceUp.ATTACK); + else + selectedCard.setCardsFace(FaceUp.DEFENSE_BACK); + selectedCard = null; + UserInterface.printResponse(message); + + } + else + UserInterface.printResponse("place is full!"); } } public Monster getMonsterForTributeForGateGuardian() { @@ -543,7 +666,7 @@ public Monster getMonsterForTributeForGateGuardian() { } return null; } - public void summonOrFlipSummonCommandKnight(String message) { + public void summonOrFlipSummonCommandKnight(String message,int position) { CommandKnight commandKnight = (CommandKnight) selectedCard; for (int i = 0; i < 5; ++i) { @@ -559,75 +682,76 @@ public void summonOrFlipSummonCommandKnight(String message) { } } - if (message.equals("summon successfully")) { - for (int i = 0; i < 5; ++i) - if (turn.field.monsterZone.get(i) == null) { - turn.field.monsterZone.set(i, selectedCard); - turn.field.hand.remove(selectedCard); - selectedCard.setIsSetThisTurn(true); - turn.hasPutMonster = true; - selectedCard.setCardsFace(FaceUp.ATTACK); - selectedCard = null; - UserInterface.printResponse(message); - break; - } + if (message.equals("summoned successfully")) { + + if (turn.field.monsterZone.get(position) == null) { + turn.field.monsterZone.set(position, commandKnight); + turn.field.hand.remove(commandKnight); + commandKnight.setIsSetThisTurn(true); + turn.hasPutMonster = true; + commandKnight.setCardsFace(FaceUp.ATTACK); + selectedCard = null; + UserInterface.printResponse(message); + } + else + UserInterface.printResponse("place is full!"); } else { selectedCard.setCardsFace(FaceUp.ATTACK); UserInterface.printResponse(message); } } - private void summonLevel8Or7(Monster monster, String message) { + private void summonLevel8Or7(Monster monster, String message,int position) { //checking if can tribute happened if (getSizeOfMonsterZone() < 2) UserInterface.printResponse("there are not enough cards for tribute"); else { - Monster monsterForTribute1, monsterForTribute2; - UserInterface.printResponse("please select two card to tribute!"); - UserInterface.printResponse("please select the first one"); - monsterForTribute1 = tributeOneMonster(); - UserInterface.printResponse("please select the next one"); - monsterForTribute2 = tributeOneMonster(); - //checking is error happened or not - if (Objects.isNull(monsterForTribute1) || Objects.isNull(monsterForTribute2)) - return; - //checking the levels is enough or not - assert false; - if (monsterForTribute1.getLevel() + monsterForTribute2.getLevel() < monster.getLevel() && !message.equals("set successfully")) - UserInterface.printResponse("selected monster levels don`t match with ritual monster"); - else { - moveMonsterToGraveYard(monsterForTribute1); - moveMonsterToGraveYard(monsterForTribute2); - //summon - summonedMonster(message); - //check that monster put - turn.hasPutMonster = true; + Monster monsterForTribute1 = null, monsterForTribute2 = null; + if(tributeCards.size() >= 2 ){ + monsterForTribute1 = (Monster)tributeCards.get(0); + monsterForTribute2 = (Monster)tributeCards.get(1); + tributeCards.clear(); + //checking is error happened or not + if (Objects.isNull(monsterForTribute1) || Objects.isNull(monsterForTribute2)) + return; + //checking the levels is enough or not + assert false; + if (monsterForTribute1.getLevel() + monsterForTribute2.getLevel() < monster.getLevel() && !message.equals("set successfully")) + UserInterface.printResponse("selected monster levels don`t match with ritual monster"); + else { + monsterForTribute1.removeMonster(this); + monsterForTribute2.removeMonster(this); + //summon + summonedMonster(message,position); + //check that monster put + turn.hasPutMonster = true; + } } + else + UserInterface.printResponse("please select two card for tribute"); } } - private void moveMonsterToGraveYard(Monster monsterForTribute1) { - monsterForTribute1.removeMonster(this); - } - private void summonLevel6Or5(String message) { + + private void summonLevel6Or5(String message,int position) { //get tribute Monster Monster monsterForTribute = null; //checking if can tribute happened if (turn.field.monsterZone.isEmpty()) UserInterface.printResponse("there are not enough cards for tribute"); else { - while (Objects.isNull(monsterForTribute)) { - UserInterface.printResponse(""" - please select one card to tribute!\s - by entering the address by this way\s - 5 | 3 | 1 | 2 | 4"""); - monsterForTribute = tributeOneMonster(); + if(tributeCards.size()>=1){ + monsterForTribute = (Monster) tributeCards.get(0); + tributeCards.clear(); + monsterForTribute.removeMonster(this); + //summon + summonedMonster(message,position); + //check monster put + turn.hasPutMonster = true; } - moveMonsterToGraveYard(monsterForTribute); - //summon - summonedMonster(message); - //check monster put - turn.hasPutMonster = true; + else + UserInterface.printResponse("please select one card for tribute"); + } } - private void summonedMonster(String message) { + private void summonedMonster(String message,int position) { //set turn put the monster turn.hasPutMonster = true; //change FaceUp @@ -639,28 +763,15 @@ private void summonedMonster(String message) { else selectedCard.setCardsFace(FaceUp.DEFENSE_BACK); //putting card in last monster zone - turn.field.monsterZone.set(getSizeOfMonsterZone(), selectedCard); + turn.field.monsterZone.set(position, selectedCard); //delete monster from hand turn.field.hand.remove(selectedCard); UserInterface.printResponse(message); } - private Monster tributeOneMonster() { - //selecting card to tribute - String command = UserInterface.getUserInput(); - //getting card address - Matcher matcher = Regex.getMatcher(command, Regex.select); - - if (matcher.find()) { - //get monster - Monster monsterForTribute = (Monster) turn.field.monsterZone.get(getIndex(Integer.parseInt(matcher.group(1)))); - //checking not empty - if (Objects.isNull(monsterForTribute)) - UserInterface.printResponse("no card found in the given position"); - //send tribute monster back - return monsterForTribute; - } else { - UserInterface.printResponse(Responses.INVALID_CARD_SELECTION_ADDRESS); - return null; + private void tributeOneMonster() { + if(tributeCard!=null) { + tributeCards.add(tributeCard); + tributeCard = null; } } public int getSizeOfMonsterZone() { @@ -676,8 +787,26 @@ public int getSizeOfSpellAndTrapZone() { return count; } public void specialSummon(Monster monster) { - selectedCard = monster; - summon(); + if (turn.field.graveYard.contains(monster)){ + monster.setCardsFace(FaceUp.ATTACK); + turn.field.graveYard.remove(monster); + for (int i = 0; i<5; ++i){ + if (turn.field.monsterZone.get(i) == null) { + turn.field.monsterZone.set(i, monster); + break; + } + } + } + else if (opponent.field.graveYard.contains(monster)){ + monster.setCardsFace(FaceUp.ATTACK); + opponent.field.graveYard.remove(monster); + for (int i = 0; i<5; ++i){ + if (turn.field.monsterZone.get(i) == null) { + turn.field.monsterZone.set(i, monster); + break; + } + } + } } public void flipSummon() { if (Objects.isNull(selectedCard)) UserInterface.printResponse(Responses.NO_CARD_SELECTED_ERROR); @@ -691,7 +820,7 @@ else if (selectedCard.getSetChanged() || selectedCard.getCardsFace() != FaceUp.D if (selectedCard.getName().equals("Man-Eater Bug")) { flipSummonForManEaterBug(); } else if (selectedCard.getName().equals("Command Knight")) - summonOrFlipSummonCommandKnight("flip summoned successfully"); + summonOrFlipSummonCommandKnight("flip summoned successfully",game.dragPosition); else { selectedCard.setCardsFace(FaceUp.ATTACK); UserInterface.printResponse("flip summoned successfully"); @@ -739,24 +868,62 @@ public void flipSummonForManEaterBug() { selectedCard = null; } } - public void ritualSummon() { + public String ritualSummon() { + int position = game.dragPosition; String command; //getting the ritual monster in hand if exist Monster ritualMonster = getRitualMonsterInHand(); //getting the sum of levels in monster zone int sumOfLevels = getSumOfLevelsInZone(); - if (Objects.isNull(ritualMonster) || sumOfLevels < 7) + if (Objects.isNull(ritualMonster) || sumOfLevels < 7) { UserInterface.printResponse("there is no way you could ritual summon a monster"); + return "there is no way you could ritual summon a monster"; + } else { //checking not input another command isRitualSummoned = true; - //get input command - command = UserInterface.getUserInput(); - //force user to say summon - while (!command.equals("summon")) - UserInterface.printResponse("you should ritual summon right now"); - summonLevel8Or7(ritualMonster, "summoned successfully"); + Monster monsterForTribute1 = null, monsterForTribute2 = null; + //for tribute + if(tributeCards.size() >= 2 ){ + monsterForTribute1 = (Monster)tributeCards.get(0); + monsterForTribute2 = (Monster)tributeCards.get(1); + tributeCards.clear(); + //checking is error happened or not + if (Objects.isNull(monsterForTribute1) || Objects.isNull(monsterForTribute2)) + return "there is no way"; + //checking the levels is enough or not + assert false; + monsterForTribute1.removeMonster(this); + monsterForTribute2.removeMonster(this); + if (turn.field.hand.contains(selectedCard)){ + turn.field.graveYard.add(selectedCard); + turn.field.hand.remove(selectedCard); + } + else { + ((AdvancedRitualArt) selectedCard).removeSpellOrTrap(this); + } + //check that monster put + turn.hasPutMonster = true; + } + else { + UserInterface.printResponse("please select cards for tribute"); + return "there is no way"; + } + //end of for tribute + + for (int i = 0; i<5; ++i){ + if (turn.field.monsterZone.get(i) == null){ + turn.field.hand.remove(ritualMonster); + turn.field.monsterZone.set(i, ritualMonster); + isRitualSummoned = false; + turn.hasPutMonster = true; + ritualMonster.setIsSetThisTurn(true); + ritualMonster.setCardsFace(FaceUp.ATTACK); + break; + } + } + return "summoned successfully"; } } private Monster getRitualMonsterInHand() { @@ -770,12 +937,13 @@ private Monster getRitualMonsterInHand() { private int getSumOfLevelsInZone() { int sum = 0; for (Card card : turn.field.monsterZone) { - sum += ((Monster) card).getLevel(); + if (card != null) + sum += ((Monster) card).getLevel(); } return sum; } - public void set() { + public void set(int position) { if (selectedCard == null) UserInterface.printResponse("no card is selected yet"); else if (!turn.field.hand.contains(selectedCard)) UserInterface.printResponse("you can't set this card"); @@ -788,26 +956,30 @@ else if (selectedCard.getCardsType() == Type.MONSTER) { else if (turn.hasPutMonster) UserInterface.printResponse("you already summoned/set on this turn"); else if (((Monster) selectedCard).getLevel() == 5 || ((Monster) selectedCard).getLevel() == 6) { - summonLevel6Or5("set successfully"); + summonLevel6Or5("set successfully",position); selectedCard = null; } else if (((Monster) selectedCard).getLevel() == 7 || ((Monster) selectedCard).getLevel() == 8) { - summonLevel8Or7((Monster) selectedCard, "set successfully"); + summonLevel8Or7((Monster) selectedCard, "set successfully",position); selectedCard = null; } else if (selectedCard.getName().equals("Gate Guardian")) { - summonOrSetGateGuardian("set successfully"); - } else { + summonOrSetGateGuardian("set successfully",position); + } + //exception for ritual monsters + else if (selectedCard.getName().equals("Crab Turtle") || selectedCard.getName().equals("Skull Guardian")){ + UserInterface.printResponse("You can't set this card in this way because this is a ritual card."); + } + else { UserInterface.printResponse("set successfully"); - for (int i = 0; i < 5; ++i) { - if (turn.field.monsterZone.get(i) == null) { - turn.field.monsterZone.set(i, selectedCard); - selectedCard.setIsSetThisTurn(true); - selectedCard.setCardsFace(FaceUp.DEFENSE_BACK); - selectedCard.setCardsLocation(Location.MONSTER_AREA); - turn.field.hand.remove(selectedCard); - selectedCard = null; - break; - } + if (turn.field.monsterZone.get(position) == null) { + turn.field.monsterZone.set(position, selectedCard); + selectedCard.setIsSetThisTurn(true); + selectedCard.setCardsFace(FaceUp.DEFENSE_BACK); + selectedCard.setCardsLocation(Location.MONSTER_AREA); + turn.field.hand.remove(selectedCard); + selectedCard = null; } + else + UserInterface.printResponse("place is full!"); turn.hasPutMonster = true; } } else if (selectedCard.getCardsType() == Type.SPELL || selectedCard.getCardsType() == Type.TRAP) { @@ -818,57 +990,18 @@ else if (((Monster) selectedCard).getLevel() == 5 || ((Monster) selectedCard).ge UserInterface.printResponse("spell card zone is full"); else { UserInterface.printResponse("set successfully"); - for (int i = 0; i < 5; ++i) { - if (turn.field.spellTrapZone.get(i) == null) { - turn.field.spellTrapZone.set(i, selectedCard); - selectedCard.setIsSetThisTurn(true); - selectedCard.setCardsFace(FaceUp.DEFENSE_BACK); - selectedCard.setCardsLocation(Location.SPELL_AREA); - turn.field.hand.remove(selectedCard); - selectedCard = null; - break; - } + if (turn.field.spellTrapZone.get(position) == null) { + turn.field.spellTrapZone.set(position, selectedCard); + selectedCard.setIsSetThisTurn(true); + selectedCard.setCardsFace(FaceUp.DEFENSE_BACK); + selectedCard.setCardsLocation(Location.SPELL_AREA); + turn.field.hand.remove(selectedCard); + selectedCard = null; } } } } - public void setPosition(Matcher matcher) { - if (matcher.group(1).equals("attack")) { - if (selectedCard == null) UserInterface.printResponse("no card is selected yet"); - else if (!turn.field.monsterZone.contains(selectedCard)) - UserInterface.printResponse("you can’t change this card position"); - else if (!(phase == Phase.MAIN1_PHASE || phase == Phase.MAIN2_PHASE)) - UserInterface.printResponse("you can’t do this action in this phase"); - else if (selectedCard.getCardsFace() == FaceUp.ATTACK) - UserInterface.printResponse("this card is already in the wanted position"); - else if (selectedCard.getSetChanged()) - UserInterface.printResponse("you already changed this card position in this turn"); - else { - selectedCard.setSetChanged(true); - selectedCard.setCardsFace(FaceUp.ATTACK); - UserInterface.printResponse("monster card position changed successfully"); - selectedCard = null; - } - } else if (matcher.group(1).equals("defence")) { - if (selectedCard == null) UserInterface.printResponse("no card is selected yet"); - else if (!turn.field.monsterZone.contains(selectedCard)) - UserInterface.printResponse("you can’t change this card position"); - else if (!(phase == Phase.MAIN1_PHASE || phase == Phase.MAIN2_PHASE)) - UserInterface.printResponse("you can’t do this action in this phase"); - else if (selectedCard.getCardsFace() != FaceUp.ATTACK) - UserInterface.printResponse("this card is already in the wanted position"); - else if (selectedCard.getSetChanged()) - UserInterface.printResponse("you already changed this card position in this turn"); - else { - selectedCard.setSetChanged(true); - selectedCard.setCardsFace(FaceUp.DEFENSE_FRONT); - UserInterface.printResponse("monster card position changed successfully"); - selectedCard = null; - } - } - } - //attack public void attack(Matcher matcher) { int monsterNum = Integer.parseInt(matcher.group(1)); @@ -903,16 +1036,17 @@ else if (!turn.field.monsterZone.contains(selectedCard)) selectedCard.setISAttackedThisTurn(true); Monster monster = (Monster) selectedCard; opponent.LP = opponent.LP - monster.getAttack(); - System.out.println("your opponent receives " + monster.getAttack() + " battle damage"); + UserInterface.printResponse("your opponent receives " + monster.getAttack() + " battle damage"); selectedCard = null; } } public int getIndex(int num) { + //1 in index 2 if (num == 1) return 2; - else if (num == 2) return 1; - else if (num == 3) return 3; - else if (num == 4) return 0; - else if (num == 5) return 4; + else if (num == 2) return 3; + else if (num == 3) return 1; + else if (num == 4) return 4; + else if (num == 5) return 0; else return -1; } public int getIndexOfSelectedCardInMonsterZone() { @@ -927,7 +1061,7 @@ public boolean isOpponentEmptyOfMonsters() { } //activeSpell - public void activeSpell() { + public void activeSpell(String how) { SpellAndTrap spellAndTrap; if (Objects.isNull(selectedCard)) UserInterface.printResponse(Responses.NO_CARD_SELECTED_ERROR); else if (!selectedCard.getCardsType().equals(Type.SPELL)) @@ -943,9 +1077,18 @@ else if (getSizeOfSpellAndTrapZone() == 5) else if (!canWeActiveSpell()) UserInterface.printResponse("preparation of this spell are not done yet"); else { - activeSpellAndTraps.add(spellAndTrap); - spellAndTrap.action(this); - turn.field.spellTrapZone.set(getSizeOfSpellAndTrapZone() + 1, selectedCard); + if (spellAndTrap.getName().equals("Advanced Ritual Art")){ + String response = ritualSummon(); + } + if (spellAndTrap.getName().equals("Monster Reborn")){ + spellAndTrap.action(this); + } + else { + activeSpellAndTraps.add(spellAndTrap); + spellAndTrap.action(this); + if (how.equals("firstTime")) + turn.field.spellTrapZone.set(getSizeOfSpellAndTrapZone(), selectedCard); + } } } } @@ -971,45 +1114,76 @@ private boolean canWeActiveSpell() { } private boolean isOpponentActiveSpellOrTrap() { //change turn - UserInterface.printResponse("now it will be " + opponent.getName() + "’s turn"); + UserInterface.printResponse("Ask" + opponent.getName() + "if want to active spell"); changeTurn(); - showBattleField(); - UserInterface.printResponse("do you want to activate your trap or spell?" + "\n enter yes or no"); - String yesOrNo = UserInterface.getUserInput(); - //decide what to do - if (yesOrNo.equals("no")) { - UserInterface.printResponse("now it will be " + opponent.getName() + "’s turn"); + int dialogResult = JOptionPane.showConfirmDialog (null, "Would You Like to Active Spell or trap for Chain?","Make chain!",JOptionPane.YES_NO_OPTION); + if(dialogResult == JOptionPane.NO_OPTION){ + UserInterface.printResponse("turn will be back to " + opponent.getName()); changeTurn(); - showBattleField(); return true; - } else if (yesOrNo.equals("yes")) { - UserInterface.printResponse("enter number of Trap house : " + "or type \"cancel\" by numbering 5 | 3 | 1 | 2 | 4"); - while (true) { - //get user input - String input = UserInterface.getUserInput(); - if (input.equals("cancel")) break; - //get spell or trap - int num = Integer.parseInt(input); - SpellAndTrap spellAndTrap = (SpellAndTrap) turn.field.spellTrapZone.get(num); - //checking not null - if (Objects.isNull(spellAndTrap)) { - UserInterface.printResponse("try again"); - continue; - } - String trapName = spellAndTrap.getName(); - if (trapName.equals("Magic Cylinder") || trapName.equals("Mirror Force") || trapName.equals("Torrential Tribute")) { - turn.field.spellTrapZone.get(getIndex(num)).action(this); - turn.field.graveYard.add(turn.field.spellTrapZone.get(num)); - turn.field.spellTrapZone.set(getIndex(num), null); - UserInterface.printResponse("Trap activated"); - } else UserInterface.printResponse("it’s not your turn to play this kind of moves\n try again!"); - //make chain - if (canWeActiveSpell()) - spellAndTrap.action(this); - } + } + else { + UserInterface.printResponse("choose the spell or trap you want to active"); + MakeChainScene(turn); + changeTurn(); + game.addChanges(); } return false; } + + private void MakeChainScene(Duelist duelist) { + BorderPane root = new BorderPane(); + Button cancelBtn = new Button("Cancel"); + cancelBtn.setStyle("-fx-background-color: linear-gradient(#ff5400, #be1d00);" + + "-fx-background-radius: 30; -fx-background-insets: 0; -fx-text-fill: white;"); + cancelBtn.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + currStage.close(); + } + }); + cancelBtn.setAlignment(Pos.CENTER); + + HBox hBox = new HBox(cancelBtn); + hBox.setAlignment(Pos.CENTER); + + + javafx.scene.control.ScrollPane scrollPane = new ScrollPane(); + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.TOP_CENTER); + VBox vBox = new VBox(gridPane); + vBox.setAlignment(Pos.CENTER); + + ArrayList spellAndTrapCards = duelist.field.spellTrapZone; + + for (int i = 0; i{ + if(canWeActiveSpell()) + spellAndTrapCards.get(finalI).action(this); + }); + gridPane.add(imageView2, i%2, i/2); + } + } + scrollPane.setContent(vBox); + Label lblTitle = new Label("If you want to make chain Select one spell or trap to active it Or click cancel!"); + lblTitle.setAlignment(Pos.CENTER); + root.setTop(lblTitle); + root.setCenter(scrollPane); + Scene scene = new Scene(root,500,600); + subStage stage = new subStage("Chain",scene); + currStage = stage.getStage(); + } + private void phaseController() { int lastChangedTurn = 0; //checking just one time turn changed @@ -1027,8 +1201,12 @@ private void phaseController() { } } else { //action all spells based on which phase they want - for (SpellAndTrap spellAndTrap : activeSpellAndTraps) + for (SpellAndTrap spellAndTrap : activeSpellAndTraps) { + if(spellAndTrap.getName().equals("United We Stand") || spellAndTrap.getName().equals("Magnum Shield") || + spellAndTrap.getName().equals("Black Pendant") || spellAndTrap.getName().equals("Sword of Dark Destruction")) + continue; spellAndTrap.action(this); + } if (phase.equals(Phase.END_TURN)) lastChangedTurn = changedTurnTime; } @@ -1042,21 +1220,46 @@ private SpellAndTrap getSpellFromActiveSpells(String name) { } //cheats - private void forceAddedToHand(Matcher matcher) { - String cardName = matcher.group("cardName"); - turn.field.hand.add(Card.getCardByName(cardName)); + public void forceAddedToHand(String command) { + Pattern pattern = Pattern.compile("select --hand (.+)? --force"); + Matcher matcher = pattern.matcher(command); + boolean didAnyThingFound = false; + if (matcher.find()) { + String cardName = matcher.group(1); + for (int i = 0; i deck.getDeckName().equals(matcher.group(1))); - UserInterface.printResponse(Responses.DECK_DELETE_SUCCESS); + allDecks.removeIf(deck -> deck.getDeckName().equals(deckName)); + return "deck deleted successfully!"; } - else - UserInterface.printResponse(Responses.INVALID_COMMAND); + else return "invalid command"; } - private void setActive(Matcher matcher){ - String deckName = matcher.group(1); + public String setActive(String deckName){ for (Deck deck:allDecks){ if (deck.getDeckName().equals(deckName)){ currUser.setActiveDeck(deck); - UserInterface.printResponse(Responses.DECK_ACTIVE_SUCCESS); - return; + return "deck activated successfully!"; } } - UserInterface.printResponse(Responses.INVALID_COMMAND); + return "invalid command"; } - private void addCardToSide(Matcher matcher){ - String cardName = matcher.group(2) ,deckName = matcher.group(4); - - if(Deck.getDeckByName(deckName) == null ) UserInterface.printResponse("deck with name " + deckName + " does not exists"); - else if(numberOfCards(cardName,deckName)) UserInterface.printResponse("card with name " + cardName + " does not exists"); - else if(Objects.requireNonNull(Deck.getDeckByName(deckName)).sideDeck.size() == 15) UserInterface.printResponse("side deck is full"); - else if(Deck.getNumberOfCardsInWholeDeck(deckName , cardName) == 3) UserInterface.printResponse("there are already three cards with name " + cardName + " in deck " + deckName); + public String addCardToSide(String cardName, String deckName){ + if(Deck.getDeckByName(deckName) == null ) return "deck with name " + deckName + " does not exists"; + else if(numberOfCards(cardName,deckName)) return "card with name " + cardName + " does not exists"; + else if(Objects.requireNonNull(Deck.getDeckByName(deckName)).sideDeck.size() == 15) return "side deck is full"; + else if(Deck.getNumberOfCardsInWholeDeck(deckName , cardName) == 3) return "there are already three cards with name " + cardName + " in deck " + deckName; else{ Objects.requireNonNull(Deck.getDeckByName(deckName)).sideDeck.add(ShowCard.Cards(cardName)); - UserInterface.printResponse("card added to deck successfully"); + return "card added to deck successfully"; } } - private void addCard(Matcher matcher){ - String cardName = matcher.group(2) ,deckName = matcher.group(4); - - if(Deck.getDeckByName(deckName) == null ) UserInterface.printResponse("deck with name " + deckName + " does not exists"); - else if(numberOfCards(cardName,deckName)) UserInterface.printResponse("card with name " + cardName + " does not exists"); - else if(Objects.requireNonNull(Deck.getDeckByName(deckName)).mainDeck.size() == 60) UserInterface.printResponse("main deck is full"); - else if(Deck.getNumberOfCardsInWholeDeck(deckName , cardName) == 3) UserInterface.printResponse("there are already three cards with name " + cardName + " in deck " + deckName); + public String addCard(String cardName, String deckName){ + if(Deck.getDeckByName(deckName) == null ) return "deck with name " + deckName + " does not exists"; + else if(numberOfCards(cardName,deckName)) return "card with name " + cardName + " does not exists"; + else if(Objects.requireNonNull(Deck.getDeckByName(deckName)).mainDeck.size() == 60) return "main deck is full"; + else if(Deck.getNumberOfCardsInWholeDeck(deckName , cardName) == 3) return "there are already three cards with name " + cardName + " in deck " + deckName; else{ Objects.requireNonNull(Deck.getDeckByName(deckName)).mainDeck.add(ShowCard.Cards(cardName)); - UserInterface.printResponse("card added to deck successfully"); + return "card added to deck successfully"; } } - private void removeCardFromSide(Matcher matcher){ - String cardName = matcher.group(2) ,deckName = matcher.group(4); - - if(Deck.getDeckByName(deckName) == null ) UserInterface.printResponse("deck with " + deckName + "does not exists"); - else if(Deck.getNumberOfCardsInSideDeck(deckName , cardName) == 0) UserInterface.printResponse("card with name " + cardName + " does not exist in side deck"); + public String removeCardFromSide(String cardName, String deckName){ + if(Deck.getDeckByName(deckName) == null ) return "deck with " + deckName + "does not exists"; + else if(Deck.getNumberOfCardsInSideDeck(deckName , cardName) == 0) return "card with name " + cardName + " does not exist in side deck"; else{ for (Card card: Objects.requireNonNull(Deck.getDeckByName(deckName)).sideDeck) if(card.getName().equals(cardName)){ Objects.requireNonNull(Deck.getDeckByName(deckName)).sideDeck.remove(card); - UserInterface.printResponse("card removed from deck successfully"); - return; + return "card removed from side deck successfully"; } } + return "invalid command"; } - private void removeCard(Matcher matcher){ - String cardName = matcher.group(2) ,deckName = matcher.group(4); - - if(Deck.getDeckByName(deckName) == null ) UserInterface.printResponse("deck with " + deckName + "does not exists"); - else if(Deck.getNumberOfCardsInMainDeck(deckName , cardName) == 0) UserInterface.printResponse("card with name " + cardName + " does not exist in main deck"); + public String removeCard(String cardName, String deckName){ + if(Deck.getDeckByName(deckName) == null ) return "deck with " + deckName + "does not exists"; + else if(Deck.getNumberOfCardsInMainDeck(deckName , cardName) == 0) return "card with name " + cardName + " does not exist in main deck"; else{ for (Card card: Objects.requireNonNull(Deck.getDeckByName(deckName)).mainDeck) if(card.getName().equals(cardName)){ Objects.requireNonNull(Deck.getDeckByName(deckName)).mainDeck.remove(card); - UserInterface.printResponse("card removed from deck successfully"); - return; + return "card removed from main deck successfully"; } } + return "invalid command"; } private boolean numberOfCards(String cardName ,String deckName){ @@ -169,94 +110,4 @@ private boolean numberOfCards(String cardName ,String deckName){ return i == Deck.getNumberOfCardsInWholeDeck(deckName, cardName); } - - private void deckShowAll(){ - String activeDeckName = ""; - Deck activeDeck = currUser.activeDeck; - - UserInterface.printResponse("Decks:\nActive Deck:"); - if(activeDeck != null){ - if(Deck.isValid(activeDeck.getDeckName())) - UserInterface.printResponse(activeDeck.getDeckName() + ": " + activeDeck.mainDeck.size() + ", " + activeDeck.sideDeck.size() + ", " + "valid"); - else - UserInterface.printResponse(activeDeck.getDeckName() + ": " + activeDeck.mainDeck.size() + ", " + activeDeck.sideDeck.size() + ", " + "invalid"); - activeDeckName = activeDeck.getDeckName(); - } - UserInterface.printResponse("Other Decks:"); - ArrayList decks = new ArrayList<>(); - for (Deck deck: allDecks) - if(deck.getOwnerName().equals(currUser.getUsername()) && !deck.getDeckName().equals(activeDeckName)) - decks.add(deck); - - Comparator orderedDecks = Comparator.comparing(Deck::getDeckName); - - decks.sort(orderedDecks); - for (Deck deck: decks) - if(Deck.isValid(deck.getDeckName())) - UserInterface.printResponse(deck.getDeckName() + ": " + deck.mainDeck.size() + ", " + deck.sideDeck.size() + ", " + "valid"); - else - UserInterface.printResponse(deck.getDeckName() + ": " + deck.mainDeck.size() + ", " + deck.sideDeck.size() + ", " + "invalid"); - } - - private void showSideDeck(Matcher matcher){ - String deckName = matcher.group(2); - if(Deck.getDeckByName(deckName)==null) - UserInterface.printResponse("deck with name" + deckName + "does not exist"); - else { - UserInterface.printResponse("Deck: " + deckName + "\nSide deck:\nMonsters:"); - - ArrayList monsters = new ArrayList<>(); - for (Card card: Objects.requireNonNull(Deck.getDeckByName(deckName)).sideDeck) - if(card.getCardsType() == Type.MONSTER) monsters.add(card); - - Comparator orderedCards = Comparator.comparing(Card::getName); - - monsters.sort(orderedCards); - for (Card card : monsters) - UserInterface.printResponse(card.getName() + " : " + card.getDescription()); - - UserInterface.printResponse("Spell and Traps:"); - ArrayList spellAndTraps = new ArrayList<>(); - for (Card card: Objects.requireNonNull(Deck.getDeckByName(deckName)).sideDeck) - if(card.getCardsType() != Type.MONSTER) spellAndTraps.add(card); - - spellAndTraps.sort(orderedCards); - for (Card card : spellAndTraps) - UserInterface.printResponse(card.getName() + " : " + card.getDescription()); - } - } - - private void showDeck(Matcher matcher){ - String deckName = matcher.group(2); - if(Deck.getDeckByName(deckName)==null) - UserInterface.printResponse("deck with name " + deckName + " does not exist"); - else { - UserInterface.printResponse("Deck: " + deckName + "Main deck:\nMonsters:"); - - ArrayList monsters = new ArrayList<>(); - for (Card card: Objects.requireNonNull(Deck.getDeckByName(deckName)).mainDeck) - if(card.getCardsType() == Type.MONSTER) monsters.add(card); - - Comparator orderedCards = Comparator.comparing(Card::getName); - - monsters.sort(orderedCards); - for (Card card : monsters) - UserInterface.printResponse(card.getName() + " : " + card.getDescription()); - - UserInterface.printResponse("Spell and Traps:"); - ArrayList spellAndTraps = new ArrayList<>(); - for (Card card: Objects.requireNonNull(Deck.getDeckByName(deckName)).mainDeck) - if(card.getCardsType() != Type.MONSTER) spellAndTraps.add(card); - - spellAndTraps.sort(orderedCards); - for (Card card : spellAndTraps) - UserInterface.printResponse(card.getName() + " : " + card.getDescription()); - } - } - - private void deckShowCards(){ - Collections.sort(currUser.cardsBought); - for (String cardName : currUser.cardsBought) - UserInterface.printResponse(cardName + " : " + Card.allCards.get(cardName).getDescription()); - } } \ No newline at end of file diff --git a/src/main/java/controllers/menues/DuelMenu.java b/src/main/java/controllers/menues/DuelMenu.java deleted file mode 100644 index 88daa9e..0000000 --- a/src/main/java/controllers/menues/DuelMenu.java +++ /dev/null @@ -1,220 +0,0 @@ -package controllers.menues; - -import controllers.Battelfield.Battlefield; -import controllers.Database.DataBase; -import controllers.Menu; -import controllers.Regex; -import models.*; -import view.Responses; -import view.UserInterface; - -import java.util.Objects; -import java.util.regex.Matcher; - -import static controllers.ProgramController.currentMenu; - -public class DuelMenu { - - private static DuelMenu singleToneClass = null; - private User currUser; - public static DuelMenu getInstance (User currUser){ - if (singleToneClass == null) singleToneClass = new DuelMenu(currUser); - singleToneClass.currUser = currUser; - return singleToneClass; - } - - public DuelMenu(User currUser){ - this.currUser=currUser; - } - - public void runDuelMenu(){ - while (currentMenu == Menu.DUEL_MENU) { - - String command = UserInterface.getUserInput(); - Matcher matcher; - - if (Regex.getMatcher(command, Regex.menuShowCurrent).matches()) System.out.println(currentMenu); - else if (Regex.getMatcher(command, Regex.menuEnter).matches()) UserInterface.printResponse(Responses.NOT_POSSIBLE_NAVIGATION); - else if (Regex.getMatcher(command, Regex.menuExit).matches()) currentMenu = Menu.MAIN_MENU; - else if ((matcher = Regex.getMatcher(command, Regex.duelNewAi)).matches()) newDuelAi(matcher); - else if ((matcher = Regex.getMatcher(command, Regex.duelNew)).matches()) newDuel(matcher); - else UserInterface.printResponse(Responses.INVALID_COMMAND); - } - } - - private void newDuelAi(Matcher matcher){ - String round = matcher.group(1); - if(currUser.activeDeck == null) UserInterface.printResponse(currUser.getUsername() + " has no active deck"); - else if(!Deck.isValid(currUser.activeDeck.getDeckName())) UserInterface.printResponse(currUser.getUsername() + "'s deck is not valid"); - else if(!(round.equals("1") || round.equals("3"))) UserInterface.printResponse(Responses.NOT_SUPPORTED_ROUNDS); - else new Battlefield(new Duelist(currUser),new AI(User.getUserByUsername("admin"))); - } - - public void newDuel(Matcher matcher){ - - String duelistName = matcher.group(1) , round = matcher.group(2); - - if(User.getUserByUsername(duelistName) == null) UserInterface.printResponse("there is no player with this username"); - else if(duelistName.equals(currUser.getUsername())) UserInterface.printResponse("you can't play with yourself"); - else if(currUser.activeDeck == null) UserInterface.printResponse(currUser.getUsername() + " has no active deck"); - else if(Objects.requireNonNull(User.getUserByUsername(duelistName)).activeDeck == null) System.out.println(duelistName + " has no active deck"); - else if(!Deck.isValid(currUser.activeDeck.getDeckName())) UserInterface.printResponse(currUser.getUsername() + "'s deck is not valid"); - else if(!Deck.isValid(Objects.requireNonNull(User.getUserByUsername(duelistName)).activeDeck.getDeckName())) UserInterface.printResponse(duelistName + "'s deck is not valid"); - else if(!(round.equals("1") || round.equals("3"))) UserInterface.printResponse(Responses.NOT_SUPPORTED_ROUNDS); - else if(round.equals("1")) oneRoundDuel(duelistName); - else threeRoundDuel(duelistName); - } - - private void oneRoundDuel(String duelistName) { - int duelist1Wins = 0 , duelist2Wins = 0; - //round1 - Duelist duelist1 = new Duelist(currUser); - Duelist duelist2 = new Duelist(Objects.requireNonNull(User.getUserByUsername(duelistName))); - Battlefield battlefield = new Battlefield(duelist1, duelist2); - - //round1Finish - if(battlefield.getWinner().getName().equals(currUser.getUsername())) duelist1Wins++; - else duelist2Wins++; - UserInterface.printResponse(battlefield.getWinner().getName() + " won the game and the score is: " + duelist1Wins + " - " + duelist2Wins); - - //matchFinish - if(duelist1Wins == 1){ - UserInterface.printResponse(duelist1.getName() + " won the whole match with score: " + duelist1Wins + " - " + duelist2Wins); - duelist1.getUser().setScore(duelist1.getUser().getScore() + 1000); - duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 1000 + duelist1.LP); - duelist2.getUser().setMoney(duelist2.getUser().getMoney() + 100 ); - } - else { - UserInterface.printResponse(duelist2.getName() + " won the whole match with score: " + duelist1Wins + " - " + duelist2Wins); - duelist2.getUser().setScore(duelist2.getUser().getScore() + 1000); - duelist2.getUser().setMoney(duelist2.getUser().getMoney() + 1000 + duelist2.LP); - duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 100 ); - } - DataBase.saveTheUserList(User.getUsers()); - } - - private void threeRoundDuel(String duelistName) { - int duelist1Wins = 0 , duelist2Wins = 0; - - //round1 - Duelist duelist1 = new Duelist(currUser); - Duelist duelist2 = new Duelist(Objects.requireNonNull(User.getUserByUsername(duelistName))); - Battlefield battlefield = new Battlefield(duelist1, duelist2); - - //round1Finish - if(battlefield.getWinner().getName().equals(currUser.getUsername())) duelist1Wins++; - else duelist2Wins++; - UserInterface.printResponse(battlefield.getWinner().getName() + " won the game and the score is: " + duelist1Wins + " - " + duelist2Wins); - int round1Duelist1Lp = duelist1.LP, round1Duelist2Lp = duelist2.LP; - - //add card from side - transferPermission(duelistName); - - //round2 - duelist1 = new Duelist(currUser); - duelist2 = new Duelist(Objects.requireNonNull(User.getUserByUsername(duelistName))); - battlefield = new Battlefield(duelist1, duelist2); - - //round2Finish - if(battlefield.getWinner().getName().equals(currUser.getUsername())) duelist1Wins++; - else duelist2Wins++; - UserInterface.printResponse(battlefield.getWinner().getName() + " won the game and the score is: " + duelist1Wins + " - " + duelist2Wins); - int round2Duelist1Lp = duelist1.LP, round2Duelist2Lp = duelist2.LP; - if(round2Duelist1Lp < round1Duelist1Lp ) round2Duelist1Lp = round1Duelist1Lp; - if(round2Duelist2Lp < round1Duelist2Lp ) round2Duelist2Lp = round1Duelist2Lp; - - //checkMatchIsFinished - if(duelist1Wins == 2) { - finish2Round(duelist1Wins, duelist2Wins, duelist2, duelist1, round2Duelist1Lp); - return; - } - else if(duelist2Wins == 2){ - finish2Round(duelist1Wins, duelist2Wins, duelist1, duelist2, round2Duelist2Lp); - return; - } - - //add card from side - transferPermission(duelistName); - - //round3 - duelist1 = new Duelist(currUser); - duelist2 = new Duelist(Objects.requireNonNull(User.getUserByUsername(duelistName))); - battlefield = new Battlefield(duelist1, duelist2); - - //round3Finish - if(battlefield.getWinner().getName().equals(currUser.getUsername())) duelist1Wins++; - else duelist2Wins++; - UserInterface.printResponse(battlefield.getWinner().getName() + " won the game and the score is: " + duelist1Wins + " - " + duelist2Wins); - int round3Duelist1Lp = duelist1.LP, round3Duelist2Lp = duelist2.LP; - if(round3Duelist1Lp < round2Duelist1Lp ) round3Duelist1Lp = round2Duelist1Lp; - if(round3Duelist2Lp < round2Duelist2Lp ) round3Duelist2Lp = round2Duelist2Lp; - - //matchFinish - if(duelist1Wins == 2) { - UserInterface.printResponse(duelist1.getName() + " won the whole match with score: " + duelist1Wins + " - " + duelist2Wins); - duelist1.getUser().setScore(duelist1.getUser().getScore() + 3000); - duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 3000 + 3 * round3Duelist1Lp); - duelist2.getUser().setMoney(duelist2.getUser().getMoney() + 300 ); - } - else { - UserInterface.printResponse(duelist2.getName() + " won the whole match with score: " + duelist1Wins + " - " + duelist2Wins); - duelist2.getUser().setScore(duelist2.getUser().getScore() + 3000); - duelist2.getUser().setMoney(duelist2.getUser().getMoney() + 3000 + 3 * round3Duelist2Lp); - duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 300 ); - } - DataBase.saveTheUserList(User.getUsers()); - } - - private void transferPermission(String duelistName) { - UserInterface.printResponse("Hey " + currUser.getUsername() + "do you want to transfer card?"); - String yesOrNo = UserInterface.getUserInput(); - if(yesOrNo.equals("yes")) transferCard(currUser); - UserInterface.printResponse("Hey " + currUser.getUsername() + "do you want to transfer card?"); - yesOrNo = UserInterface.getUserInput(); - if(yesOrNo.equals("yes")) transferCard(Objects.requireNonNull(User.getUserByUsername(duelistName))); - } - - private void finish2Round(int duelist1Wins, int duelist2Wins, Duelist duelist1, Duelist duelist2, int round2Duelist2Lp) { - UserInterface.printResponse(duelist2.getName() + " won the whole match with score: " + duelist1Wins + " - " + duelist2Wins); - duelist2.getUser().setScore(duelist2.getUser().getScore() + 3000); - duelist2.getUser().setMoney(duelist2.getUser().getMoney() + 3000 + 3 * round2Duelist2Lp); - duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 300); - DataBase.saveTheUserList(User.getUsers()); - } - - private void transferCard(User user){ - UserInterface.printResponse("enter name of the card from side deck : "); - String sideName = UserInterface.getUserInput(); - boolean sideExist = false; - Card tempSide = null; - for (Card card: user.activeDeck.sideDeck) { - if(card.getName().equals(sideName)){ - tempSide = card; - user.activeDeck.sideDeck.remove(card); - sideExist = true; - } - } - if(!sideExist){ - UserInterface.printResponse("you don't have this card in your side deck"); - return; - } - - UserInterface.printResponse("enter name of the card from main deck : "); - String mainName = UserInterface.getUserInput(); - boolean mainExist = false; - Card tempMain = null; - for (Card card: user.activeDeck.mainDeck) { - if(card.getName().equals(mainName)){ - tempMain = card; - user.activeDeck.mainDeck.remove(card); - mainExist = true; - } - } - if(!mainExist){ - UserInterface.printResponse("you don't have this card in your main deck"); - return; - } - user.activeDeck.mainDeck.add(tempSide); - user.activeDeck.sideDeck.add(tempMain); - } -} diff --git a/src/main/java/controllers/menues/DuelMenuController.java b/src/main/java/controllers/menues/DuelMenuController.java new file mode 100644 index 0000000..7cf6149 --- /dev/null +++ b/src/main/java/controllers/menues/DuelMenuController.java @@ -0,0 +1,268 @@ +package controllers.menues; + +import controllers.Battelfield.Battlefield; +import controllers.Database.DataBase; +import controllers.Menu; +import controllers.ProgramController; +import controllers.Regex; +import models.*; +import view.Main; +import view.Responses; +import view.UserInterface; +import view.menus.ChangeMainAndSideCards; +import view.menus.DuelMenu; + +import javax.swing.*; +import java.util.Objects; +import java.util.regex.Matcher; + +import static controllers.ProgramController.currentMenu; + +public class DuelMenuController { + + private static DuelMenuController singleToneClass = null; + private User currUser; + public String duelistName; + public int currWins = 0 , notCurrWins = 0; + int round1currLp , round1notCurrLp; + int round2currLp , round2notCurrLp; + int round3currLp , round3notCurrLp; + + public static DuelMenuController getInstance (User currUser){ + if (singleToneClass == null) singleToneClass = new DuelMenuController(currUser); + singleToneClass.currUser = currUser; + return singleToneClass; + } + + public DuelMenuController(User currUser){ + this.currUser=currUser; + } + + public void runDuelMenu(){ + while (currentMenu == Menu.DUEL_MENU) { + + String command = UserInterface.getUserInput(); + Matcher matcher; + + if (Regex.getMatcher(command, Regex.menuShowCurrent).matches()) System.out.println(currentMenu); + else if (Regex.getMatcher(command, Regex.menuEnter).matches()) UserInterface.printResponse(Responses.NOT_POSSIBLE_NAVIGATION); + else if (Regex.getMatcher(command, Regex.menuExit).matches()) currentMenu = Menu.MAIN_MENU; + else if ((matcher = Regex.getMatcher(command, Regex.duelNewAi)).matches()) newDuelAi(matcher); + else if ((matcher = Regex.getMatcher(command, Regex.duelNew)).matches()) newDuel(matcher); + else UserInterface.printResponse(Responses.INVALID_COMMAND); + } + } + + private void newDuelAi(Matcher matcher){ + String round = matcher.group(1); + if(currUser.activeDeck == null) UserInterface.printResponse(currUser.getUsername() + " has no active deck"); + else if(!Deck.isValid(currUser.activeDeck.getDeckName())) UserInterface.printResponse(currUser.getUsername() + "'s deck is not valid"); + else if(!(round.equals("1") || round.equals("3"))) UserInterface.printResponse(Responses.NOT_SUPPORTED_ROUNDS); + else new Battlefield(new Duelist(currUser),new AI(User.getUserByUsername("admin")), 1); + } + + public void newDuel(Matcher matcher){ + + duelistName = matcher.group(1); + String round = matcher.group(2); + + if(User.getUserByUsername(duelistName) == null) UserInterface.printResponse("there is no player with this username"); + else if(duelistName.equals(currUser.getUsername())) UserInterface.printResponse("you can't play with yourself"); + else if(currUser.activeDeck == null) UserInterface.printResponse(currUser.getUsername() + " has no active deck"); + else if(Objects.requireNonNull(User.getUserByUsername(duelistName)).activeDeck == null) System.out.println(duelistName + " has no active deck"); + else if(!Deck.isValid(currUser.activeDeck.getDeckName())) UserInterface.printResponse(currUser.getUsername() + "'s deck is not valid"); + else if(!Deck.isValid(Objects.requireNonNull(User.getUserByUsername(duelistName)).activeDeck.getDeckName())) UserInterface.printResponse(duelistName + "'s deck is not valid"); + else if(!(round.equals("1") || round.equals("3"))) UserInterface.printResponse(Responses.NOT_SUPPORTED_ROUNDS); + else if(round.equals("1")) oneRoundDuel(duelistName); + else threeRoundDuel(duelistName); + } + + public void oneRoundDuel(String duelistName) { + //round1 + Duelist duelist1 = new Duelist(currUser); + Duelist duelist2 = new Duelist(Objects.requireNonNull(User.getUserByUsername(duelistName))); + Battlefield battlefield = new Battlefield(duelist1, duelist2, 1); + battlefield.isOneRound = true; + } + + public void finishround1( Duelist duelist1, Duelist duelist2, Battlefield battlefield) { + int duelist1Wins = 0, duelist2Wins = 0; + //round1Finish + if(battlefield.getWinner().getName().equals(duelist1.getName())) duelist1Wins++; + else duelist2Wins++; + UserInterface.printResponse(battlefield.getWinner().getName() + " won the game and the score is: " + duelist1Wins + " - " + duelist2Wins); + + //matchFinish + if(duelist1Wins == 1){ + UserInterface.printResponse(duelist1.getName() + " won the whole match with score: " + duelist1Wins + " - " + duelist2Wins); + duelist1.getUser().setScore(duelist1.getUser().getScore() + 1000); + duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 1000 + duelist1.LP); + duelist2.getUser().setMoney(duelist2.getUser().getMoney() + 100 ); + } + else { + UserInterface.printResponse(duelist2.getName() + " won the whole match with score: " + duelist1Wins + " - " + duelist2Wins); + duelist2.getUser().setScore(duelist2.getUser().getScore() + 1000); + duelist2.getUser().setMoney(duelist2.getUser().getMoney() + 1000 + duelist2.LP); + duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 100 ); + } + DataBase.saveTheUserList(User.getUsers()); + } + + public void threeRoundDuel(String duelistName) { + this.duelistName = duelistName; + //round1 + Duelist duelist1 = new Duelist(currUser); + Duelist duelist2 = new Duelist(Objects.requireNonNull(User.getUserByUsername(duelistName))); + Battlefield battlefield = new Battlefield(duelist1, duelist2, 1); + battlefield.isOneRound = false; + } + + public void finishRound1(Duelist duelist1, Duelist duelist2, Battlefield battlefield) { + //round1Finish + if (battlefield.getWinner().getName().equals(currUser.getNickName())) currWins++; + else notCurrWins++; + UserInterface.printResponse(battlefield.getWinner().getName() + " won the game and the score is: " + currWins + " - " + notCurrWins); + if (duelist1.getName().equals(currUser.getNickName())) { + round1currLp = duelist1.LP; + round1notCurrLp = duelist2.LP; + } + else{ + round1currLp = duelist2.LP; + round1notCurrLp = duelist1.LP; + } + + //add card from side + transferPermission(currUser, "oneToTwo"); + } + + public void finishRound2(Duelist duelist1, Duelist duelist2, Battlefield battlefield) { + //round2Finish + if (battlefield.getWinner().getName().equals(currUser.getNickName())) currWins++; + else notCurrWins++; + UserInterface.printResponse(battlefield.getWinner().getName() + " won the game and the score is: " + currWins + " - " + notCurrWins); + if (duelist1.getName().equals(currUser.getNickName())) { + round2currLp = duelist1.LP; + round2notCurrLp = duelist2.LP; + } + else{ + round2currLp = duelist2.LP; + round2notCurrLp = duelist1.LP; + } + if (round2currLp < round1currLp) round2currLp = round1currLp; + if (round2notCurrLp < round1notCurrLp) round2notCurrLp = round1notCurrLp; + + //checkMatchIsFinished + if (currWins == 2) { + if (duelist1.getName().equals(currUser.getNickName())){ + finish2Round(duelist1, duelist2); + } + else{ + finish2Round(duelist2, duelist1); + } + DataBase.saveTheUserList(User.getUsers()); + DuelMenu.getInstance(ProgramController.currUser).run(Main.stage); + return; + } else if (notCurrWins == 2) { + if (duelist1.getName().equals(currUser.getNickName())){ + finish2Round(duelist2, duelist1); + } + else{ + finish2Round(duelist1, duelist2); + } + DataBase.saveTheUserList(User.getUsers()); + DuelMenu.getInstance(ProgramController.currUser).run(Main.stage); + return; + } + + //add card from side + transferPermission(currUser, "twoToThree"); + } + + private void finish2Round(Duelist duelist1, Duelist duelist2) { + if (duelist1.getName().equals(currUser.getNickName())) { + UserInterface.printResponse(duelist1.getName() + " won the whole match with score: " + currWins + " - " + notCurrWins); + duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 3000 + 3 * round2currLp); + } + else{ + UserInterface.printResponse(duelist1.getName() + " won the whole match with score: " + notCurrWins + " - " + currWins); + duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 3000 + 3 * round2notCurrLp); + } + duelist1.getUser().setScore(duelist1.getUser().getScore() + 3000); + duelist2.getUser().setMoney(duelist2.getUser().getMoney() + 300); + DataBase.saveTheUserList(User.getUsers()); + } + + public void finishRound3(Duelist duelist1, Duelist duelist2, Battlefield battlefield) { + //round3Finish + if (battlefield.getWinner().getName().equals(currUser.getNickName())) currWins++; + else notCurrWins++; + UserInterface.printResponse(battlefield.getWinner().getName() + " won the game and the score is: " + currWins + " - " + notCurrWins); + if (duelist1.getName().equals(currUser.getNickName())){ + round3currLp = duelist1.LP; + round3notCurrLp = duelist2.LP; + } + else{ + round3currLp = duelist2.LP; + round3notCurrLp = duelist1.LP; + } + if (round3currLp < round2currLp) round3currLp = round2currLp; + if (round3notCurrLp < round2notCurrLp) round3notCurrLp = round2notCurrLp; + } + + public void matchFinish(Duelist duelist1, Duelist duelist2){ + //matchFinish + if(currWins == 2) { + UserInterface.printResponse(currUser.getNickName() + " won the whole match with score: " + currWins + " - " + notCurrWins); + currUser.setScore(currUser.getScore() + 3000); + currUser.setMoney(currUser.getMoney() + 3000 + 3 * round3currLp); + if (duelist1.getName().equals(currUser.getNickName())) + duelist2.getUser().setMoney(duelist2.getUser().getMoney() + 300); + else + duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 300); + } + else { + if (duelist1.getName().equals(currUser.getNickName())) { + UserInterface.printResponse(duelist2.getName() + " won the whole match with score: " + notCurrWins + " - " + currWins); + duelist2.getUser().setScore(duelist2.getUser().getScore() + 3000); + duelist2.getUser().setMoney(duelist2.getUser().getMoney() + 3000 + 3 * round3notCurrLp); + duelist1.getUser().setMoney(duelist1.getUser().getMoney() + 300); + } + } + DataBase.saveTheUserList(User.getUsers()); + } + + public void transferPermission(User user, String how) { + Object[] options = {"Yes", "No"}; + int n1 = JOptionPane.showOptionDialog(null, + "Hey " + user.getUsername() + "do you want to transfer card?", + "Transfer Card Question", + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE, + null, //do not use a custom Icon + options, //the titles of buttons + options[0]); + if(n1 == 0) transferCard(user, how); + else{ + if (user == ProgramController.currUser){ + transferPermission(Objects.requireNonNull(User.getUserByUsername(duelistName)), how); + } + else{ + Duelist duelist1 = new Duelist(ProgramController.currUser); + Duelist duelist2 = new Duelist(Objects.requireNonNull(User.getUserByUsername(duelistName))); + Battlefield battlefield; + if (how.equals("oneToTwo")) { + battlefield = new Battlefield(duelist1, duelist2, 2); + battlefield.isOneRound = false; + } + else{ + battlefield = new Battlefield(duelist1, duelist2, 3); + battlefield.isOneRound = false; + } + } + } + } + + public void transferCard(User user, String how){ + new ChangeMainAndSideCards(user.activeDeck, user, this, how); + } +} diff --git a/src/main/java/controllers/menues/MainMenu.java b/src/main/java/controllers/menues/MainMenu.java index c233c84..3e01d59 100644 --- a/src/main/java/controllers/menues/MainMenu.java +++ b/src/main/java/controllers/menues/MainMenu.java @@ -11,7 +11,7 @@ public class MainMenu { - private User currUser; + private final User currUser; private boolean isUserLoggedOut = false; public MainMenu(User currUser) { @@ -21,7 +21,7 @@ public MainMenu(User currUser) { if(command.startsWith("menu enter")) changeMenu(Regex.getMatcher(command, Regex.menuEnter),currUser); else if(command.equals("user logout")) logoutUser(); - else if(command.equals("menu Show Current")) UserInterface.printResponse("Main Menu"); + else if(command.equals("menu Show Current")) UserInterface.printResponse("view.Main Menu"); else UserInterface.printResponse(Responses.INVALID_COMMAND); if(!isUserLoggedOut) command = UserInterface.getUserInput(); @@ -30,31 +30,29 @@ public MainMenu(User currUser) { static void changeMenu(Matcher matcher, User currUser){ if(matcher.find()) { + //DeckMenu.getInstance(currUser).runDeckMenu(); switch (matcher.group(1)) { - case "Duel" : + case "Duel" -> { ProgramController.currentMenu = Menu.DUEL_MENU; - DuelMenu.getInstance(currUser).runDuelMenu(); - break; - case "Shop" : + DuelMenuController.getInstance(currUser).runDuelMenu(); + } + case "Shop" -> { ProgramController.currentMenu = Menu.SHOP_MENU; ShopMenu.getInstance(currUser).runShopMenu(currUser); - break; - case "Deck" : - ProgramController.currentMenu = Menu.DECK_MENU; - DeckMenu.getInstance(currUser).runDeckMenu(); - break; - case "Profile" : + } + case "Deck" -> ProgramController.currentMenu = Menu.DECK_MENU; + case "Profile" -> { ProgramController.currentMenu = Menu.PROFILE_MENU; ProfileMenu.getInstance(currUser).runProfileMenu(currUser); - break; - case "Scoreboard" : + } + case "Scoreboard" -> { ProgramController.currentMenu = Menu.SCOREBOARD_MENU; ScoreBoardMenu.getInstance().runScoreBoardMenu(); - break; - case "Import/Export" : + } + case "Import/Export" -> { ProgramController.currentMenu = Menu.IMPORT_EXPORT_MENU; ImportExportMenu.getInstance().runIMPORTEXPORTMenu(); - break; + } } } else UserInterface.printResponse(Responses.INVALID_COMMAND); diff --git a/src/main/java/controllers/menues/ShopMenu.java b/src/main/java/controllers/menues/ShopMenu.java index 59ce460..e1b8d62 100644 --- a/src/main/java/controllers/menues/ShopMenu.java +++ b/src/main/java/controllers/menues/ShopMenu.java @@ -11,6 +11,7 @@ import java.util.Collections; import java.util.Map; import java.util.regex.Matcher; +import java.util.regex.Pattern; import static controllers.ProgramController.currentMenu; import static controllers.ShowCard.showCard; @@ -65,6 +66,34 @@ private void buyCard(Matcher matcher){ } } + + //for graphic i should write buyCard function again + public static String buyCardForGraphic (String command){ + Pattern pattern = Pattern.compile("^buy card --username (.+)? --card (.+)?$"); + Matcher matcher = pattern.matcher(command); + + String username = ""; + String cardsName = ""; + + if (matcher.find()){ + username = matcher.group(1); + cardsName = matcher.group(2); + } + + User user = User.getUserByUsername(username); + if (Card.allCards.get(cardsName).getPrice() > user.getMoney()) + return "not enough money"; + else{ + ArrayList temp = user.getCardsBought(); + temp.add(cardsName); + user.setCardsBought(temp); + int money = user.getMoney(); + money -= Card.allCards.get(cardsName).getPrice(); + user.setMoney(money); + return "card bought successfully"; + } + } + private void showAllCards(){ ArrayList allCards = new ArrayList<>(); for (Map.Entry entry: Card.allCards.entrySet()){ @@ -80,6 +109,21 @@ private void showAllCards(){ } } + //for graphic i should write showAllCards function again + public static ArrayList showAllCardsForGraphic (){ + ArrayList allCards = new ArrayList<>(); + for (Map.Entry entry: Card.allCards.entrySet()){ + String key = entry.getKey(); + allCards.add(key); + } + + Collections.sort(allCards); + + return allCards; + } + + + private void increaseMoney(Matcher matcher){ int amount = Integer.parseInt(matcher.group(1)); currUser.money += amount; diff --git a/src/main/java/models/Monster/BeastKingBarbaros.java b/src/main/java/models/Monster/BeastKingBarbaros.java index fac1619..4ff04cb 100644 --- a/src/main/java/models/Monster/BeastKingBarbaros.java +++ b/src/main/java/models/Monster/BeastKingBarbaros.java @@ -22,7 +22,7 @@ public BeastKingBarbaros (Object object){ ((BeastKingBarbaros)object).getAttack(), ((BeastKingBarbaros)object).getDefence()); } public void action(Battlefield battlefield) { - turn = battlefield.getTurn(); + super.action(battlefield); } @Override public void removeMonster(Battlefield battlefield){ diff --git a/src/main/java/models/Monster/Marshmallon.java b/src/main/java/models/Monster/Marshmallon.java index db00e5f..57011af 100644 --- a/src/main/java/models/Monster/Marshmallon.java +++ b/src/main/java/models/Monster/Marshmallon.java @@ -6,13 +6,13 @@ import models.Duelist; import view.UserInterface; -import javax.management.BadAttributeValueExpException; + import java.io.Serializable; public class Marshmallon extends Monster implements Serializable { public Marshmallon (String name, Type cardType, String description, int price, int level, String attribute, - String monsterType, String cardTypeInExel, int attack, int defence){ + String monsterType, String cardTypeInExel, int attack, int defence){ super(name, cardType, description, price, level, attribute, monsterType, cardTypeInExel, attack, defence); } @@ -32,11 +32,24 @@ public void action(Battlefield battlefield) { } @Override public void removeMonster(Battlefield battlefield){ - UserInterface.printResponse("Marshmallon can not die in normal fight!"); + super.removeMonster(battlefield); } @Override public int defenceFunc(Battlefield battlefield){ - battlefield.getOpponent().LP -= 1000; - return 0; + int attackingMonster = battlefield.attackingMonster.getAttack(); + int attackedMonster = 0; + + if (this.getCardsFace() == FaceUp.ATTACK) attackedMonster = this.getAttack(); + else attackedMonster = this.getDefence(); + + if (attackedMonster < attackingMonster){ + int damage = attackedMonster - attackingMonster; + if (battlefield.getTurn().field.monsterZone.contains(this)) battlefield.getTurn().LP += damage; + else if (battlefield.getOpponent().field.monsterZone.contains(this)) battlefield.getOpponent().LP += damage; + } + + if (this.getCardsFace() == FaceUp.DEFENSE_BACK) + battlefield.getOpponent().LP -= 1000; + return 10; } } diff --git a/src/main/java/models/Monster/Monster.java b/src/main/java/models/Monster/Monster.java index 2f54f75..0a38c2f 100644 --- a/src/main/java/models/Monster/Monster.java +++ b/src/main/java/models/Monster/Monster.java @@ -120,8 +120,14 @@ else if (battlefield.getOpponent().field.monsterZone.contains(this)){ } public void attack(Battlefield battlefield){ Monster attackedMonster = battlefield.attackedMonster; - Duelist opponent = battlefield.getOpponent(); - Duelist turn = battlefield.getTurn(); + + Duelist opponent = null; + Duelist turn = null; + + + opponent = battlefield.getOpponent(); + turn = battlefield.getTurn(); + //if attacking defeated remove our monster // -1 means defeated @@ -133,7 +139,7 @@ public void attack(Battlefield battlefield){ if(attackedMonster.getCardsFace().equals(FaceUp.ATTACK)) { battlefield.selectedCard.setISAttackedThisTurn(true); attackedMonster.removeMonster(battlefield); - opponent.field.monsterZone.set(battlefield.getIndex(battlefield.attackedMonsterNum) , null); +// opponent.field.monsterZone.set(battlefield.getIndex(battlefield.attackedMonsterNum) , null); int damage = this.getAttack() - attackedMonster.getAttack(); opponent.LP = opponent.LP - damage; UserInterface.printResponse("your opponent’s monster is destroyed and your opponent receives" + damage + "battle damage"); @@ -142,8 +148,10 @@ public void attack(Battlefield battlefield){ if(attackedMonster.getCardsFace().equals(FaceUp.DEFENSE_BACK)){ UserInterface.printResponse("opponent’s monster card was " + attackedMonster.getName() + " and no card is destroyed"); opponent.field.monsterZone.get(battlefield.getIndex(battlefield.attackedMonsterNum)).setCardsFace(FaceUp.DEFENSE_FRONT); - }else - UserInterface.printResponse("the defense position monster is destroyed"); + }else { + UserInterface.printResponse("the defense position monster is destroyed"); + attackedMonster.removeMonster(battlefield); + } } } @@ -152,18 +160,18 @@ else if(condition == -1){ int damage = attackedMonster.getAttack() - this.getAttack(); turn.LP = turn.LP - damage; UserInterface.printResponse("Your monster card is destroyed and you received " + damage + " battle damage"); + this.removeMonster(battlefield); } else if(condition == 0){ this.removeMonster(battlefield); - opponent.field.monsterZone.set(battlefield.getIndex(battlefield.attackedMonsterNum) , null); attackedMonster.removeMonster(battlefield); - turn.field.monsterZone.set(battlefield.getIndex(battlefield.getIndexOfSelectedCardInMonsterZone()) , null); UserInterface.printResponse("both you and your opponent monster cards are destroyed and no one receives damage"); } else if(condition == 2) { battlefield.selectedCard.setISAttackedThisTurn(true); UserInterface.printResponse("opponent’s monster card was " + attackedMonster.getName() + " and no card is destroyed"); - opponent.field.monsterZone.get(battlefield.getIndex(battlefield.attackedMonsterNum)).setCardsFace(FaceUp.DEFENSE_FRONT); +// opponent.field.monsterZone.get(battlefield.getIndex(battlefield.attackedMonsterNum)).setCardsFace(FaceUp.DEFENSE_FRONT); + battlefield.attackedMonster.setCardsFace(FaceUp.DEFENSE_FRONT); UserInterface.printResponse("no card is destroyed"); } @@ -176,16 +184,17 @@ public int defenceFunc(Battlefield battlefield){ int defenseMonsterHero; if(this.getCardsFace() == FaceUp.ATTACK) defenseMonsterHero = this.attack; else defenseMonsterHero = this.defence; - if(attackingMonsterHero > defenseMonsterHero) - if(this.getCardsFace().equals(FaceUp.DEFENSE_BACK)) - return 2; + if(attackingMonsterHero > defenseMonsterHero) { + if (this.getCardsFace().equals(FaceUp.DEFENSE_BACK)) + return 2; else - return 1; + return 1; + } else if(attackingMonsterHero trueMonsters = new ArrayList<>(); for (int i = 0; i<5; ++i){ @@ -44,12 +46,19 @@ else if (counter == 0) UserInterface.printResponse("You don't have any monster in your monster zone."); else{ UserInterface.printResponse("Now select one of these monsters to equip it"); + int i=0; for (Monster trueMonster : trueMonsters) { - UserInterface.printResponse(trueMonster.getName() + ":" + trueMonster.getDescription()); + monsters[i] = trueMonster.getName(); + i++; } + monsters[5] = "Cancel"; + JList list = new JList(monsters); + JOptionPane.showMessageDialog( + null, list, "Select Monster", JOptionPane.PLAIN_MESSAGE); + System.out.println(Arrays.toString(list.getSelectedIndices())); String name = " "; while (true){ - String command = UserInterface.getUserInput(); + String command = (String) list.getSelectedValue(); for (Monster trueMonster : trueMonsters) { if (trueMonster.getName().equals(command)) { name = command; diff --git a/src/main/java/models/SpellAndTrap/ClosedForest.java b/src/main/java/models/SpellAndTrap/ClosedForest.java index 94c65e8..e78fe09 100644 --- a/src/main/java/models/SpellAndTrap/ClosedForest.java +++ b/src/main/java/models/SpellAndTrap/ClosedForest.java @@ -28,7 +28,7 @@ public void action(Battlefield battlefield) { turn = battlefield.getTurn(); opponent = battlefield.getOpponent(); - if (opponent.getName().equalsIgnoreCase("admin")) { + if (opponent.getName().equalsIgnoreCase("Game")) { opponent.field.fieldZone = this; opponent.field.hand.remove(this); turn = battlefield.getOpponent(); @@ -67,8 +67,14 @@ public void removeSpellOrTrap(Battlefield battlefield) { targetedMonster.setDefence(targetedMonster.getDefence() - numberOfAttackToAdd); } targetedMonsters = new ArrayList<>(); - turn.field.graveYard.add(this); - turn.field.fieldZone = null; + if (battlefield.getTurn().field.fieldZone == this) { + battlefield.getTurn().field.graveYard.add(this); + battlefield.getTurn().field.fieldZone = null; + } + if (battlefield.getOpponent().field.fieldZone == this) { + battlefield.getOpponent().field.graveYard.add(this); + battlefield.getOpponent().field.fieldZone = null; + } } diff --git a/src/main/java/models/SpellAndTrap/CommonFunctions.java b/src/main/java/models/SpellAndTrap/CommonFunctions.java index 8658a6b..c415d4e 100644 --- a/src/main/java/models/SpellAndTrap/CommonFunctions.java +++ b/src/main/java/models/SpellAndTrap/CommonFunctions.java @@ -17,7 +17,7 @@ default boolean showGraveYard(Duelist duelist) { boolean isFoundMonster = false; for (Card card : duelist.field.graveYard) { if(card.getCardsType().equals(Type.MONSTER)){ - ShowCard.showCard(card.getName()); + UserInterface.printResponse(card.getName()); isFoundMonster = true; } } diff --git a/src/main/java/models/SpellAndTrap/Forest.java b/src/main/java/models/SpellAndTrap/Forest.java index 2d44a69..448bee4 100644 --- a/src/main/java/models/SpellAndTrap/Forest.java +++ b/src/main/java/models/SpellAndTrap/Forest.java @@ -27,7 +27,7 @@ public void action(Battlefield battlefield) { turn = battlefield.getTurn(); opponent = battlefield.getOpponent(); - if (opponent.getName().equalsIgnoreCase("admin")) { + if (opponent.getName().equalsIgnoreCase("Game")) { opponent.field.fieldZone = this; opponent.field.hand.remove(this); } @@ -68,7 +68,13 @@ public void removeSpellOrTrap(Battlefield battlefield) { targetedMonsters.get(i).setDefence(targetedMonsters.get(i).getDefence() - 200); } targetedMonsters = new ArrayList<>(); - turn.field.graveYard.add(this); - turn.field.fieldZone = null; + if (battlefield.getTurn().field.fieldZone == this) { + battlefield.getTurn().field.graveYard.add(this); + battlefield.getTurn().field.fieldZone = null; + } + if (battlefield.getOpponent().field.fieldZone == this) { + battlefield.getOpponent().field.graveYard.add(this); + battlefield.getOpponent().field.fieldZone = null; + } } } diff --git a/src/main/java/models/SpellAndTrap/MagnumShield.java b/src/main/java/models/SpellAndTrap/MagnumShield.java index 5688422..a6fce0b 100644 --- a/src/main/java/models/SpellAndTrap/MagnumShield.java +++ b/src/main/java/models/SpellAndTrap/MagnumShield.java @@ -7,8 +7,10 @@ import models.Monster.Monster; import view.UserInterface; +import javax.swing.*; import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; public class MagnumShield extends SpellAndTrap implements Serializable { private static Duelist turn; @@ -26,7 +28,7 @@ public MagnumShield (Object object){ @Override public void action(Battlefield battlefield) { turn = battlefield.getTurn(); - + String[] monsters = new String[6]; int counter = 0; ArrayList trueMonsters = new ArrayList<>(); for (int i = 0; i<5; ++i){ @@ -45,12 +47,19 @@ else if (counter == 0) UserInterface.printResponse("You don't have monster with type Warrior in your monster zone"); else{ UserInterface.printResponse("Now select one of these monsters to equip it"); + int i=0; for (Monster trueMonster : trueMonsters) { - UserInterface.printResponse(trueMonster.getName() + ":" + trueMonster.getDescription()); + monsters[i] = trueMonster.getName(); + i++; } + monsters[5] = "Cancel"; + JList list = new JList(monsters); + JOptionPane.showMessageDialog( + null, list, "Select Monster", JOptionPane.PLAIN_MESSAGE); + System.out.println(Arrays.toString(list.getSelectedIndices())); String name = " "; while (true){ - String command = UserInterface.getUserInput(); + String command = (String) list.getSelectedValue(); for (Monster trueMonster : trueMonsters) { if (trueMonster.getName().equals(command)) { name = command; diff --git a/src/main/java/models/SpellAndTrap/MonsterReborn.java b/src/main/java/models/SpellAndTrap/MonsterReborn.java index 323f982..45d99db 100644 --- a/src/main/java/models/SpellAndTrap/MonsterReborn.java +++ b/src/main/java/models/SpellAndTrap/MonsterReborn.java @@ -2,8 +2,6 @@ import controllers.Battelfield.Battlefield; import controllers.Regex; -import controllers.ShowCard; -import models.Card; import models.CardStufs.Type; import models.Duelist; import models.Monster.Monster; @@ -32,11 +30,7 @@ public MonsterReborn (Object object){ @Override public void action(Battlefield battlefield) { - if(expireTime == 0){ - expireTime = 1; - removeSpellOrTrap(battlefield); - } - else { + if (expireTime == 1) { //expireTime added expireTime--; @@ -58,8 +52,14 @@ public void action(Battlefield battlefield) { //get monster from user input if(isFoundMonsterInTurnGraveyard || isFoundMonsterInOpponentGraveyard) initializeForSpell(); + else expireTime += 1; } + else expireTime += 1; + } + if(expireTime == 0){ + expireTime = 1; + removeSpellOrTrap(battlefield); } } @@ -90,7 +90,10 @@ private void initializeForSpell() { //end choice isChoiceEnded = true; } - else if(command.equals("exit")) return; + else if(command.equals("exit")) { + expireTime += 1; + return; + } else{ UserInterface.printResponse(Responses.INVALID_COMMAND); command = UserInterface.getUserInput(); @@ -100,12 +103,16 @@ private void initializeForSpell() { } private void specialSummon(int number, Duelist duelist) { - Monster monster = (Monster) duelist.field.graveYard.get(number); - if(Objects.isNull(monster)) UserInterface.printResponse("No Monster Found"); - else{ - duelist.field.graveYard.remove(number); - monster.setActiveSpell(this); - battlefield.specialSummon(monster); + try { + Monster monster = (Monster) duelist.field.graveYard.get(number-1); + if(Objects.isNull(monster)) UserInterface.printResponse("No Monster Found"); + else{ + monster.setActiveSpell(this); + battlefield.specialSummon(monster); + } + }catch (Exception e){ + expireTime += 1; + UserInterface.printResponse("Please insert a valid number"); } } diff --git a/src/main/java/models/SpellAndTrap/Raigeki.java b/src/main/java/models/SpellAndTrap/Raigeki.java index c9ee683..cb57bb9 100644 --- a/src/main/java/models/SpellAndTrap/Raigeki.java +++ b/src/main/java/models/SpellAndTrap/Raigeki.java @@ -34,9 +34,9 @@ public void action(Battlefield battlefield) { Duelist opponent = battlefield.getOpponent(); //checking not null if(!Objects.isNull(opponent)){ - for(Card card : opponent.field.monsterZone){ - opponent.field.graveYard.add(card); - opponent.field.monsterZone.set(opponent.field.monsterZone.indexOf(card) , null); + for (int i = 0; i<5; ++i){ + if (opponent.field.monsterZone.get(i) != null) + ((Monster)opponent.field.monsterZone.get(i)).removeMonster(battlefield); } } } diff --git a/src/main/java/models/SpellAndTrap/SpellAndTrap.java b/src/main/java/models/SpellAndTrap/SpellAndTrap.java index 90adfa3..086658c 100644 --- a/src/main/java/models/SpellAndTrap/SpellAndTrap.java +++ b/src/main/java/models/SpellAndTrap/SpellAndTrap.java @@ -38,13 +38,32 @@ public String getStatus() { public void removeSpellOrTrap (Battlefield battlefield){ - battlefield.getTurn().field.graveYard.add(this); for (int i = 0; i<5; ++i){ - if (battlefield.getTurn().field.spellTrapZone.get(i) == this){ + if (battlefield.getTurn().field.spellTrapZone.get(i) != null && battlefield.getTurn().field.spellTrapZone.get(i) == this){ battlefield.getTurn().field.spellTrapZone.set(i, null); + battlefield.getTurn().field.graveYard.add(this); break; } } + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.spellTrapZone.get(i) != null && battlefield.getOpponent().field.spellTrapZone.get(i) == this){ + battlefield.getOpponent().field.spellTrapZone.set(i, null); + battlefield.getOpponent().field.graveYard.add(this); + break; + } + } + for (int i = 0; i trueMonsters = new ArrayList<>(); for (int i = 0; i<5; ++i){ @@ -45,12 +47,19 @@ else if (counter == 0) UserInterface.printResponse("You don't have monster with type of Fiend or Spellcaster."); else{ UserInterface.printResponse("Now select one of these monsters to equip it"); + int i=0; for (Monster trueMonster : trueMonsters) { - UserInterface.printResponse(trueMonster.getName() + ":" + trueMonster.getDescription()); + monsters[i] = trueMonster.getName(); + i++; } + monsters[5] = "Cancel"; + JList list = new JList(monsters); + JOptionPane.showMessageDialog( + null, list, "Select Monster", JOptionPane.PLAIN_MESSAGE); + System.out.println(Arrays.toString(list.getSelectedIndices())); String name = " "; while (true){ - String command = UserInterface.getUserInput(); + String command = (String) list.getSelectedValue(); for (Monster trueMonster : trueMonsters) { if (trueMonster.getName().equals(command)) { name = command; diff --git a/src/main/java/models/SpellAndTrap/Umiiruka.java b/src/main/java/models/SpellAndTrap/Umiiruka.java index 3094afa..a683df4 100644 --- a/src/main/java/models/SpellAndTrap/Umiiruka.java +++ b/src/main/java/models/SpellAndTrap/Umiiruka.java @@ -27,7 +27,7 @@ public void action(Battlefield battlefield) { turn = battlefield.getTurn(); opponent = battlefield.getOpponent(); - if (opponent.getName().equalsIgnoreCase("admin")) { + if (opponent.getName().equalsIgnoreCase("Game")) { opponent.field.fieldZone = this; opponent.field.hand.remove(this); } @@ -67,7 +67,13 @@ public void removeSpellOrTrap(Battlefield battlefield) { targetedMonster.setDefence(targetedMonster.getDefence() + 400); } targetedMonsters = new ArrayList<>(); - turn.field.graveYard.add(this); - turn.field.fieldZone = null; + if (battlefield.getTurn().field.fieldZone == this) { + battlefield.getTurn().field.graveYard.add(this); + battlefield.getTurn().field.fieldZone = null; + } + if (battlefield.getOpponent().field.fieldZone == this) { + battlefield.getOpponent().field.graveYard.add(this); + battlefield.getOpponent().field.fieldZone = null; + } } } diff --git a/src/main/java/models/SpellAndTrap/UnitedWeStand.java b/src/main/java/models/SpellAndTrap/UnitedWeStand.java index 8670243..e52c9e4 100644 --- a/src/main/java/models/SpellAndTrap/UnitedWeStand.java +++ b/src/main/java/models/SpellAndTrap/UnitedWeStand.java @@ -7,8 +7,10 @@ import models.Monster.Monster; import view.UserInterface; +import javax.swing.*; import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; public class UnitedWeStand extends SpellAndTrap implements Serializable { private static Duelist turn; @@ -27,7 +29,7 @@ public UnitedWeStand (Object object){ @Override public void action(Battlefield battlefield) { turn = battlefield.getTurn(); - + String[] monsters = new String[6]; int numberToIncrease = 0; for (int i = 0; i<5; ++i){ if (turn.field.monsterZone.get(i) != null && (turn.field.monsterZone.get(i).getCardsFace() == FaceUp.ATTACK @@ -56,12 +58,20 @@ else if (counter == 0) UserInterface.printResponse("You don't have any monster in your monster zone"); else{ UserInterface.printResponse("Now select one of these monsters to equip it"); + int i=0; for (Monster trueMonster : trueMonsters) { - UserInterface.printResponse(trueMonster.getName() + ":" + trueMonster.getDescription()); + monsters[i] = trueMonster.getName(); + i++; } + monsters[5] = "Cancel"; + JList list = new JList(monsters); + JOptionPane.showMessageDialog( + null, list, "Select Monster", JOptionPane.PLAIN_MESSAGE); + System.out.println(Arrays.toString(list.getSelectedIndices())); String name = " "; while (true){ - String command = UserInterface.getUserInput(); + String command = (String) list.getSelectedValue(); + for (Monster trueMonster : trueMonsters) { if (trueMonster.getName().equals(command)) { name = command; diff --git a/src/main/java/models/SpellAndTrap/Yami.java b/src/main/java/models/SpellAndTrap/Yami.java index d381ab7..87e53e4 100644 --- a/src/main/java/models/SpellAndTrap/Yami.java +++ b/src/main/java/models/SpellAndTrap/Yami.java @@ -27,7 +27,7 @@ public void action(Battlefield battlefield) { turn = battlefield.getTurn(); opponent = battlefield.getOpponent(); - if (opponent.getName().equalsIgnoreCase("admin")) { + if (opponent.getName().equalsIgnoreCase("Game")) { opponent.field.fieldZone = this; opponent.field.hand.remove(this); } @@ -76,7 +76,13 @@ public void removeSpellOrTrap(Battlefield battlefield) { } } targetedMonsters = new ArrayList<>(); - turn.field.graveYard.add(this); - turn.field.fieldZone = null; + if (battlefield.getTurn().field.fieldZone == this) { + battlefield.getTurn().field.graveYard.add(this); + battlefield.getTurn().field.fieldZone = null; + } + if (battlefield.getOpponent().field.fieldZone == this) { + battlefield.getOpponent().field.graveYard.add(this); + battlefield.getOpponent().field.fieldZone = null; + } } } diff --git a/src/main/java/models/User.java b/src/main/java/models/User.java index e7d6589..794c34b 100644 --- a/src/main/java/models/User.java +++ b/src/main/java/models/User.java @@ -2,9 +2,16 @@ import controllers.Database.DataBase; -import java.io.Serializable; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.*; +import java.net.URL; +import java.nio.file.*; import java.util.ArrayList; import java.util.Objects; +import java.util.Random; + +import javax.imageio.ImageIO; public class User implements Serializable { private static ArrayList users = new ArrayList<>(); @@ -17,15 +24,33 @@ public class User implements Serializable { public ArrayList cardsBought = new ArrayList<>(); public int money = 100000; - public User(String username , String password , String nickname){ + public User(String username, String password, String nickname) { this.username = username; this.password = password; this.nickName = nickname; this.isLoggedIn = true; //When a User created by default be logged in + getImageRandom(); users.add(this); DataBase.saveTheUserList(users); } + private void getImageRandom() { + Random random = new Random(); + int number = random.nextInt(29); + number += 1; + String from = Objects.requireNonNull(this.getClass().getResource("/models/UserImages/"+number + ".png")).getPath(); + String to = Objects.requireNonNull(this.getClass().getResource("/models/Images/1.png")).getPath(); + try{ + BufferedImage bi = ImageIO.read(new File(from)); + ImageIO.write(bi, "png", new File(this.username+".png")); + System.out.println("Copied!"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + public User(String username , String nickName , int score){ this.username = username; this.nickName = nickName; diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..b311851 --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,21 @@ +module AP { + requires javafx.controls; + requires javafx.fxml; + requires javafx.media; + requires org.junit.jupiter.api; + requires java.desktop; + requires java.logging; + requires json.simple; + //requires opencv; + + + opens controllers to javafx.fxml; + exports controllers; + + opens view to javafx.fxml; + exports view; + + opens models to javafx.fxml; + exports models; + +} \ No newline at end of file diff --git a/src/main/java/view/CreateGrid.java b/src/main/java/view/CreateGrid.java new file mode 100644 index 0000000..5391f9a --- /dev/null +++ b/src/main/java/view/CreateGrid.java @@ -0,0 +1,15 @@ +package view; + +import javafx.geometry.Pos; +import javafx.scene.layout.GridPane; + +public class CreateGrid { + public static GridPane createGridPane() { + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.CENTER); + gridPane.setHgap(10); + gridPane.setVgap(10); + return gridPane; + } +} + diff --git a/src/main/java/view/Main.java b/src/main/java/view/Main.java new file mode 100644 index 0000000..61055e3 --- /dev/null +++ b/src/main/java/view/Main.java @@ -0,0 +1,33 @@ +package view; + +import controllers.Constants.Initialize; +import javafx.application.Application; +import javafx.scene.media.AudioClip; +import javafx.stage.Stage; +import view.menus.WelcomeMenu; + +public class Main extends Application { + public static Stage stage; + public static AudioClip audioClip; + + @Override + public void start(Stage stage) { + Main.stage = new Stage(); + + //Music + audioClip = new AudioClip(getClass().getResource("/music/menu.mp3").toExternalForm()); + audioClip.setCycleCount(-1); + audioClip.play(); + + //load data from dataBase + Initialize.init(); + + //start from welcome menu + new WelcomeMenu().start(); + } + + public static void main(String[] args) { + launch(args); + } + +} \ No newline at end of file diff --git a/src/main/java/view/UserInterface.java b/src/main/java/view/UserInterface.java index 6eb7e0e..df03b75 100644 --- a/src/main/java/view/UserInterface.java +++ b/src/main/java/view/UserInterface.java @@ -1,5 +1,7 @@ package view; +import javax.swing.*; +import java.util.HashMap; import java.util.Scanner; public class UserInterface { @@ -8,11 +10,14 @@ public class UserInterface { public static void printResponse(Responses response) { System.out.println(response.getMessage()); } - public static void printResponse(String response) { System.out.println(response); } - public static void printResponse(int input) { - System.out.println(input); + public static void printResponse(String response) { + JOptionPane.showMessageDialog(null,response); } public static String getUserInput(){ - return scanner.nextLine(); + return JOptionPane.showInputDialog("input"); + } + + public static void printResponse(int input) { + JOptionPane.showMessageDialog(null,input); } } diff --git a/src/main/java/view/menus/ChangeMainAndSideCards.java b/src/main/java/view/menus/ChangeMainAndSideCards.java new file mode 100644 index 0000000..ddff148 --- /dev/null +++ b/src/main/java/view/menus/ChangeMainAndSideCards.java @@ -0,0 +1,269 @@ +package view.menus; + +import controllers.Battelfield.Battlefield; +import controllers.ProgramController; +import controllers.menues.DuelMenuController; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Pos; +import javafx.scene.ImageCursor; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.stage.Window; +import models.Card; +import models.CardStufs.Type; +import models.Deck; +import models.Duelist; +import models.User; + +import java.util.Objects; +import java.util.Optional; + +public class ChangeMainAndSideCards { + User user; + Deck deck; + private String loc = "Main"; + subStage myStage; + DuelMenuController duelMenuController; + String how; + + public ChangeMainAndSideCards (Deck deck, User user, DuelMenuController duelMenuController, String how){ + this.duelMenuController = duelMenuController; + this.how = how; + this.user = user; + this.deck = deck; + this.start(); + } + + public void start (){ + //Left and Right Pics! + BorderPane borderPane = new BorderPane(); + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/right.png")).toExternalForm(), 170, 650, false, false); + ImageView imageView = new ImageView(image); + Image image1 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/left.png")).toExternalForm(), 170, 650, false, false); + ImageView imageView1 = new ImageView(image1); + borderPane.setRight(imageView); + borderPane.setLeft(imageView1); + + borderPane.setTop(topBar()); + + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.TOP_CENTER); + + VBox vBox = new VBox(gridPane); + vBox.setAlignment(Pos.CENTER); + + if(loc.equals("Main")) { + for (int i = 0; i < deck.mainDeck.size(); i++) + addCard(borderPane, gridPane, i, deck.mainDeck.get(i).getName()); + } + else{ + for (int i = 0; i < deck.sideDeck.size(); i++) + addCard(borderPane, gridPane, i, deck.sideDeck.get(i).getName()); + } + + ScrollPane scrollPane = new ScrollPane(); + scrollPane.setContent(vBox); + borderPane.setCenter(scrollPane); + Scene scene = new Scene(borderPane,800,650); + + Image img = new Image(Objects.requireNonNull(getClass().getResource("cursor.png")).toExternalForm()); + ImageCursor cursor = new ImageCursor(img, 10, 10); + scene.setCursor(cursor); + myStage = new subStage("Transfer Card", scene); + } + + + private HBox topBar() { + HBox hBox1 = new HBox(); + + Label label = new Label(loc + "Deck"); + label.setFont(Font.font(20)); + label.setTextFill(Color.web("Black")); + + Button button1 = new Button("Main"); + button1.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button1.setOnAction(actionEvent -> { + loc = "Main"; + myStage.stage.close(); + start(); + }); + + Button button2 = new Button("Side"); + button2.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button2.setOnAction(actionEvent -> { + loc = "Side"; + myStage.stage.close(); + start(); + }); + + //Back Button + Button button = new Button("Back"); + button.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + if (user == ProgramController.currUser){ + myStage.stage.close(); + duelMenuController.transferPermission(Objects.requireNonNull(User.getUserByUsername(duelMenuController.duelistName)), how); + } + else{ + myStage.stage.close(); + Duelist duelist1 = new Duelist(ProgramController.currUser); + Duelist duelist2 = new Duelist(Objects.requireNonNull(User.getUserByUsername(duelMenuController.duelistName))); + Battlefield battlefield; + if (how.equals("oneToTwo")) { + battlefield = new Battlefield(duelist1, duelist2, 2); + battlefield.isOneRound = false; + } + else{ + battlefield = new Battlefield(duelist1, duelist2, 3); + battlefield.isOneRound = false; + } + } + } + }); + + hBox1.getChildren().addAll(label, button1, button2, button); + hBox1.setSpacing(10); + return hBox1; + } + + + private void addCard(BorderPane borderPane, GridPane gridPane, int i, String cardName) { + if(loc.equals("Main")) { + if (Card.allCards.get(cardName).getCardsType() == Type.MONSTER) { + ImageView imageView2 = new ImageView(new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + deck.mainDeck.get(i).getName() + ".jpg")).toExternalForm(), 140, 200, false, false)); + imageView2.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent mouseEvent) { + changeCardFunc(borderPane, cardName); + } + }); + gridPane.add(imageView2, i % 3, i / 3); + } else { + ImageView imageView2 = new ImageView(new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + deck.mainDeck.get(i).getName() + ".jpg")).toExternalForm(), 140, 200, false, false)); + imageView2.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent mouseEvent) { + changeCardFunc(borderPane, cardName); + } + }); + gridPane.add(imageView2, i % 3, i / 3); + } + } + else{ + if (Card.allCards.get(cardName).getCardsType() == Type.MONSTER) { + ImageView imageView2 = new ImageView(new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + deck.sideDeck.get(i).getName() + ".jpg")).toExternalForm(), 140, 200, false, false)); + imageView2.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent mouseEvent) { + changeCardFunc(borderPane, cardName); + } + }); + gridPane.add(imageView2, i % 3, i / 3); + } else { + ImageView imageView2 = new ImageView(new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + deck.sideDeck.get(i).getName() + ".jpg")).toExternalForm(), 140, 200, false, false)); + imageView2.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent mouseEvent) { + changeCardFunc(borderPane, cardName); + } + }); + gridPane.add(imageView2, i % 3, i / 3); + } + } + } + + + public void changeCardFunc (BorderPane borderPane, String cardName){ + HBox hBox1 = new HBox(); + Label label = new Label(); + if (loc.equals("Main")){ + label.setText("Are you Sure You Want To Transfer " + cardName + " from Main to Side?"); + } + else{ + label.setText("Are you Sure You Want To Transfer " + cardName + " from Side to Main?"); + } + label.setFont(Font.font(20)); + label.setTextFill(Color.web("Black")); + + Button button1 = new Button("Yes"); + button1.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button1.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + if (loc.equals("Main")){ + Card card = null; + for (int i = 0; i result = alert.showAndWait(); + if(result.isEmpty()) System.exit(0); + } +} diff --git a/src/main/java/view/menus/CoinTossing.java b/src/main/java/view/menus/CoinTossing.java new file mode 100644 index 0000000..a56f7dd --- /dev/null +++ b/src/main/java/view/menus/CoinTossing.java @@ -0,0 +1,104 @@ +package view.menus; + +import controllers.ProgramController; +import controllers.menues.DuelMenuController; +import javafx.geometry.Pos; +import javafx.scene.ImageCursor; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.VBox; +import javafx.scene.media.AudioClip; +import javafx.scene.media.Media; +import javafx.scene.media.MediaPlayer; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import view.Main; +import view.UserInterface; + +import java.io.File; +import java.util.Objects; +import java.util.Random; + +public class CoinTossing{ + + private int tossSide = -1; + private final ImageView coinView = new ImageView(); + private int round; + private String duelistName; + + public void start(int round, String duelistName) { + this.round = round; + this.duelistName = duelistName; + + VBox vBox = new VBox(); + addUIControls(vBox); + + vBox.setAlignment(Pos.CENTER); + + Scene scene = new Scene(vBox,800,650); + + Image img = new Image(Objects.requireNonNull(this.getClass().getResource("cursor.png")).toExternalForm()); + ImageCursor cursor = new ImageCursor(img, 10, 10); + scene.setCursor(cursor); + + String style = Objects.requireNonNull(this.getClass().getResource("login/Login.css")).toExternalForm(); + scene.getStylesheets().add(style); + + Main.stage.setScene(scene); + } + + private void addUIControls(VBox vbox) { + Text welcomeText = new Text("Let's Duel"); + welcomeText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + + Button loginBtn = new Button("toss a coin"); + loginBtn.setOnAction(actionEvent -> { + AudioClip audioClip = new AudioClip(getClass().getResource("/music/COIN.mp3").toExternalForm()); + audioClip.play(); + tossButtonAction(); + }); + + Button duelBtn = new Button("Start"); + duelBtn.setOnAction(actionEvent -> duel()); + + vbox.getChildren().addAll(welcomeText, coinView, loginBtn, duelBtn); + } + + public void tossButtonAction() { + tossSide = generateRandomNumber(); + Image image; + + // if tossSide is 0, coin has landed on HEADS + switch (tossSide) { + case 0 -> { + image = new Image(Objects.requireNonNull(this.getClass().getResource("tail.jpg")).toExternalForm()); + coinView.setImage(image); + } + case 1 -> { + image = new Image(Objects.requireNonNull(this.getClass().getResource("head.jpg")).toExternalForm()); + coinView.setImage(image); + } + default -> tossSide = generateRandomNumber(); + } + } + + public int generateRandomNumber() { + Random rand = new Random(); + return(rand.nextInt(2)); + } + + private void duel(){ + if(tossSide == -1) UserInterface.printResponse("You have to Toss First"); + + else{ + DuelMenuController duelMenuController = DuelMenuController.getInstance(ProgramController.currUser); + if (round == 1) duelMenuController.oneRoundDuel(duelistName); + else duelMenuController.threeRoundDuel(duelistName); + } + } +} + + diff --git a/src/main/java/view/menus/DeckView.java b/src/main/java/view/menus/DeckView.java new file mode 100644 index 0000000..0cabe44 --- /dev/null +++ b/src/main/java/view/menus/DeckView.java @@ -0,0 +1,338 @@ +package view.menus; + +import controllers.Database.DataBase; +import controllers.menues.DeckMenu; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Pos; +import javafx.scene.ImageCursor; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.*; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.stage.Window; +import models.Card; +import models.CardStufs.Type; +import models.Deck; +import models.User; +import view.CreateGrid; +import view.Main; + +import java.util.ArrayList; +import java.util.Objects; +import java.util.Optional; + +import static models.Deck.allDecks; + +public class DeckView { + public User currUser; + private static DeckView singleToneClass = null; + + public DeckView(User currUser) { + this.currUser = currUser; + } + + public static DeckView getInstance (User currUser){ + if (singleToneClass == null) singleToneClass = new DeckView(currUser); + singleToneClass.currUser = currUser; + return singleToneClass; + } + + public void start() { + GridPane gridPane = CreateGrid.createGridPane(); + addUIControls(gridPane); + + Scene scene = new Scene(gridPane,800,650); + + Image img = new Image(Objects.requireNonNull(getClass().getResource("cursor.png")).toExternalForm()); + ImageCursor cursor = new ImageCursor(img, 10, 10); + scene.setCursor(cursor); + + String style = Objects.requireNonNull(getClass().getResource("deck/Deck.css")).toExternalForm(); + scene.getStylesheets().add(style); + + Main.stage.setScene(scene); + } + + private void addUIControls(GridPane grid) { + Text activeDeckText = new Text("ŁŽActive Deck"); + activeDeckText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + grid.add(activeDeckText,0 ,0); + + String activeDeckName = null; + if(currUser.getActiveDeck() == null || Deck.getDeckByName(currUser.getActiveDeck().getDeckName()) == null){ + Text noActiveDeckText = new Text("ŁŽNo Active Deck"); + noActiveDeckText.setFont(Font.font("tahoma", FontWeight.LIGHT ,20)); + grid.add(noActiveDeckText,0 ,1); + } + else{ + deckInRow(grid,currUser.getActiveDeck(),1); + activeDeckName = currUser.getActiveDeck().getDeckName(); + } + + Text otherDeckText = new Text("ŁŽOther Deck(s)"); + otherDeckText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + grid.add(otherDeckText,0 ,2); + + int i; + for (i = 0; i < Deck.allDecks.size(); i++) { + if(!Deck.allDecks.get(i).getDeckName().equals(activeDeckName) && Deck.allDecks.get(i).getOwnerName().equals(currUser.getUsername())) + deckInRow(grid,Deck.allDecks.get(i),i + 3); + } + + Text deckNameText = new Text("Enter new Deck Name"); + deckNameText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + grid.add(deckNameText,0,i + 3); + + Label lblDeck = new Label("Deck Name"); + + TextField deckName = new TextField(); + deckName.setPromptText("deckName"); + + Button addDeckButton = new Button("Add New Deck"); + addDeckButton.setOnAction(event -> { + showAlert(grid.getScene().getWindow(), "Add New Deck", DeckMenu.getInstance(currUser).createDeck(deckName.getText())); + DataBase.storeDecks(allDecks); + DataBase.saveTheUserList(User.getUsers()); + start(); + }); + + grid.addRow(i + 4,lblDeck, deckName, addDeckButton); + + Button exitButton = new Button("Exit"); + grid.add(exitButton, 0, i + 5); + exitButton.setOnAction(event -> { + new MainMenu().start(); + DataBase.storeDecks(allDecks); + DataBase.saveTheUserList(User.getUsers()); + }); + + + Button showCardButton = new Button("Show Card"); + grid.add(showCardButton, 2, i + 5); + showCardButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + showCard(); + } + }); + } + + private void deckInRow(GridPane grid, Deck deck, int i) { + Text deckNameText = new Text(deck.getDeckName() + "," + deck.mainDeck.size() +"," + deck.sideDeck.size()); + deckNameText.setFont(Font.font("tahoma", FontWeight.LIGHT ,20)); + + HBox hbox = new HBox(); + + Image starImage = new Image(Objects.requireNonNull(getClass().getResource("deck/star.png")).toExternalForm()); + ImageView star = new ImageView(starImage); + star.setFitHeight(50); + star.setFitWidth(50); + star.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> { + showAlert(grid.getScene().getWindow(), "Activate this Deck", DeckMenu.getInstance(currUser).setActive(deck.getDeckName())); + DataBase.storeDecks(allDecks); + DataBase.saveTheUserList(User.getUsers()); + start(); + }); + + Image pencilImage = new Image(Objects.requireNonNull(getClass().getResource("deck/pencil.png")).toExternalForm()); + ImageView pencil = new ImageView(pencilImage); + pencil.setFitHeight(50); + pencil.setFitWidth(50); + pencil.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> new inDeckMenu(deck,currUser).start()); + + Image eyeImage = new Image(Objects.requireNonNull(getClass().getResource("deck/eye.png")).toExternalForm()); + ImageView eye = new ImageView(eyeImage); + eye.setFitHeight(50); + eye.setFitWidth(50); + eye.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> new ShowDeck(deck,currUser).start()); + //adding tool tip + String toolTip = ""; + ArrayList cardsName = new ArrayList<>(); + for (int j = 0; j { + showAlert(grid.getScene().getWindow(), "Delete this Deck", DeckMenu.getInstance(currUser).deleteDeck(deck.getDeckName())); + DataBase.storeDecks(allDecks); + DataBase.saveTheUserList(User.getUsers()); + start(); + }); + + hbox.getChildren().addAll(star,pencil,eye,delete); + + grid.addRow(i,deckNameText,hbox); + } + + private void showAlert(Window owner, String title, String message) { + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle(title); + alert.setHeaderText(null); + alert.setContentText(message); + alert.initOwner(owner); + alert.showAndWait(); + } + + + public void showAlert2(Alert.AlertType alertType, Window owner, String title, String message) { + Alert alert = new Alert(alertType); + alert.setTitle(title); + alert.setHeaderText(null); + alert.setContentText(message); + alert.initOwner(owner); + + Optional result = alert.showAndWait(); + if(result.isEmpty()) System.exit(0); + //else if(result.get() == ButtonType.OK) new app().start(this.stage); + } + + + public void showCard (){ + VBox vBox = new VBox(); + vBox.setAlignment(Pos.CENTER); + + + Label label = new Label("Enter the cards name:"); + label.setFont(Font.font(20)); + label.setTextFill(Color.web("white")); + + + TextField textField = new TextField(); + HBox hBox = new HBox(textField); + hBox.setAlignment(Pos.CENTER); + textField.setPrefColumnCount(15); + + + HBox hBox1 = new HBox(); + hBox1.setAlignment(Pos.CENTER); + + + Button button = new Button("Search"); + button.setStyle("-fx-background-color: #000000," + + "linear-gradient(#7ebcea, #2f4b8f)," + + "linear-gradient(#426ab7, #263e75)," + + "linear-gradient(#395cab, #223768);" + + "-fx-background-insets: 0,1,2,3;" + + "-fx-background-radius: 3,2,2,2;" + + "-fx-padding: 12 30 12 30; -fx-text-fill: white;" + + "-fx-font-size: 12px;"); + button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + String cardsName = textField.getText(); + if (Card.allCards.containsKey(cardsName)){ + if (Card.allCards.get(cardsName).getCardsType() == Type.MONSTER){ + VBox vBox = new VBox(); + vBox.setAlignment(Pos.CENTER); + + Image image2 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + cardsName + ".jpg")).toExternalForm()); + ImageView imageView = new ImageView(image2); + + vBox.getChildren().addAll(imageView); + + HBox hBox1 = new HBox(); + hBox1.setAlignment(Pos.CENTER); + + vBox.getChildren().add(hBox1); + + // create a image + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/background.png")).toExternalForm()); + // create a background image + BackgroundImage backgroundimage = new BackgroundImage(image, + BackgroundRepeat.NO_REPEAT, + BackgroundRepeat.NO_REPEAT, + BackgroundPosition.DEFAULT, + BackgroundSize.DEFAULT); + // create Background + Background background = new Background(backgroundimage); + vBox.setBackground(background); + + Scene scene = new Scene(vBox); + new subStage("Show Card", scene); + } + else{ + VBox vBox = new VBox(); + vBox.setAlignment(Pos.CENTER); + + Image image2 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + cardsName + ".jpg")).toExternalForm()); + ImageView imageView = new ImageView(image2); + + vBox.getChildren().addAll(imageView); + + HBox hBox1 = new HBox(); + hBox1.setAlignment(Pos.CENTER); + + vBox.getChildren().add(hBox1); + + // create a image + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/background.png")).toExternalForm()); + // create a background image + BackgroundImage backgroundimage = new BackgroundImage(image, + BackgroundRepeat.NO_REPEAT, + BackgroundRepeat.NO_REPEAT, + BackgroundPosition.DEFAULT, + BackgroundSize.DEFAULT); + // create Background + Background background = new Background(backgroundimage); + vBox.setBackground(background); + + Scene scene = new Scene(vBox); + new subStage("Show Stage", scene); + } + } + else { + showAlert2(Alert.AlertType.INFORMATION, vBox.getScene().getWindow(), "Invalid Name", "Please enter a valid name."); + } + } + }); + + + hBox1.getChildren().addAll(button); + + + + vBox.getChildren().addAll(label, hBox, hBox1); + + + // create a image + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/background.png")).toExternalForm()); + // create a background image + BackgroundImage backgroundimage = new BackgroundImage(image, + BackgroundRepeat.NO_REPEAT, + BackgroundRepeat.NO_REPEAT, + BackgroundPosition.DEFAULT, + BackgroundSize.DEFAULT); + // create Background + Background background = new Background(backgroundimage); + vBox.setBackground(background); + + Scene scene = new Scene(vBox); + new subStage("Show Card", scene); + } +} + diff --git a/src/main/java/view/menus/DuelMenu.java b/src/main/java/view/menus/DuelMenu.java new file mode 100644 index 0000000..cdb6c30 --- /dev/null +++ b/src/main/java/view/menus/DuelMenu.java @@ -0,0 +1,147 @@ +package view.menus; + +import controllers.Battelfield.Battlefield; +import controllers.menues.DuelMenuController; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.scene.Scene; +import javafx.scene.control.*; + +import javax.swing.JOptionPane; +import javafx.scene.layout.GridPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import models.AI; +import models.Deck; +import models.Duelist; +import models.User; +import view.CreateGrid; +import view.Main; +import view.Responses; +import view.UserInterface; + +import java.util.Objects; + +public class DuelMenu { + + private static DuelMenu singleToneClass = null; + private User currUser; + + public DuelMenu(User currUser) { + this.currUser = currUser; + } + + public static DuelMenu getInstance (User currUser){ + if (singleToneClass == null) singleToneClass = new DuelMenu(currUser); + singleToneClass.currUser = currUser; + return singleToneClass; + } + public void run(Stage stage){ + GridPane gridPane = CreateGrid.createGridPane(); + + Text welcomeText = new Text("Duel Menu"); + welcomeText.getStyleClass().add("welcome-text"); + gridPane.add(welcomeText,0 ,0); + Text currUserName = new Text("User : "+currUser.getUsername()+" "+currUser.getNickName()); + currUserName.getStyleClass().add("user-text"); + + gridPane.add(currUserName,1,0); + Label lblPlayWithAI = new Label("Play with AI:"); + CheckBox gameWithAi = new CheckBox("AI"); + gridPane.addRow(1,lblPlayWithAI,gameWithAi); + + Label lblUsername = new Label("Username of your rival!"); + + TextField txtRival = new TextField(); + txtRival.setPromptText("username"); + gridPane.addRow(2,lblUsername,txtRival); + + Button back = new Button("back"); + + Button btnStartGame = new Button("Start Game!"); + + Label lblRounds= new Label("round to play"); + + ChoiceBox rounds = new ChoiceBox<>(); + rounds.setValue("1"); + // Add the items to the ChoiceBox + rounds.getItems().addAll("1", "3"); + // Create the Selection Message Label + Label result = new Label("Your selection is:"); + // Create the Selection Value Label + Label selectedValueLbl = new Label(); + // Bind the value property to the text property of the Label + selectedValueLbl.textProperty().bind(rounds.valueProperty()); + + gridPane.addRow(3,lblRounds,rounds); + gridPane.addRow(4,result,selectedValueLbl); + gridPane.addRow(5,back,btnStartGame); + + back.setOnMouseClicked(e-> new MainMenu().start()); + + btnStartGame.setOnMouseClicked(e->{ + DuelMenuController duelMenuController = DuelMenuController.getInstance(currUser); + if(gameWithAi.isSelected()){ + if(currUser.activeDeck == null) UserInterface.printResponse(currUser.getUsername() + " has no active deck"); + else if(!Deck.isValid(currUser.activeDeck.getDeckName())) UserInterface.printResponse(currUser.getUsername() + "'s deck is not valid"); + else if(!(rounds.getValue().equals("1") || rounds.getValue().equals("3"))) UserInterface.printResponse(Responses.NOT_SUPPORTED_ROUNDS); + else{ + Main.audioClip.stop(); + new Battlefield(new Duelist(currUser),new AI(User.getUserByUsername("admin")), 1); + } + } + else{ + if(User.getUserByUsername(txtRival.getText()) == null) JOptionPane.showMessageDialog(null, + "there is no player with this username"); + else if(currUser.getUsername().equals(txtRival.getText())) JOptionPane.showMessageDialog(null, + "you can't play with yourself"); + else if(currUser.activeDeck == null) JOptionPane.showMessageDialog(null, + currUser.getUsername() + " has no active deck"); + else if(Objects.requireNonNull(User.getUserByUsername(txtRival.getText())).activeDeck == null) + JOptionPane.showMessageDialog(null,txtRival.getText() + " has no active deck"); + else if(!Deck.isValid(currUser.activeDeck.getDeckName())) JOptionPane.showMessageDialog(null, + currUser.getUsername() + "'s deck is not valid"); + else if(!Deck.isValid(Objects.requireNonNull(User.getUserByUsername(txtRival.getText())).activeDeck.getDeckName())) + JOptionPane.showMessageDialog(null,txtRival.getText() + "'s deck is not valid"); + else if(rounds.getValue().equals("1")){ + Main.audioClip.stop(); + new CoinTossing().start(1,txtRival.getText()); + //duelMenuController.oneRoundDuel(txtRival.getText()); + } + else{ + Main.audioClip.stop(); + new CoinTossing().start(3,txtRival.getText()); + //duelMenuController.threeRoundDuel(txtRival.getText()); + } + } + }); + checkBoxEvent(gameWithAi, lblUsername, txtRival); + + Scene scene = new Scene(gridPane ,800 ,650); + String style= Objects.requireNonNull(this.getClass().getResource("duel/duel.css")).toExternalForm(); + scene.getStylesheets().add(style); + stage.centerOnScreen(); + stage.setScene(scene); + } + + + private void checkBoxEvent(CheckBox gameWithAi, Label lblUsername, TextField txtRival) { + gameWithAi.selectedProperty().addListener(new ChangeListener() + { + public void changed(ObservableValue ov, final Boolean value, final Boolean newValue) + { + if(newValue != null && newValue) + { + System.out.println("your selection is : game with AI"); + txtRival.visibleProperty().set(false); + lblUsername.visibleProperty().set(false); + } + else if(value){ + System.out.println("you not select AI"); + txtRival.visibleProperty().set(true); + lblUsername.visibleProperty().set(true); + } + } + }); + } +} diff --git a/src/main/java/view/menus/Game.java b/src/main/java/view/menus/Game.java new file mode 100644 index 0000000..3ba1be0 --- /dev/null +++ b/src/main/java/view/menus/Game.java @@ -0,0 +1,980 @@ +package view.menus; + +import controllers.Battelfield.Battlefield; +import controllers.Battelfield.ImageAdapter; +import controllers.Database.DataBase; +import controllers.ProgramController; +import controllers.Regex; +import controllers.menues.DuelMenuController; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Pos; +import javafx.scene.SnapshotParameters; +import javafx.scene.control.*; +import javafx.scene.input.ClipboardContent; +import javafx.scene.input.Dragboard; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.TransferMode; +import javafx.scene.media.AudioClip; +import javafx.scene.text.Font; +import javafx.stage.Stage; +import models.Card; +import models.CardStufs.FaceUp; +import javafx.scene.Scene; +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.*; +import javafx.scene.paint.Color; +import models.CardStufs.Type; +import models.Duelist; +import models.Monster.Monster; +import models.SpellAndTrap.SpellAndTrap; +import models.User; +import view.Main; +import view.UserInterface; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Objects; + +public class Game { + + String backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_normal.bmp")).toExternalForm(); + final String mainPhasePath = Objects.requireNonNull(this.getClass().getResource("game/phases/Main.png")).toExternalForm(); + final String endPhasePath = Objects.requireNonNull(this.getClass().getResource("game/phases/EndPhase.png")).toExternalForm(); + final String drawPhasePath = Objects.requireNonNull(this.getClass().getResource("game/phases/DrawPhase.png")).toExternalForm(); + final String battlePhasePath = Objects.requireNonNull(this.getClass().getResource("game/phases/BattlePhase.png")).toExternalForm(); + final String duelPhasePath = Objects.requireNonNull(this.getClass().getResource("game/phases/DuelPhase.png")).toExternalForm(); + final String standbyPhasePath = Objects.requireNonNull(this.getClass().getResource("game/phases/Standby.png")).toExternalForm(); + final String graveYardPath = Objects.requireNonNull(this.getClass().getResource("elements/graveYard.png")).toExternalForm(); + + final String fieldPath = Objects.requireNonNull(this.getClass().getResource("elements/field.png")).toExternalForm(); + final String dragDropPath = Objects.requireNonNull(this.getClass().getResource("img.png")).toExternalForm(); + + Image backGroundIMG = new Image(backGroundPath); + Image mainPhaseIMG = new Image(mainPhasePath,200,100,false,false); + Image endPhaseIMG = new Image(endPhasePath); + Image drawPhaseIMG = new Image(drawPhasePath); + Image battlePhaseIMG = new Image(battlePhasePath); + Image duelPhaseIMG = new Image(duelPhasePath); + Image standbyPhaseIMG = new Image(standbyPhasePath); + Image graveYardIMG = new Image(graveYardPath); + Image fieldIMG = new Image(fieldPath); + Image dragDropImg = new Image(dragDropPath); + AudioClip audioClip; + + public String stringForCheat = ""; + + public Canvas canvas = new Canvas(500, 450); + GraphicsContext graphic = canvas.getGraphicsContext2D(); + private Scene gameScene; + private Card dragCard = null; + public int dragPosition = -1; + Canvas canvasHealthBar1 = new Canvas(100,15); + GraphicsContext graphic1 = canvasHealthBar1.getGraphicsContext2D(); + Canvas canvasHealthBar2 = new Canvas(100,15); + GraphicsContext graphic2 = canvasHealthBar2.getGraphicsContext2D(); + BorderPane root = new BorderPane(); + private Stage currStage; + Battlefield battlefield; + public Game(Battlefield battlefield){ + this.battlefield = battlefield; + audioClip = new AudioClip(getClass().getResource("/music/game.mp3").toExternalForm()); + audioClip.setCycleCount(-1); + audioClip.play(); + } + + public void addChanges(){ + + keyPressed(); + + mouseEventClick(); + + setFieldZoneBackground(); + + graphic.clearRect(0, 0, 500, 450); + graphic.drawImage(backGroundIMG,0,0,500,450); + initGraveYardAndFieldZone(); + + //building rivals spell and trap zone + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.spellTrapZone.get(i) != null && battlefield.getOpponent().field.spellTrapZone.get(i).getCardsFace() == FaceUp.ATTACK) { + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + + battlefield.getOpponent().field.spellTrapZone.get(i).getName() + ".jpg")).toExternalForm(), 275, 275, false, false); + if (i == 0) ImageAdapter.setSpellOrTrapOn5Rival(graphic, image); + if (i == 1) ImageAdapter.setSpellOrTrapOn3Rival(graphic, image); + if (i == 2) ImageAdapter.setSpellOrTrapOn1Rival(graphic, image); + if (i == 3) ImageAdapter.setSpellOrTrapOn2Rival(graphic, image); + if (i == 4) ImageAdapter.setSpellOrTrapOn4Rival(graphic, image); + } + else if (battlefield.getOpponent().field.spellTrapZone.get(i) != null && battlefield.getOpponent().field.spellTrapZone.get(i).getCardsFace() == FaceUp.DEFENSE_BACK) { + Image image = new Image(Objects.requireNonNull(this.getClass().getResource("elements/deck.png")).toExternalForm(), 275, 275, false, false); + if (i == 0) ImageAdapter.setSpellOrTrapOn5Rival(graphic, image); + if (i == 1) ImageAdapter.setSpellOrTrapOn3Rival(graphic, image); + if (i == 2) ImageAdapter.setSpellOrTrapOn1Rival(graphic, image); + if (i == 3) ImageAdapter.setSpellOrTrapOn2Rival(graphic, image); + if (i == 4) ImageAdapter.setSpellOrTrapOn4Rival(graphic, image); + } + } + + //building rivals monster zone + for (int i = 0; i<5; ++i){ + if (battlefield.getOpponent().field.monsterZone.get(i) != null && battlefield.getOpponent().field.monsterZone.get(i).getCardsFace() == FaceUp.ATTACK) { + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + + battlefield.getOpponent().field.monsterZone.get(i).getName() + ".jpg")).toExternalForm(), 275, 275, false, false); + if (i == 0) ImageAdapter.setMonsterOn5Rival(graphic, image); + if (i == 1) ImageAdapter.setMonsterOn3Rival(graphic, image); + if (i == 2) ImageAdapter.setMonsterOn1Rival(graphic, image); + if (i == 3) ImageAdapter.setMonsterOn2Rival(graphic, image); + if (i == 4) ImageAdapter.setMonsterOn4Rival(graphic, image); + } + else if (battlefield.getOpponent().field.monsterZone.get(i) != null && battlefield.getOpponent().field.monsterZone.get(i).getCardsFace() == FaceUp.DEFENSE_BACK) { + Image image = new Image(Objects.requireNonNull(this.getClass().getResource("elements/deck.png")).toExternalForm(), 275, 275, false, false); + // + ImageView iv = new ImageView(image); + iv.setRotate(90); + + SnapshotParameters params = new SnapshotParameters(); + params.setFill(Color.TRANSPARENT); + + Image rotatedImage = iv.snapshot(params, null); + // + if (i == 0) ImageAdapter.setMonsterOn5Rival(graphic, rotatedImage); + if (i == 1) ImageAdapter.setMonsterOn3Rival(graphic, rotatedImage); + if (i == 2) ImageAdapter.setMonsterOn1Rival(graphic, rotatedImage); + if (i == 3) ImageAdapter.setMonsterOn2Rival(graphic, rotatedImage); + if (i == 4) ImageAdapter.setMonsterOn4Rival(graphic, rotatedImage); + } + else if (battlefield.getOpponent().field.monsterZone.get(i) != null && battlefield.getOpponent().field.monsterZone.get(i).getCardsFace() == FaceUp.DEFENSE_FRONT) { + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + + battlefield.getOpponent().field.monsterZone.get(i).getName() + ".jpg")).toExternalForm(), 275, 275, false, false); + ImageView iv = new ImageView(image); + iv.setRotate(90); + + SnapshotParameters params = new SnapshotParameters(); + params.setFill(Color.TRANSPARENT); + + Image rotatedImage = iv.snapshot(params, null); + if (i == 0) ImageAdapter.setMonsterOn5Rival(graphic, rotatedImage); + if (i == 1) ImageAdapter.setMonsterOn3Rival(graphic, rotatedImage); + if (i == 2) ImageAdapter.setMonsterOn1Rival(graphic, rotatedImage); + if (i == 3) ImageAdapter.setMonsterOn2Rival(graphic, rotatedImage); + if (i == 4) ImageAdapter.setMonsterOn4Rival(graphic, rotatedImage); + } + } + + //building rivals graveyard + if (battlefield.getOpponent().field.graveYard.size() > 0){ + Image image = new Image(Objects.requireNonNull(this.getClass().getResource("elements/deck.png")).toExternalForm(), 275, 275, false, false); + ImageAdapter.setCardOnOpponentGraveYard(graphic, image); + } + + //building rivals field zone spell + if (battlefield.getOpponent().field.fieldZone != null){ + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + + battlefield.getOpponent().field.fieldZone.getName() + ".jpg")).toExternalForm(), 275, 275, false, false); + ImageAdapter.setCardOnOpponentFieldZone(graphic, image); + } + + //building turn field zone spell + if (battlefield.getTurn().field.fieldZone != null){ + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + + battlefield.getTurn().field.fieldZone.getName() + ".jpg")).toExternalForm(), 275, 275, false, false); + ImageAdapter.setCardOnTurnFieldZone(graphic, image); + } + + //building turn graveyard + if (battlefield.getTurn().field.graveYard.size() > 0){ + Image image = new Image(Objects.requireNonNull(this.getClass().getResource("elements/deck.png")).toExternalForm(), 275, 275, false, false); + ImageAdapter.setCardOnTurnGraveYard(graphic, image); + } + + //building turn monster zone + for (int i = 0; i<5; ++i){ + if (battlefield.getTurn().field.monsterZone.get(i) != null && battlefield.getTurn().field.monsterZone.get(i).getCardsFace() == FaceUp.ATTACK) { + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + + battlefield.getTurn().field.monsterZone.get(i).getName() + ".jpg")).toExternalForm(), 275, 275, false, false); + if (i == 0) ImageAdapter.setMonsterOn5(graphic, image); + if (i == 1) ImageAdapter.setMonsterOn3(graphic, image); + if (i == 2) ImageAdapter.setMonsterOn1(graphic, image); + if (i == 3) ImageAdapter.setMonsterOn2(graphic, image); + if (i == 4) ImageAdapter.setMonsterOn4(graphic, image); + } + else if (battlefield.getTurn().field.monsterZone.get(i) != null && battlefield.getTurn().field.monsterZone.get(i).getCardsFace() == FaceUp.DEFENSE_BACK) { + Image image = new Image(Objects.requireNonNull(this.getClass().getResource("elements/deck.png")).toExternalForm(), 275, 275, false, false); + ImageView iv = new ImageView(image); + iv.setRotate(90); + + SnapshotParameters params = new SnapshotParameters(); + params.setFill(Color.TRANSPARENT); + + Image rotatedImage = iv.snapshot(params, null); + if (i == 0) ImageAdapter.setMonsterOn5(graphic, rotatedImage); + if (i == 1) ImageAdapter.setMonsterOn3(graphic, rotatedImage); + if (i == 2) ImageAdapter.setMonsterOn1(graphic, rotatedImage); + if (i == 3) ImageAdapter.setMonsterOn2(graphic, rotatedImage); + if (i == 4) ImageAdapter.setMonsterOn4(graphic, rotatedImage); + } + else if (battlefield.getTurn().field.monsterZone.get(i) != null && battlefield.getTurn().field.monsterZone.get(i).getCardsFace() == FaceUp.DEFENSE_FRONT) { + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + + battlefield.getTurn().field.monsterZone.get(i).getName() + ".jpg")).toExternalForm(), 275, 275, false, false); + ImageView iv = new ImageView(image); + iv.setRotate(90); + + SnapshotParameters params = new SnapshotParameters(); + params.setFill(Color.TRANSPARENT); + + Image rotatedImage = iv.snapshot(params, null); + if (i == 0) ImageAdapter.setMonsterOn5(graphic, rotatedImage); + if (i == 1) ImageAdapter.setMonsterOn3(graphic, rotatedImage); + if (i == 2) ImageAdapter.setMonsterOn1(graphic, rotatedImage); + if (i == 3) ImageAdapter.setMonsterOn2(graphic, rotatedImage); + if (i == 4) ImageAdapter.setMonsterOn4(graphic, rotatedImage); + } + } + + //building turn spell zone + for (int i = 0; i<5; ++i){ + if (battlefield.getTurn().field.spellTrapZone.get(i) != null && battlefield.getTurn().field.spellTrapZone.get(i).getCardsFace() == FaceUp.ATTACK) { + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + + battlefield.getTurn().field.spellTrapZone.get(i).getName() + ".jpg")).toExternalForm(), 275, 275, false, false); + if (i == 0) ImageAdapter.setSpellOrTrapOn5(graphic, image); + if (i == 1) ImageAdapter.setSpellOrTrapOn3(graphic, image); + if (i == 2) ImageAdapter.setSpellOrTrapOn1(graphic, image); + if (i == 3) ImageAdapter.setSpellOrTrapOn2(graphic, image); + if (i == 4) ImageAdapter.setSpellOrTrapOn4(graphic, image); + } + else if (battlefield.getTurn().field.spellTrapZone.get(i) != null && battlefield.getTurn().field.spellTrapZone.get(i).getCardsFace() == FaceUp.DEFENSE_BACK) { + Image image = new Image(Objects.requireNonNull(this.getClass().getResource("elements/deck.png")).toExternalForm(), 275, 275, false, false); + if (i == 0) ImageAdapter.setSpellOrTrapOn5(graphic, image); + if (i == 1) ImageAdapter.setSpellOrTrapOn3(graphic, image); + if (i == 2) ImageAdapter.setSpellOrTrapOn1(graphic, image); + if (i == 3) ImageAdapter.setSpellOrTrapOn2(graphic, image); + if (i == 4) ImageAdapter.setSpellOrTrapOn4(graphic, image); + } + } + + //update left + VBox vBoxLeft = makeLeftBar(battlefield.getTurn(), battlefield.getOpponent()); + + //update Turn hand + HBox handTurn = new HBox(); + for (int i = 0; i < battlefield.getTurn().field.hand.size(); i++) { + Card card = battlefield.getTurn().field.hand.get(i); + Image image2; + ImageView img; + if (card.getCardsType().equals(Type.MONSTER)) + image2 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + card.getName() + ".jpg")).toExternalForm(), 50, 100, false, false); + else + image2 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + card.getName() + ".jpg")).toExternalForm(), 50, 100, false, false); + + img = new ImageView(image2); + img.setOnDragDone(event -> { + try { + Thread.sleep(20); + } catch (InterruptedException e) { + e.printStackTrace(); + } + if (card.getCardsType() == Type.MONSTER) { + BorderPane borderPane = new BorderPane(); + VBox vBox1 = new VBox(); + Label label2 = new Label("Set Or Summon"); + label2.setTextFill(Color.web("black")); + label2.setFont(Font.font(20)); + Button summonBtn = new Button("Summon"); + summonBtn.setOnAction(actionEvent -> { + battlefield.tributeBtn.setDisable(false); + AudioClip audioClip = new AudioClip(getClass().getResource("/music/SUMMON&SET.mp3").toExternalForm()); + audioClip.play(); + battlefield.selectedCard = card; + if (dragPosition != -1) battlefield.summon(dragPosition); + addChanges(); + currStage.close(); + }); + Button setBtn = new Button("Set"); + setBtn.setOnAction(actionEvent -> { + AudioClip audioClip = new AudioClip(getClass().getResource("/music/SUMMON&SET.mp3").toExternalForm()); + audioClip.play(); + battlefield.selectedCard = card; + if (dragPosition != -1) battlefield.set(dragPosition); + addChanges(); + currStage.close(); + }); + Button backBtn = new Button("Back"); + backBtn.setOnMouseClicked(e -> currStage.close()); + + Label textField = new Label("Place of your card : " + dragPosition); + vBox1.getChildren().addAll(label2, setBtn, summonBtn, textField); + borderPane.setLeft(vBox1); + borderPane.setBottom(backBtn); + Image imageOfCard = new Image(img.getImage().getUrl(), 200, 200, false, false); + borderPane.setRight(new ImageView(imageOfCard)); + Scene scene = new Scene(borderPane, 500, 400); + String style = Objects.requireNonNull(this.getClass().getResource("game/game.css")).toExternalForm(); + scene.getStylesheets().add(style); + subStage stg = new subStage("Set/Summon", scene); + currStage = stg.getStage(); + } + else{ + BorderPane borderPane = new BorderPane(); + VBox vBox1 = new VBox(); + Label label2 = new Label("Set Or Active"); + label2.setTextFill(Color.web("black")); + label2.setFont(Font.font(20)); + Button summonBtn = new Button("Active"); + summonBtn.setOnAction(actionEvent -> { + battlefield.selectedCard = card; + card.setCardsFace(FaceUp.ATTACK); + if (dragPosition != -1) battlefield.activeSpell("firstTime"); + addChanges(); + currStage.close(); + }); + Button setBtn = new Button("Set"); + setBtn.setOnAction(actionEvent -> { + AudioClip audioClip = new AudioClip(getClass().getResource("/music/SUMMON&SET.mp3").toExternalForm()); + audioClip.play(); + battlefield.selectedCard = card; + if (dragPosition != -1) { + System.out.println("heheheheheheheheh"); + battlefield.set(dragPosition); + } + addChanges(); + currStage.close(); + }); + Button backBtn = new Button("Back"); + backBtn.setOnMouseClicked(e -> currStage.close()); + + Label textField = new Label("Place of your card : " + dragPosition); + vBox1.getChildren().addAll(label2, setBtn, summonBtn, textField); + borderPane.setLeft(vBox1); + borderPane.setBottom(backBtn); + Image imageOfCard = new Image(img.getImage().getUrl(), 200, 200, false, false); + borderPane.setRight(new ImageView(imageOfCard)); + Scene scene = new Scene(borderPane, 500, 400); + String style = Objects.requireNonNull(this.getClass().getResource("game/game.css")).toExternalForm(); + scene.getStylesheets().add(style); + subStage stg = new subStage("Set/Active", scene); + currStage = stg.getStage(); + } + }); + img.setOnDragDetected(e->{ + System.out.println("image on drag"); + Dragboard db = img.startDragAndDrop(TransferMode.ANY); + ClipboardContent content = new ClipboardContent(); + content.putImage(img.getImage()); + db.setContent(content); + }); + + handTurn.getChildren().add(img); + handTurn.setAlignment(Pos.CENTER); + } + + //update Opponent hand + HBox handOpponent = new HBox(); + for (int i = 0; i < battlefield.getOpponent().field.hand.size(); i++) { + Image image2 = new Image(Objects.requireNonNull(this.getClass().getResource("elements/deck.png")).toExternalForm(), 50, 100, false, false); + + ImageView img = new ImageView(image2); + + handOpponent.getChildren().add(img); + handOpponent.setAlignment(Pos.CENTER); + } + + root = new BorderPane(); + root.setCenter(canvas); + root.setRight(makeRightBar()); + root.setLeft(vBoxLeft); + root.setTop(handOpponent); + root.setBottom(handTurn); + + gameScene = new Scene(root ,900 ,660); + + stylingGame(); + + Main.stage.setScene(gameScene); + checkEnd(); + } + + private void setFieldZoneBackground() { + if(battlefield.opponent.field.fieldZone != null){ + switch (battlefield.opponent.field.fieldZone.getName()) { + case "Yami" -> backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_yami.bmp")).toExternalForm(); + case "Forest" -> backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_mori.bmp")).toExternalForm(); + case "Closed Forest" -> backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_sougen.bmp")).toExternalForm(); + case "Umiiruka" -> backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_umi.bmp")).toExternalForm(); + case "Sword of dark destruction" -> backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_yama.bmp")).toExternalForm(); + } + backGroundIMG = new Image(backGroundPath); + } + + if(battlefield.turn.field.fieldZone != null){ + switch (battlefield.turn.field.fieldZone.getName()) { + case "Yami" -> backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_yami.bmp")).toExternalForm(); + case "Forest" -> backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_mori.bmp")).toExternalForm(); + case "Closed Forest" -> backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_sougen.bmp")).toExternalForm(); + case "Umiiruka" -> backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_umi.bmp")).toExternalForm(); + case "Sword of dark destruction" -> backGroundPath = Objects.requireNonNull(this.getClass().getResource("field/fie_yama.bmp")).toExternalForm(); + } + backGroundIMG = new Image(backGroundPath); + } + } + + private void checkEnd() { + if(battlefield.turn.LP <= 0){ + battlefield.winner = battlefield.opponent; + DuelMenuController duelMenuController = DuelMenuController.getInstance(ProgramController.currUser); + if(battlefield.isOneRound) { + duelMenuController.finishround1(battlefield.opponent, battlefield.turn, battlefield); + DataBase.saveTheUserList(User.getUsers()); + audioClip.stop(); + Main.audioClip.play(); + DuelMenu.getInstance(ProgramController.currUser).run(Main.stage); + } + else { + if(battlefield.round == 1) duelMenuController.finishRound1(battlefield.turn,battlefield.opponent,battlefield); + else if(battlefield.round == 2) duelMenuController.finishRound2(battlefield.turn,battlefield.opponent,battlefield); + else if(battlefield.round == 3){ + duelMenuController.finishRound3(battlefield.turn,battlefield.opponent,battlefield); + duelMenuController.matchFinish(battlefield.turn,battlefield.opponent); + DataBase.saveTheUserList(User.getUsers()); + audioClip.stop(); + Main.audioClip.play(); + DuelMenu.getInstance(ProgramController.currUser).run(Main.stage); + } + } + } + if(battlefield.opponent.LP <= 0){ + battlefield.winner = battlefield.turn; + DuelMenuController duelMenuController = DuelMenuController.getInstance(ProgramController.currUser); + if(battlefield.isOneRound) { + duelMenuController.finishround1(battlefield.opponent, battlefield.turn, battlefield); + DataBase.saveTheUserList(User.getUsers()); + audioClip.stop(); + Main.audioClip.play(); + DuelMenu.getInstance(ProgramController.currUser).run(Main.stage); + } + else { + if(battlefield.round == 1) duelMenuController.finishRound1(battlefield.turn,battlefield.opponent,battlefield); + else if(battlefield.round == 2) duelMenuController.finishRound2(battlefield.turn,battlefield.opponent,battlefield); + else if(battlefield.round == 3){ + duelMenuController.finishRound3(battlefield.turn,battlefield.opponent,battlefield); + duelMenuController.matchFinish(battlefield.turn,battlefield.opponent); + DataBase.saveTheUserList(User.getUsers()); + audioClip.stop(); + Main.audioClip.play(); + DuelMenu.getInstance(ProgramController.currUser).run(Main.stage); + } + } + } + } + + + public void keyPressed (){ + canvas.setFocusTraversable(true); + canvas.setOnKeyPressed(new EventHandler() { + @Override + public void handle(KeyEvent keyEvent) { + if (keyEvent.getCode().getName().equalsIgnoreCase("ctrl")){ + stringForCheat += keyEvent.getCode().getName(); + } + if (keyEvent.getCode().getName().equalsIgnoreCase("shift")){ + if (stringForCheat.equalsIgnoreCase("ctrl")) + stringForCheat += keyEvent.getCode().getName(); + else + stringForCheat = ""; + } + if (keyEvent.getCode().getName().equalsIgnoreCase("c")){ + if (stringForCheat.equalsIgnoreCase("ctrlshift")){ + String command = UserInterface.getUserInput(); + if(Objects.isNull(command)); + else if(command.startsWith("select")) { + //play Sound needed + battlefield.forceAddedToHand(command); + } + else if(command.startsWith("duel set-winner")){ + battlefield.duelWinCheat(Regex.getMatcher(command,Regex.duelWinCheat)); + } + else if(command.startsWith("increase")) + battlefield.increaseLPCheat(Regex.getMatcher(command,Regex.increaseLPCheat)); + stringForCheat = ""; + } + else + stringForCheat = ""; + } + } + }); + } + + + public void mouseEventClick (){ + + canvas.setOnDragOver(e->{ + double x = e.getSceneX(); + double y = e.getSceneY(); + //5 | 3 | 1 | 2 | 4 + if (x >= 315 && x <= 373 && y >= 355 && y <= 413 && battlefield.getTurn().field.monsterZone.get(0) == null) { + dragPosition = 0; + dragCard = battlefield.turn.field.monsterZone.get(0); + } + else if (x >= 382 && x <= 438 && y >= 352 && y <= 412 && battlefield.getTurn().field.monsterZone.get(1) == null) { + dragPosition = 1; + dragCard = battlefield.turn.field.monsterZone.get(1); + } + else if (x >= 444.0 && x <= 511 && y >= 345 && y <= 421 && battlefield.getTurn().field.monsterZone.get(2) == null) { + dragPosition = 2; + dragCard = battlefield.turn.field.monsterZone.get(2); + } + else if (x >= 518 && x <= 575 && y >= 353 && y <= 415 && battlefield.getTurn().field.monsterZone.get(3) == null) { + dragPosition = 3; + dragCard = battlefield.turn.field.monsterZone.get(3); + } + else if (x >= 582.0 && x <= 646 && y >= 345 && y <= 421 && battlefield.getTurn().field.monsterZone.get(4) == null) { + dragPosition = 4; + dragCard = battlefield.turn.field.monsterZone.get(4); + } + else if (x >= 294 && x <= 361 && y >= 426 && y <= 490 && battlefield.getTurn().field.spellTrapZone.get(0) == null){ + dragPosition = 0; + dragCard = battlefield.turn.field.spellTrapZone.get(0); + } + else if (x >= 362 && x <= 420 && y >= 426 && y <= 490 && battlefield.getTurn().field.spellTrapZone.get(1) == null){ + dragPosition = 1; + dragCard = battlefield.turn.field.spellTrapZone.get(1); + } + else if (x >= 421 && x <= 489 && y >= 426 && y <= 490 && battlefield.getTurn().field.spellTrapZone.get(2) == null){ + dragPosition = 2; + dragCard = battlefield.turn.field.spellTrapZone.get(2); + } + else if (x >= 501 && x <= 556 && y >= 426 && y <= 490 && battlefield.getTurn().field.spellTrapZone.get(3) == null){ + dragPosition = 3; + dragCard = battlefield.turn.field.spellTrapZone.get(3); + } + else if (x >= 569 && x <= 626 && y >= 426 && y <= 490 && battlefield.getTurn().field.spellTrapZone.get(4) == null){ + dragPosition = 4; + dragCard = battlefield.turn.field.spellTrapZone.get(4); + } + }); + canvas.setOnMouseClicked(event -> { + double x = event.getSceneX(); + double y = event.getSceneY(); + System.out.println(x); + System.out.println(y); + //turn monster zone + if (x >= 309.0 && x <= 375 && y >= 345 && y <= 421) { + battlefield.isSpellSelected = false; + battlefield.selectedCard = battlefield.turn.field.monsterZone.get(0); + battlefield.selectedCardPosition = 0; + battlefield.attackGui(0); + } + else if (x >= 377.0 && x <= 442 && y >= 345 && y <= 421) { + battlefield.isSpellSelected = false; + battlefield.selectedCard = battlefield.turn.field.monsterZone.get(1); + battlefield.selectedCardPosition = 1; + battlefield.attackGui(1); + } + else if (x >= 444.0 && x <= 511 && y >= 345 && y <= 421) { + battlefield.isSpellSelected = false; + battlefield.selectedCard = battlefield.turn.field.monsterZone.get(2); + battlefield.selectedCardPosition = 2; + battlefield.attackGui(2); + } + else if (x >= 513.0 && x <= 580 && y >= 345 && y <= 421) { + battlefield.isSpellSelected = false; + battlefield.selectedCard = battlefield.turn.field.monsterZone.get(3); + battlefield.selectedCardPosition = 3; + battlefield.attackGui(3); + } + else if (x >= 582.0 && x <= 646 && y >= 345 && y <= 421) { + battlefield.isSpellSelected = false; + battlefield.selectedCard = battlefield.turn.field.monsterZone.get(4); + battlefield.selectedCardPosition = 4; + battlefield.attackGui(4); + } + //turn graveyard + else if (x >= 656 && x <= 710 && y >= 347 && y <= 419) + showGraveyard(battlefield.getTurn()); + //turn FieldZone + else if (x >= 250 && x <= 290 && y >= 349 && y <= 402) + showFieldZone(battlefield.getTurn()); + //opponent FieldZone + else if (x >= 665 && x <= 700 && y >= 255 && y <= 319) + showFieldZone(battlefield.getOpponent()); + //opponent graveyard + else if (x >= 233 && x <= 295 && y >= 251 && y <= 317) + showGraveyard(battlefield.getOpponent()); + //opponent monster zone + else if (x >= 311 && x <= 370 && y >= 259 && y <= 325 && battlefield.getOpponent().field.monsterZone.get(4) != null && battlefield.getOpponent().field.monsterZone.get(4).getCardsFace() != FaceUp.DEFENSE_BACK){ + battlefield.selectedCard = battlefield.getOpponent().field.monsterZone.get(4); + addChanges(); + } + else if (x >= 378 && x <= 441 && y >= 259 && y <= 325 && battlefield.getOpponent().field.monsterZone.get(3) != null && battlefield.getOpponent().field.monsterZone.get(3).getCardsFace() != FaceUp.DEFENSE_BACK){ + battlefield.selectedCard = battlefield.getOpponent().field.monsterZone.get(3); + addChanges(); + } + else if (x >= 447 && x <= 507 && y >= 259 && y <= 325 && battlefield.getOpponent().field.monsterZone.get(2) != null && battlefield.getOpponent().field.monsterZone.get(2).getCardsFace() != FaceUp.DEFENSE_BACK){ + battlefield.selectedCard = battlefield.getOpponent().field.monsterZone.get(2); + addChanges(); + } + else if (x >= 516 && x <= 575 && y >= 259 && y <= 325 && battlefield.getOpponent().field.monsterZone.get(1) != null && battlefield.getOpponent().field.monsterZone.get(1).getCardsFace() != FaceUp.DEFENSE_BACK){ + battlefield.selectedCard = battlefield.getOpponent().field.monsterZone.get(1); + addChanges(); + } + else if (x >= 585 && x <= 642 && y >= 259 && y <= 325 && battlefield.getOpponent().field.monsterZone.get(0) != null && battlefield.getOpponent().field.monsterZone.get(0).getCardsFace() != FaceUp.DEFENSE_BACK){ + battlefield.selectedCard = battlefield.getOpponent().field.monsterZone.get(0); + addChanges(); + } + //opponent spell and trap zone + else if (x >= 311 && x <= 370 && y >= 183 && y <= 253 && battlefield.getOpponent().field.spellTrapZone.get(4) != null && battlefield.getOpponent().field.spellTrapZone.get(4).getCardsFace() != FaceUp.DEFENSE_BACK){ + battlefield.selectedCard = battlefield.getOpponent().field.spellTrapZone.get(4); + addChanges(); + } + else if (x >= 378 && x <= 441 && y >= 183 && y <= 253 && battlefield.getOpponent().field.spellTrapZone.get(3) != null && battlefield.getOpponent().field.spellTrapZone.get(3).getCardsFace() != FaceUp.DEFENSE_BACK){ + battlefield.selectedCard = battlefield.getOpponent().field.spellTrapZone.get(3); + addChanges(); + } + else if (x >= 447 && x <= 507 && y >= 183 && y <= 253 && battlefield.getOpponent().field.spellTrapZone.get(2) != null && battlefield.getOpponent().field.spellTrapZone.get(2).getCardsFace() != FaceUp.DEFENSE_BACK){ + battlefield.selectedCard = battlefield.getOpponent().field.spellTrapZone.get(2); + addChanges(); + } + else if (x >= 516 && x <= 575 && y >= 183 && y <= 253 && battlefield.getOpponent().field.spellTrapZone.get(1) != null && battlefield.getOpponent().field.spellTrapZone.get(1).getCardsFace() != FaceUp.DEFENSE_BACK){ + battlefield.selectedCard = battlefield.getOpponent().field.spellTrapZone.get(1); + addChanges(); + } + else if (x >= 585 && x <= 642 && y >= 183 && y <= 253 && battlefield.getOpponent().field.spellTrapZone.get(0) != null && battlefield.getOpponent().field.spellTrapZone.get(0).getCardsFace() != FaceUp.DEFENSE_BACK){ + battlefield.selectedCard = battlefield.getOpponent().field.spellTrapZone.get(0); + addChanges(); + } + //turn spell and trap zone + else if (x >= 294 && x <= 361 && y >= 426 && y <= 490 && battlefield.getTurn().field.spellTrapZone.get(0) != null){ + battlefield.isSpellSelected = true; + battlefield.attackGui(0); + } + else if (x >= 362 && x <= 420 && y >= 426 && y <= 490 && battlefield.getTurn().field.spellTrapZone.get(1) != null){ + battlefield.isSpellSelected = true; + battlefield.attackGui(1); + } + else if (x >= 431 && x <= 489 && y >= 426 && y <= 490 && battlefield.getTurn().field.spellTrapZone.get(2) != null){ + battlefield.isSpellSelected = true; + battlefield.attackGui(2); + } + else if (x >= 501 && x <= 556 && y >= 426 && y <= 490 && battlefield.getTurn().field.spellTrapZone.get(3) != null){ + battlefield.isSpellSelected = true; + battlefield.attackGui(3); + } + else if (x >= 569 && x <= 626 && y >= 430 && y <= 427 && battlefield.getTurn().field.spellTrapZone.get(4) != null){ + battlefield.isSpellSelected = true; + battlefield.attackGui(4); + } + }); + } + + private void showFieldZone(Duelist duelist) { + Canvas newCanvas = new Canvas(); + GraphicsContext newGraphic = newCanvas.getGraphicsContext2D(); + newGraphic.clearRect(0, 0, 500, 450); + + ScrollPane scrollPane = new ScrollPane(); + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.TOP_CENTER); + VBox vBox = new VBox(gridPane); + vBox.setAlignment(Pos.CENTER); + + Card fieldZone = duelist.field.fieldZone; + if(fieldZone == null) { + UserInterface.printResponse("No card in fieldZone"); + return; + } + else if (fieldZone.getCardsType() == Type.MONSTER) { + Image image2 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + fieldZone.getName() + ".jpg")).toExternalForm(), 300, 300, false, false); + ImageView imageView2 = new ImageView(image2); + gridPane.add(imageView2,0,1); + } + else { + Image image2 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + fieldZone.getName() + ".jpg")).toExternalForm(), 300, 300, false, false); + ImageView imageView2 = new ImageView(image2); + gridPane.add(imageView2, 0, 1); + } + Button addToGravYard = new Button("send to graveYard"); + + addToGravYard.setOnMouseClicked(e->{ + if(battlefield.selectedCard.getCardsType().equals(Type.MONSTER)) + ((Monster)battlefield.selectedCard).removeMonster(battlefield); + else + ((SpellAndTrap)battlefield.selectedCard).removeSpellOrTrap(battlefield); + }); + scrollPane.setContent(vBox); + BorderPane root2 = new BorderPane(); + root2.setCenter(scrollPane); + root2.setBottom(addToGravYard); + Scene scene = new Scene(root2); + new subStage("Field Zone",scene); + } + + public void initGraveYardAndFieldZone() { + ImageAdapter.setCardOnOpponentGraveYard(graphic,graveYardIMG); + ImageAdapter.setCardOnTurnGraveYard(graphic,graveYardIMG); + ImageAdapter.setCardOnOpponentFieldZone(graphic,fieldIMG); + ImageAdapter.setCardOnTurnFieldZone(graphic,fieldIMG); + } + + private void stylingGame() { + canvas.setStyle("-fx-padding: 20"); + String style= Objects.requireNonNull(this.getClass().getResource("game/game.css")).toExternalForm(); + gameScene.getStylesheets().add(style); + } + + private VBox makeLeftBar(Duelist duelist1, Duelist duelist2) { + refreshHealthBar(duelist1, duelist2); + + ImageView imgDuelist1 = new ImageView("file:"+ duelist1.getUser().getUsername()+".png"); + imgDuelist1.setFitHeight(100); + imgDuelist1.setFitWidth(100); + ImageView imgDuelist2 = new ImageView("file:"+ duelist2.getUser().getUsername()+".png"); + imgDuelist2.setFitHeight(100); + imgDuelist2.setFitWidth(100); + + VBox vbox1 = new VBox(); + Label lblDuelist1Name = new Label("Nickname : " + duelist1.getUser().getNickName()); + lblDuelist1Name.setAlignment(Pos.CENTER); + Label lblDuelist1LP = new Label("LP : " + duelist1.LP); + lblDuelist1LP.setAlignment(Pos.CENTER); + + vbox1.getChildren().addAll(imgDuelist1,lblDuelist1Name,lblDuelist1LP,canvasHealthBar1); + + Image imageDeck ; + if(battlefield.selectedCard == null) imageDeck = new Image(Objects.requireNonNull(this.getClass().getResource("elements/deck.png")).toExternalForm(), 50, 100, false, false); + else { + if (battlefield.selectedCard.getCardsType().equals(Type.MONSTER)) + imageDeck = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + battlefield.selectedCard.getName() + ".jpg")).toExternalForm(), 50, 100, false, false); + else + imageDeck = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + battlefield.selectedCard.getName() + ".jpg")).toExternalForm(), 50, 100, false, false); + } + ImageView imgDeck = new ImageView((imageDeck)); + imgDeck.setOnMouseClicked(e->{ + ScrollPane scrollPane = new ScrollPane(); + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.TOP_CENTER); + VBox vBox = new VBox(gridPane); + vBox.setAlignment(Pos.CENTER); + + ArrayList deckCards = battlefield.getTurn().field.deck; + makeListOfCardsForShowing(gridPane, deckCards); + + Button button = new Button("Back"); + button.setStyle("-fx-background-color: linear-gradient(#ff5400, #be1d00);" + + "-fx-background-radius: 30; -fx-background-insets: 0; -fx-text-fill: white;"); + button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + root.setCenter(canvas); + addChanges(); + } + }); + + gridPane.add(button, 0, 1000); + Collections.shuffle(battlefield.getTurn().field.deck); + + scrollPane.setContent(vBox); + root.setCenter(scrollPane); + }); + imgDeck.setFitHeight(150); + imgDeck.setFitWidth(100); + VBox vBoxRight = new VBox(); + vBoxRight.setAlignment(Pos.CENTER); + vBoxRight.setSpacing(4); + vBoxRight.getChildren().addAll(imgDeck); + + VBox vbox2 = new VBox(); + Label lblDuelist2Name = new Label("Nickname : " + duelist2.getUser().getNickName()); + lblDuelist2Name.setAlignment(Pos.CENTER); + Label lblDuelist2LP = new Label("LP : " + duelist2.LP); + lblDuelist2LP.setAlignment(Pos.CENTER); + + vbox2.getChildren().addAll(canvasHealthBar2, lblDuelist2LP, lblDuelist2Name, imgDuelist2); + + VBox vboxLeft = new VBox(); + vboxLeft.getChildren().addAll(vbox2, vBoxRight, vbox1); + + return vboxLeft; + } + + public void makeListOfCardsForShowing(GridPane gridPane, ArrayList deckCards) { + for (int i = 0; i { + battlefield.winner = battlefield.getOpponent(); + DuelMenuController duelMenuController = DuelMenuController.getInstance(ProgramController.currUser); + if(battlefield.isOneRound) { + duelMenuController.finishround1(battlefield.opponent, battlefield.turn, battlefield); + DataBase.saveTheUserList(User.getUsers()); + audioClip.stop(); + Main.audioClip.play(); + DuelMenu.getInstance(ProgramController.currUser).run(Main.stage); + } + else { + if(battlefield.round == 1) duelMenuController.finishRound1(battlefield.getOpponent(),battlefield.getWinner(),battlefield); + else if(battlefield.round == 2) duelMenuController.finishRound2(battlefield.getOpponent(),battlefield.getWinner(),battlefield); + else if(battlefield.round == 3){ + duelMenuController.finishRound3(battlefield.getOpponent(),battlefield.getWinner(),battlefield); + duelMenuController.matchFinish(battlefield.getOpponent(),battlefield.getWinner()); + DataBase.saveTheUserList(User.getUsers()); + audioClip.stop(); + Main.audioClip.play(); + DuelMenu.getInstance(ProgramController.currUser).run(Main.stage); + } + } + }); + Button btnNextPhase = new Button("next Phase!"); + btnNextPhase.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + battlefield.nextPhase(); + addChanges(); + } + }); + + Button settingBtn = new Button("Setting"); + settingBtn.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + HBox hBox = new HBox(); + hBox.setAlignment(Pos.CENTER); + VBox vBox = new VBox(); + vBox.setAlignment(Pos.CENTER); + Button extButton = new Button("Exit!"); + extButton.setStyle("-fx-background-color: linear-gradient(#ffd65b, #e68400)," + + "linear-gradient(#ffef84, #f2ba44)," + + "linear-gradient(#ffea6a, #efaa22)," + + "linear-gradient(#ffe657 0%, #f8c202 50%, #eea10b 100%)," + + "linear-gradient(from 0% 0% to 15% 50%, rgba(255,255,255,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 30;" + + "-fx-background-insets: 0,1,2,3,0;" + + "-fx-text-fill: #654b00;" + + "-fx-font-weight: bold;" + + "-fx-font-size: 14px;" + + "-fx-padding: 10 20 10 20;"); + Button backButton = new Button("Back"); + backButton.setStyle("-fx-background-color: linear-gradient(#ffd65b, #e68400)," + + "linear-gradient(#ffef84, #f2ba44)," + + "linear-gradient(#ffea6a, #efaa22)," + + "linear-gradient(#ffe657 0%, #f8c202 50%, #eea10b 100%)," + + "linear-gradient(from 0% 0% to 15% 50%, rgba(255,255,255,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 30;" + + "-fx-background-insets: 0,1,2,3,0;" + + "-fx-text-fill: #654b00;" + + "-fx-font-weight: bold;" + + "-fx-font-size: 14px;" + + "-fx-padding: 10 20 10 20;"); + + vBox.getChildren().addAll(backButton, extButton); + hBox.getChildren().add(vBox); + + Scene scene = new Scene(hBox, 600, 600); + String style= Objects.requireNonNull(this.getClass().getResource("game/game.css")).toExternalForm(); + scene.getStylesheets().add(style); + subStage myStage = new subStage("Setting", scene); + + + + backButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + myStage.stage.close(); + } + }); + + + extButton.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + myStage.stage.close(); + battlefield.winner = battlefield.getOpponent(); + DuelMenuController duelMenuController = DuelMenuController.getInstance(ProgramController.currUser); + duelMenuController.finishround1(battlefield.opponent, battlefield.turn, battlefield); + DataBase.saveTheUserList(User.getUsers()); + audioClip.stop(); + Main.audioClip.play(); + DuelMenu.getInstance(ProgramController.currUser).run(Main.stage); + } + }); + + + } + }); + + VBox vBoxLeft = new VBox(); + vBoxLeft.setAlignment(Pos.CENTER); + + vBoxLeft.getChildren().addAll(btnNextPhase,btnExit, settingBtn); + vBoxLeft.setSpacing(10); + return vBoxLeft; + } + + public void refreshHealthBar(Duelist duelist1, Duelist duelist2) { + float percentage1 =((float) duelist1.LP/80)/100; + float percentage2 =((float) duelist2.LP/80)/100; + graphic1.setFill(Color.RED); + graphic1.fillRect(0,0,100*percentage1,20); + graphic2.setFill(Color.RED); + graphic2.fillRect(0,0,100*percentage2,20); + } + + public GraphicsContext getMainGraphic() { + return graphic; + } + + public Image getBackGroundIMG() { + return backGroundIMG; + } + + public void showGraveyard (Duelist duelist){ + graphic.clearRect(0, 0, 500, 450); + Button button = new Button("Back"); + button.setStyle("-fx-background-color: linear-gradient(#ff5400, #be1d00);" + + "-fx-background-radius: 30; -fx-background-insets: 0; -fx-text-fill: white;"); + button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + root.setCenter(canvas); + addChanges(); + } + }); + button.setAlignment(Pos.CENTER); + + HBox hBox = new HBox(button); + hBox.setAlignment(Pos.CENTER); + + + ScrollPane scrollPane = new ScrollPane(); + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.TOP_CENTER); + VBox vBox = new VBox(gridPane); + vBox.setAlignment(Pos.CENTER); + + ArrayList graveyardCards = duelist.field.graveYard; + makeListOfCardsForShowing(gridPane, graveyardCards); + + gridPane.add(button, 0, 1000); + + + + scrollPane.setContent(vBox); + root.setCenter(scrollPane); + } +} diff --git a/src/main/java/view/menus/ImportExport.java b/src/main/java/view/menus/ImportExport.java new file mode 100644 index 0000000..83e4b33 --- /dev/null +++ b/src/main/java/view/menus/ImportExport.java @@ -0,0 +1,461 @@ +package view.menus; + +import controllers.Regex; +import controllers.ShowCard; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Insets; +import javafx.scene.Group; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.Pane; +import javafx.scene.layout.VBox; +import javafx.scene.text.Text; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import models.*; +import models.CardStufs.Type; +import models.Monster.Monster; +import models.SpellAndTrap.SpellAndTrap; +import view.CreateGrid; +import view.Main; +import view.UserInterface; + +import java.io.*; +import java.util.Objects; +import java.util.Scanner; +import java.util.regex.Matcher; + +import org.json.simple.JSONObject; + +public class ImportExport { + private static ImportExport singleToneClass = null; + private File fileForSave = null; + private Scene impExpScene; + private TextArea textArea = new TextArea(); + TextField txtName = new TextField(); + private Stage currStage; + public static ImportExport getInstance() { + if (singleToneClass == null) singleToneClass = new ImportExport(); + return singleToneClass; + } + + public void run(Stage stage) { + GridPane gridPane = CreateGrid.createGridPane(); + + Text welcomeText = new Text("Import Export Menu"); + welcomeText.getStyleClass().add("welcome-text"); + gridPane.addRow(1, welcomeText); + Label lblName = new Label("name of card"); + Label showCard = new Label("Selected Card is: "); + txtName.setPromptText("card Name..."); + gridPane.addRow(2, lblName, txtName); + + Button back = new Button("back"); + back.setOnMouseClicked(e -> { + Main.stage.setScene(MainMenu.mainMenuScene); + }); + + Button importBtn = new Button("import"); + Button exportBtn = new Button("export"); + gridPane.addRow(3, importBtn, exportBtn); + + gridPane.addRow(4, showCard, textArea); + gridPane.addRow(5, back); + importBtn.setOnMouseClicked(e -> { + importFile(stage); + }); + exportBtn.setOnMouseClicked(e -> { + if (txtName.getText().isEmpty() || txtName.getText().isBlank()) { + UserInterface.printResponse("please enter a name"); + } else + getFile(stage); + }); + Scene scene = new Scene(gridPane, 800, 650); + impExpScene = scene; + String style = Objects.requireNonNull(this.getClass().getResource("duel/duel.css")).toExternalForm(); + scene.getStylesheets().add(style); + stage.centerOnScreen(); + stage.setScene(scene); + } + + public void export(String name, Stage stage) { + + } + private void saveJson(String name) { + if (Card.allCards.get(name).getCardsType() == Type.MONSTER) { + Monster monster = (Monster) Card.allCards.get(name); + //Creating a JSONObject object + JSONObject jsonObject = new JSONObject(); + //Inserting key-value pairs into the json object + jsonObject.put("Name:", name); + jsonObject.put("Level:", monster.getLevel()); + jsonObject.put("Attribute:", monster.getAttribute()); + jsonObject.put("Monster Type:", monster.getMonsterType()); + jsonObject.put("Type:", monster.getCardTypeInExel()); + jsonObject.put("ATK:", monster.getAttack()); + jsonObject.put("DEF:", monster.getDefence()); + jsonObject.put("Description:", monster.getDescription()); + jsonObject.put("Price:", monster.getPrice()); + try { + FileWriter file = new FileWriter(name + ".json"); + file.write(jsonObject.toJSONString()); + file.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + System.out.println("JSON file created: "+jsonObject); + + } else { + SpellAndTrap spellAndTrap = (SpellAndTrap) Card.allCards.get(name); + if (spellAndTrap.getCardsType() == Type.SPELL) { + //Creating a JSONObject object + JSONObject jsonObject = new JSONObject(); + //Inserting key-value pairs into the json object + jsonObject.put("Name:", name); + jsonObject.put("Type:", "Trap"); + SimilarPartInSpellAndTrapJson(name, spellAndTrap, jsonObject); + } else { + //Creating a JSONObject object + JSONObject jsonObject = new JSONObject(); + //Inserting key-value pairs into the json object + jsonObject.put("Name:", name); + jsonObject.put("Type:", "Spell"); + SimilarPartInSpellAndTrapJson(name, spellAndTrap, jsonObject); + } + } + } + + private void SimilarPartInSpellAndTrapJson(String name, SpellAndTrap spellAndTrap, JSONObject jsonObject) { + jsonObject.put("Icon (Property):", spellAndTrap.getIcon()); + jsonObject.put("Status:", spellAndTrap.getStatus()); + jsonObject.put("Description:", spellAndTrap.getDescription()); + jsonObject.put("Price:", spellAndTrap.getPrice()); + try { + FileWriter file = new FileWriter(name + ".json"); + file.write(jsonObject.toJSONString()); + file.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + System.out.println("JSON file created: "+jsonObject); + } + + private void saveCsv(String name) { + if (Card.allCards.get(name).getCardsType() == Type.MONSTER) { + Monster monster = (Monster) Card.allCards.get(name); + try (PrintWriter writer = new PrintWriter(new File("test.csv"))) { + + StringBuilder sb = new StringBuilder(); + sb.append("Name,"); + sb.append(','); + sb.append("name"); + sb.append('\n'); + + sb.append("Level"); + sb.append(','); + sb.append(monster.getLevel()); + sb.append('\n'); + + sb.append("Attribute"); + sb.append(','); + sb.append(monster.getAttribute()); + sb.append('\n'); + + sb.append("Monster Type"); + sb.append(','); + sb.append(monster.getMonsterType()); + sb.append('\n'); + + sb.append("Type"); + sb.append(','); + sb.append(monster.getCardTypeInExel()); + sb.append('\n'); + + sb.append("ATK"); + sb.append(','); + sb.append(monster.getAttack()); + sb.append('\n'); + + sb.append("DEF"); + sb.append(','); + sb.append(monster.getDefence()); + sb.append('\n'); + + sb.append("Description"); + sb.append(','); + sb.append(monster.getDescription()); + sb.append('\n'); + + sb.append("Price"); + sb.append(','); + sb.append(monster.getPrice()); + sb.append('\n'); + writer.write(sb.toString()); + + System.out.println("done!"); + } catch (FileNotFoundException e) { + System.out.println(e.getMessage()); + } + } else { + SpellAndTrap spellAndTrap = (SpellAndTrap) Card.allCards.get(name); + if (spellAndTrap.getCardsType() == Type.SPELL) { + try (PrintWriter writer = new PrintWriter(new File("test.csv"))) { + + StringBuilder sb = new StringBuilder(); + sb.append("Name,"); + sb.append(','); + sb.append("name"); + sb.append('\n'); + + sb.append("Type"); + sb.append(','); + sb.append("Trap"); + similarPartInSpellAndTrap(spellAndTrap, writer, sb); + } catch (FileNotFoundException e) { + System.out.println(e.getMessage()); + } + } else { + try (PrintWriter writer = new PrintWriter(new File("test.csv"))) { + + StringBuilder sb = new StringBuilder(); + sb.append("Name,"); + sb.append(','); + sb.append("name"); + sb.append('\n'); + + sb.append("Type"); + sb.append(','); + sb.append("Spell"); + similarPartInSpellAndTrap(spellAndTrap, writer, sb); + } catch (FileNotFoundException e) { + System.out.println(e.getMessage()); + } + } + } + } + + private void similarPartInSpellAndTrap(SpellAndTrap spellAndTrap, PrintWriter writer, StringBuilder sb) { + sb.append('\n'); + + sb.append("Icon (Property)"); + sb.append(','); + sb.append(spellAndTrap.getIcon()); + sb.append('\n'); + + sb.append("Description"); + sb.append(','); + sb.append(spellAndTrap.getDescription()); + sb.append('\n'); + + sb.append("Status"); + sb.append(','); + sb.append(spellAndTrap.getStatus()); + sb.append('\n'); + + sb.append("Price"); + sb.append(','); + sb.append(spellAndTrap.getPrice()); + sb.append('\n'); + writer.write(sb.toString()); + + System.out.println("done!"); + } + + private void saveTxt(String name) { + try { + if (Card.allCards.get(name).getCardsType() == Type.MONSTER) { + Monster monster = (Monster) Card.allCards.get(name); + try { + FileWriter myWriter = new FileWriter(name + ".txt"); + myWriter.write("Name: " + name + "\n" + + "Level: " + monster.getLevel() + "\n" + + "Attribute: " + monster.getAttribute() + "\n" + + "Monster Type: " + monster.getMonsterType() + "\n" + + "Type: " + monster.getCardTypeInExel() + "\n" + + "ATK: " + monster.getAttack() + "\n" + + "DEF: " + monster.getDefence() + "\n" + + "Description: " + monster.getDescription() + "\n" + + "Price: " + monster.getPrice()); + myWriter.close(); + } catch (IOException e) { + System.out.println("An error occurred."); + e.printStackTrace(); + } + } else { + SpellAndTrap spellAndTrap = (SpellAndTrap) Card.allCards.get(name); + if (spellAndTrap.getCardsType() == Type.SPELL) { + try { + FileWriter myWriter = new FileWriter(name + ".txt"); + myWriter.write("Name: " + name + "\n" + + "Type: Spell\n" + + "Icon (Property): " + spellAndTrap.getIcon() + "\n" + + "Description: " + spellAndTrap.getDescription() + "\n" + + "Status: " + spellAndTrap.getStatus() + "\n" + + "Price: " + spellAndTrap.getPrice()); + myWriter.close(); + } catch (IOException e) { + System.out.println("An error occurred."); + e.printStackTrace(); + } + } else { + try { + FileWriter myWriter = new FileWriter(name + ".txt"); + myWriter.write("Name: " + name + "\n" + + "Type: Spell\n" + + "Icon (Property): " + spellAndTrap.getIcon() + "\n" + + "Description: " + spellAndTrap.getDescription() + "\n" + + "Status: " + spellAndTrap.getStatus() + "\n" + + "Price: " + spellAndTrap.getPrice()); + myWriter.close(); + } catch (IOException e) { + System.out.println("An error occurred."); + e.printStackTrace(); + } + } + } + }catch (Exception ex){ + ex.printStackTrace(); + } + + } + + public void getFile(Stage stage) { + stage.setTitle("Export"); + Group root = new Group(); + + Button buttonSave = new Button("Save"); + Button buttonBack = new Button("Back"); + buttonBack.setOnMouseClicked(e -> { + stage.setScene(impExpScene); + }); + buttonSave.setOnAction(new EventHandler() { + + @Override + public void handle(ActionEvent event) { + FileChooser fileChooser = new FileChooser(); + + //Set extension filter + fileChooser.getExtensionFilters().addAll( + new FileChooser.ExtensionFilter("TXT", "*.txt"), + new FileChooser.ExtensionFilter("Csv", "*.csv"), + new FileChooser.ExtensionFilter("Json", "*.json") + ); + + //Show save file dialog + File file = fileChooser.showSaveDialog(stage); + fileForSave = file; + if (file != null) { + if(fileForSave.getName().contains(".txt")){ + saveTxt(txtName.getText()); + } + else if(fileForSave.getName().contains(".csv")){ + saveCsv(txtName.getText()); + } + else if(fileForSave.getName().contains(".json")){ + saveJson(txtName.getText()); + } + + } + currStage.close(); + txtName.clear(); + } + }); + + VBox vBox = new VBox(); + vBox.getChildren().addAll(buttonBack, buttonSave); + + root.getChildren().add(vBox); + String style = Objects.requireNonNull(this.getClass().getResource("login/Login.css")).toExternalForm(); + Scene scene = new Scene(root, 300, 300); + scene.getStylesheets().add(style); + subStage stage1 = new subStage("Import/Export",scene); + currStage = stage1.getStage(); + } + + public void importFile(final Stage stage) { + stage.setTitle("Import"); + + final FileChooser fileChooser = new FileChooser(); + final Button openButton = new Button("Open a txt file.."); + + openButton.setOnAction( + new EventHandler() { + @Override + public void handle(final ActionEvent e) { + configureFileChooser(fileChooser); + File file = fileChooser.showOpenDialog(stage); + if (file != null) { + openFile(file); + } + stage.setScene(impExpScene); + } + }); + + final GridPane inputGridPane = new GridPane(); + Button btnBack = new Button("back"); + + btnBack.setOnMouseClicked(e -> { + stage.setScene(impExpScene); + }); + + GridPane.setConstraints(openButton, 0, 1); + + inputGridPane.setHgap(6); + inputGridPane.setVgap(6); + inputGridPane.getChildren().addAll(openButton); + + final Pane rootGroup = new VBox(12); + rootGroup.getChildren().addAll(inputGridPane, btnBack); + rootGroup.setPadding(new Insets(12, 12, 12, 12)); + String style = Objects.requireNonNull(this.getClass().getResource("login/Login.css")).toExternalForm(); + + Scene scene = new Scene(rootGroup, 300, 300); + scene.getStylesheets().add(style); + stage.setScene(scene); + stage.show(); + } + + private void configureFileChooser( + final FileChooser fileChooser) { + fileChooser.setTitle("View Files"); + fileChooser.setInitialDirectory( + new File(System.getProperty("user.home")) + ); + fileChooser.getExtensionFilters().addAll( + new FileChooser.ExtensionFilter("TXT", "*.txt"), + new FileChooser.ExtensionFilter("Csv", "*.csv"), + new FileChooser.ExtensionFilter("Json", "*.json") + ); + } + + private void openFile(File file) { + try { + Scanner myReader = new Scanner(file); + String data = myReader.nextLine(); + Matcher nameMatcher = Regex.getMatcher(data, Regex.extractName); + String nameInFile = nameMatcher.group(1); + if (!file.getName().equals(nameInFile + ".txt")) UserInterface.printResponse("Bad File chossen"); + else { + if(file.getName().contains(".txt")) + ShowCard.Cards(file.getName().replace(".txt", "")); + else if(file.getName().contains(".csv")) + ShowCard.Cards(file.getName().replace(".csv", "")); + else if(file.getName().contains(".json")) + ShowCard.Cards(file.getName().replace(".json", "")); + } + myReader.close(); + } catch (FileNotFoundException e) { + System.out.println("An error occurred."); + e.printStackTrace(); + } + + } + + public TextArea getTextArea() { + return textArea; + } +} diff --git a/src/main/java/view/menus/LoginMenu.java b/src/main/java/view/menus/LoginMenu.java new file mode 100644 index 0000000..59be1d5 --- /dev/null +++ b/src/main/java/view/menus/LoginMenu.java @@ -0,0 +1,92 @@ +package view.menus; + +import controllers.ProgramController; +import javafx.scene.ImageCursor; +import javafx.scene.image.Image; +import javafx.scene.input.KeyCode; +import models.User; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.GridPane; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.stage.Window; +import view.CreateGrid; +import view.Main; + +import java.util.Objects; + +public class LoginMenu{ + + public void start() { + GridPane grid = CreateGrid.createGridPane(); + addUIControl(grid); + + Scene scene = new Scene(grid,800,650); + + Image img = new Image(Objects.requireNonNull(this.getClass().getResource("cursor.png")).toExternalForm()); + ImageCursor cursor = new ImageCursor(img, 10, 10); + scene.setCursor(cursor); + + String style= Objects.requireNonNull(this.getClass().getResource("login/Login.css")).toExternalForm(); + scene.getStylesheets().add(style); + + Main.stage.setScene(scene); + } + + private void addUIControl(GridPane grid) { + Text welcomeText = new Text("Login Menu"); + welcomeText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + grid.add(welcomeText,0 ,0); + + Label lblUsername = new Label("Username"); + grid.add(lblUsername,0,1); + + TextField txtUsername = new TextField(); + txtUsername.setPromptText("username"); + grid.add(txtUsername,1,1); + + Label lblPassword = new Label("Password"); + grid.add(lblPassword,0,2); + + PasswordField txtPassword = new PasswordField(); + txtPassword.setPromptText("password"); + grid.add(txtPassword,1,2); + + Button loginBtn = new Button("Login"); + loginBtn.setOnAction(actionEvent -> loginFunc(grid, txtUsername, txtPassword)); + grid.add(loginBtn,1 ,3); + + grid.setOnKeyPressed(ev ->{ + if (ev.getCode() == KeyCode.ENTER) { + loginBtn.fire(); + ev.consume(); + } + }); + Button exitButton = new Button("Exit"); + grid.add(exitButton, 0, 3); + exitButton.setOnAction(event -> new WelcomeMenu().start()); + } + + private void loginFunc(GridPane grid, TextField txtUsername, PasswordField txtPassword) { + if(User.getUserByUsername(txtUsername.getText()) == null) + showAlert(grid.getScene().getWindow(), "There is not user with this username"); + else if(!txtPassword.getText().equals(Objects.requireNonNull(User.getUserByUsername(txtUsername.getText())).getPassword())) + showAlert(grid.getScene().getWindow(), "Wrong Password!"); + else { + ProgramController.currUser = User.getUserByUsername(txtUsername.getText()); + new MainMenu().start(); + } + } + + private void showAlert(Window owner, String message) { + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle("Form Error!"); + alert.setHeaderText(null); + alert.setContentText(message); + alert.initOwner(owner); + alert.showAndWait(); + } + +} diff --git a/src/main/java/view/menus/MainMenu.java b/src/main/java/view/menus/MainMenu.java new file mode 100644 index 0000000..93ad8d0 --- /dev/null +++ b/src/main/java/view/menus/MainMenu.java @@ -0,0 +1,84 @@ +package view.menus; + +import controllers.Battelfield.Battlefield; +import controllers.ProgramController; +import javafx.scene.ImageCursor; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.image.Image; +import javafx.scene.layout.GridPane; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import models.Duelist; +import models.User; +import view.*; + +import java.util.Objects; + +public class MainMenu { + public static Scene mainMenuScene; + public void start() { + GridPane gridPane = CreateGrid.createGridPane(); + addUIControls(gridPane); + + Scene scene = new Scene(gridPane,800,650); + + Image img = new Image(Objects.requireNonNull(this.getClass().getResource("cursor.png")).toExternalForm()); + ImageCursor cursor = new ImageCursor(img, 10, 10); + scene.setCursor(cursor); + + String style = Objects.requireNonNull(this.getClass().getResource("login/Login.css")).toExternalForm(); + scene.getStylesheets().add(style); + mainMenuScene = scene; + Main.stage.setScene(scene); + } + + private void addUIControls(GridPane grid) { + Text welcomeText = new Text("Main Menu"); + welcomeText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + grid.add(welcomeText,0 ,0); + + Button DuelBtn = new Button("Duel Menu"); + DuelBtn.setOnAction(actionEvent -> { + DuelMenu.getInstance(ProgramController.currUser).run(Main.stage); + }); + grid.add(DuelBtn,0,1); + + Button ShopBtn = new Button("Shop Menu"); + ShopBtn.setOnAction(actionEvent -> { + try { + ShopMenu shopMenu = new ShopMenu(ProgramController.currUser.getUsername()); + shopMenu.username = ProgramController.currUser.getUsername(); + shopMenu.start(Main.stage); + } catch (Exception e) { + e.printStackTrace(); + } + }); + grid.add(ShopBtn,0,2); + + Button DeckBtn = new Button("Deck Menu"); + DeckBtn.setOnAction(actionEvent -> DeckView.getInstance(ProgramController.currUser).start()); + grid.add(DeckBtn,0,3); + + Button ProfileBtn = new Button("Profile Menu"); + ProfileBtn.setOnAction(actionEvent -> ProfileMenu.getInstance(ProgramController.currUser).runProfileMenu(Main.stage)); + grid.add(ProfileBtn,0,4); + + Button ScoreBoardBtn = new Button("ScoreBoard Menu"); + ScoreBoardBtn.setOnAction(actionEvent -> new ScoreBoard().start(Main.stage)); + grid.add(ScoreBoardBtn,0,5); + + Button ImportExportBtn = new Button("Import/Export Menu"); + ImportExportBtn.setOnAction(actionEvent -> { + ImportExport.getInstance().run(Main.stage); + }); + grid.add(ImportExportBtn,0,6); + + Button LogoutBtn = new Button("Logout"); + LogoutBtn.setOnAction(actionEvent -> new WelcomeMenu().start()); + grid.add(LogoutBtn,0,7); + } + +} diff --git a/src/main/java/view/menus/ProfileMenu.java b/src/main/java/view/menus/ProfileMenu.java new file mode 100644 index 0000000..24ed9e3 --- /dev/null +++ b/src/main/java/view/menus/ProfileMenu.java @@ -0,0 +1,218 @@ +package view.menus; + + +import controllers.ProgramController; +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.control.Label; +import javafx.scene.image.ImageView; +import javafx.scene.layout.GridPane; +import models.User; + + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.List; +import java.util.Objects; + +import javafx.application.Application; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Insets; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.TextField; +import javafx.scene.layout.Pane; +import javafx.scene.layout.VBox; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import javafx.scene.image.Image; +import view.CreateGrid; +import view.Main; +import view.UserInterface; + +public class ProfileMenu { + private static ProfileMenu singleToneClass = null; + public User currUser; + ImageView imageViewProfile; + Image userImageProfile; + public static Scene profileScene; + public ProfileMenu(User currUser) { + this.currUser = currUser; + } + Canvas canvas = new Canvas(300,300); + GraphicsContext graphic = canvas.getGraphicsContext2D(); + + public static ProfileMenu getInstance (User currUser){ + if (singleToneClass == null) singleToneClass = new ProfileMenu(currUser); + singleToneClass.currUser = currUser; + return singleToneClass; + } + + public void runProfileMenu(Stage stage){ + GridPane gridPane = CreateGrid.createGridPane(); + + userImageProfile = new Image("file:"+currUser.getUsername()+".png"); + + imageViewProfile = new ImageView(userImageProfile); + imageViewProfile.setFitHeight(100); + imageViewProfile.setFitWidth(100); + + Label lblUser = new Label("User LoggedIn - username:"+currUser.getUsername()+" Nickname :"+currUser.getNickName()); + + Button btnUploadImage = new Button("new Image"); + Button btnChangePassword = new Button("change Password"); + Button btnChangeNickname = new Button("change Nickname"); + Button btnBack = new Button("back"); + + Label lblChangeNickname = new Label("change nickname"); + TextField txtNickname = new TextField(); + txtNickname.setPromptText("new nickname..."); + + Label lblOldPassword = new Label("Old Password"); + TextField txtOldPassword = new TextField(); + txtNickname.setPromptText("old password..."); + + Label lblNewPassword = new Label("new Password"); + TextField txtNewPassword = new TextField(); + txtNickname.setPromptText("new password..."); + + gridPane.addRow(0,imageViewProfile,btnUploadImage); + gridPane.addRow(1,lblUser); + gridPane.addRow(2,lblChangeNickname,txtNickname); + gridPane.addRow(3,lblOldPassword,txtOldPassword); + gridPane.addRow(4,lblNewPassword,txtNewPassword); + gridPane.addRow(5,btnBack,btnChangeNickname,btnChangePassword); + + btnBack.setOnMouseClicked(e->{ + Main.stage.setScene(MainMenu.mainMenuScene); + }); + + btnChangeNickname.setOnMouseClicked(e->{ + currUser.setNickName(txtNickname.getText()); + UserInterface.printResponse("User nickname changed successfully"); + }); + + btnChangePassword.setOnMouseClicked(e->{ + String currentPass = txtOldPassword.getText(); + String newPass = txtNewPassword.getText(); + if(currentPass.isEmpty() || currentPass.isBlank() || newPass.isEmpty() || currentPass.isBlank()) + UserInterface.printResponse("please fill all textFields"); + else if(!currUser.getPassword().equals(currentPass)) + UserInterface.printResponse("current password is invalid"); + else if(currUser.getPassword().equals(newPass)) + UserInterface.printResponse("new password and old password are same!"); + else{ + currUser.setPassword(txtNewPassword.getText()); + UserInterface.printResponse("password changed successfully!"); + } + }); + + btnUploadImage.setOnMouseClicked(e->{ + new FileChooserSample().start(stage); + }); + + Scene scene = new Scene(gridPane,800,650); + String style= Objects.requireNonNull(this.getClass().getResource("profile/profile.css")).toExternalForm(); + scene.getStylesheets().add(style); + profileScene = scene; + stage.setScene(scene); + stage.centerOnScreen(); + stage.show(); + } + + public class FileChooserSample { + + public void start(final Stage stage) { + stage.setTitle("update image"); + + final FileChooser fileChooser = new FileChooser(); + final Button openButton = new Button("Open a Picture..."); + final Button openMultipleButton = new Button("Open Pictures..."); + + openButton.setOnAction( + new EventHandler() { + @Override + public void handle(final ActionEvent e) { + configureFileChooser(fileChooser); + File file = fileChooser.showOpenDialog(stage); + if (file != null) { + openFile(file); + } + //refresh image! + userImageProfile = new Image("file:"+currUser.getUsername()+".png"); + imageViewProfile.setImage(userImageProfile); + stage.setScene(profileScene); + } + }); + + openMultipleButton.setOnAction( + new EventHandler() { + @Override + public void handle(final ActionEvent e) { + configureFileChooser(fileChooser); + List list = + fileChooser.showOpenMultipleDialog(stage); + if (list != null) { + for (File file : list) { + openFile(file); + } + } + } + }); + + + final GridPane inputGridPane = new GridPane(); + Button btnBack = new Button("back"); + + btnBack.setOnMouseClicked(e->{ + Main.stage.setScene(MainMenu.mainMenuScene); + }); + + GridPane.setConstraints(openButton, 0, 1); + + inputGridPane.setHgap(6); + inputGridPane.setVgap(6); + inputGridPane.getChildren().addAll(openButton); + + final Pane rootGroup = new VBox(12); + rootGroup.getChildren().addAll(inputGridPane,btnBack); + rootGroup.setPadding(new Insets(12, 12, 12, 12)); + String style= Objects.requireNonNull(this.getClass().getResource("login/Login.css")).toExternalForm(); + + Scene scene = new Scene(rootGroup,300,300); + scene.getStylesheets().add(style); + stage.setScene(scene); + stage.show(); + } + + private void configureFileChooser( + final FileChooser fileChooser) { + fileChooser.setTitle("View Pictures"); + fileChooser.setInitialDirectory( + new File(System.getProperty("user.home")) + ); + fileChooser.getExtensionFilters().addAll( + new FileChooser.ExtensionFilter("PNG", "*.png") + ); + } + + private void openFile(File file) { + System.out.println(file.getName()); + Path from = Paths.get(file.toURI()); + try { + String backGroundPath = ProgramController.currUser.getUsername() + ".png"; + Files.copy(from, Path.of(backGroundPath), StandardCopyOption.REPLACE_EXISTING); + //Image backGroundIMG = new Image("admin.png"); + UserInterface.printResponse("your image uploaded successfully!"); + //graphic.drawImage(backGroundIMG,0,0,100,100); + }catch (Exception e){ + e.printStackTrace(); + } + + } + } +} diff --git a/src/main/java/view/menus/ScoreBoard.java b/src/main/java/view/menus/ScoreBoard.java new file mode 100644 index 0000000..0f0dba1 --- /dev/null +++ b/src/main/java/view/menus/ScoreBoard.java @@ -0,0 +1,360 @@ +package view.menus; + +import javafx.beans.binding.Bindings; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Pos; +import javafx.scene.chart.PieChart; +import javafx.scene.control.Button; +import javafx.scene.control.ScrollPane; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.*; +import javafx.scene.media.Media; +import javafx.scene.media.MediaPlayer; +import javafx.scene.media.MediaView; +import javafx.scene.paint.Paint; +import models.User; +import javafx.scene.Scene; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.stage.Stage; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Objects; + +public class ScoreBoard { + public void start(Stage primaryStage) { + StackPane stackPane = new StackPane(); + + //adding video + String path = Objects.requireNonNull(getClass().getResource("/view/menus/scoreboard/vv.mp4")).toExternalForm(); + + //Instantiating Media class + Media media = new Media(path); + + //Instantiating MediaPlayer class + MediaPlayer mediaPlayer = new MediaPlayer(media); + + //Instantiating MediaView class + MediaView mediaView = new MediaView(mediaPlayer); + mediaView.setFitHeight(800); + mediaView.setFitWidth(1000); + + //by setting this property to true, the Video will be played + mediaPlayer.setAutoPlay(true); + mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE); + + + + stackPane.getChildren().add(mediaView); + + + + ArrayList ranks = new ArrayList<>(); + ArrayList names = new ArrayList<>(); + ArrayList scores = new ArrayList<>(); + + + + VBox vBox = new VBox(); + vBox.setAlignment(Pos.CENTER); + + Text welcomeText = new Text("ScoreBoard"); + welcomeText.setFont(Font.font("tahoma", FontWeight.BOLD ,30)); + welcomeText.setFill(Paint.valueOf("orange")); + vBox.getChildren().add(welcomeText); + + Button back = new Button("Back"); + back.setStyle("-fx-background-color: linear-gradient(#686868 0%, #232723 25%, #373837 75%, #757575 100%)," + + "linear-gradient(#020b02, #3a3a3a), linear-gradient(#9d9e9d 0%, #6b6a6b 20%, #343534 80%, #242424 100%)," + + "linear-gradient(#8a8a8a 0%, #6b6a6b 20%, #343534 80%, #262626 100%)," + + "linear-gradient(#777777 0%, #606060 50%, #505250 51%, #2a2b2a 100%);" + + "-fx-background-insets: 0,1,4,5,6; -fx-background-radius: 9,8,5,4,3;" + + "-fx-padding: 15 30 15 30; -fx-font-family: \"Helvetica\";" + + "-fx-font-size: 18px; -fx-font-weight: bold; -fx-text-fill: white;" + + "-fx-effect: dropshadow( three-pass-box , rgba(255,255,255,0.2) , 1, 0.0 , 0 , 1);"); + back.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + mediaPlayer.stop(); + new MainMenu().start(); + } + }); + + + Button showAllBtn = new Button("Show everyone"); + showAllBtn.setStyle("-fx-background-color: linear-gradient(#686868 0%, #232723 25%, #373837 75%, #757575 100%)," + + "linear-gradient(#020b02, #3a3a3a), linear-gradient(#9d9e9d 0%, #6b6a6b 20%, #343534 80%, #242424 100%)," + + "linear-gradient(#8a8a8a 0%, #6b6a6b 20%, #343534 80%, #262626 100%)," + + "linear-gradient(#777777 0%, #606060 50%, #505250 51%, #2a2b2a 100%);" + + "-fx-background-insets: 0,1,4,5,6; -fx-background-radius: 9,8,5,4,3;" + + "-fx-padding: 15 30 15 30; -fx-font-family: \"Helvetica\";" + + "-fx-font-size: 18px; -fx-font-weight: bold; -fx-text-fill: white;" + + "-fx-effect: dropshadow( three-pass-box , rgba(255,255,255,0.2) , 1, 0.0 , 0 , 1);"); + showAllBtn.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + mediaPlayer.stop(); + new ShowAllUsers().start(primaryStage); + } + }); + + + + + + + + + + ArrayList users = User.getUsers(); + //compare users + Comparator orderedUsers = Comparator.comparing(User::getScore).thenComparing(User::getUsername); + //sorting users + users.sort(orderedUsers); + //for ranking users + int rank = 1; + //iterate users + for (int i = users.size() - 1 ; i >= 0 ; i-- ) { + ranks.add(rank); + names.add(users.get(i).getUsername()); + scores.add(users.get(i).getScore()); + if(i != 0 && users.get(i).getScore() > users.get(i-1).getScore() ) rank++; + } + + + PieChart pieChart = new PieChart(); + + int sum = 0; + int max = -1; + + for (int i = 0; i max) + max = ranks.get(i); + } + + max += 1; + + for (int i = 0; i + scrollPane.getViewportBounds().getWidth(), scrollPane.viewportBoundsProperty())); + + + ArrayList ranks = new ArrayList<>(); + ArrayList names = new ArrayList<>(); + ArrayList scores = new ArrayList<>(); + + ArrayList users = User.getUsers(); + //compare users + Comparator orderedUsers = Comparator.comparing(User::getScore).thenComparing(User::getUsername); + //sorting users + users.sort(orderedUsers); + //for ranking users + int rank = 1; + //iterate users + for (int i = users.size() - 1 ; i >= 0 ; i-- ) { + ranks.add(rank); + names.add(users.get(i).getUsername()); + scores.add(users.get(i).getScore()); + if(i != 0 && users.get(i).getScore() > users.get(i-1).getScore() ) rank++; + } + + for (int i = 0; i= 20) { + buttonRank.setStyle("-fx-background-color: #090a0c," + + "linear-gradient(#38424b 0%, #1f2429 20%, #191d22 100%)," + + "linear-gradient(#20262b, #191d22)," + + "radial-gradient(center 50% 0%, radius 100%, rgba(114,131,148,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 5,4,3,5; -fx-background-insets: 0,1,2,0; -fx-text-fill: white;" + + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );" + + "-fx-font-family: \"Arial\"; -fx-text-fill: linear-gradient(white, #d0d0d0);" + + "-fx-font-size: 12px; -fx-padding: 10 20 10 20;"); + } + else{ + buttonRank.setStyle("-fx-background-color: #FFA500," + + "linear-gradient(#FFA500 0%, #FFA500 20%, #FFA500 100%)," + + "linear-gradient(#FFA500, #FFA500)," + + "radial-gradient(center 50% 0%, radius 100%, rgba(114,131,148,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 5,4,3,5; -fx-background-insets: 0,1,2,0; -fx-text-fill: white;" + + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );" + + "-fx-font-family: \"Arial\"; -fx-text-fill: linear-gradient(white, #d0d0d0);" + + "-fx-font-size: 12px; -fx-padding: 10 20 10 20;"); + } + hBox.getChildren().add(buttonRank); + + + Button buttonName = new Button(names.get(i)); + if (i >= 20) { + buttonName.setStyle("-fx-background-color: #090a0c," + + "linear-gradient(#38424b 0%, #1f2429 20%, #191d22 100%)," + + "linear-gradient(#20262b, #191d22)," + + "radial-gradient(center 50% 0%, radius 100%, rgba(114,131,148,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 5,4,3,5; -fx-background-insets: 0,1,2,0; -fx-text-fill: white;" + + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );" + + "-fx-font-family: \"Arial\"; -fx-text-fill: linear-gradient(white, #d0d0d0);" + + "-fx-font-size: 12px; -fx-padding: 10 20 10 20;"); + } + else { + buttonName.setStyle("-fx-background-color: #FFA500," + + "linear-gradient(#FFA500 0%, #FFA500 20%, #FFA500 100%)," + + "linear-gradient(#FFA500, #FFA500)," + + "radial-gradient(center 50% 0%, radius 100%, rgba(114,131,148,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 5,4,3,5; -fx-background-insets: 0,1,2,0; -fx-text-fill: white;" + + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );" + + "-fx-font-family: \"Arial\"; -fx-text-fill: linear-gradient(white, #d0d0d0);" + + "-fx-font-size: 12px; -fx-padding: 10 20 10 20;"); + } + hBox.getChildren().add(buttonName); + + + Button buttonScore = new Button(String.valueOf(scores.get(i))); + if (i >= 20) { + buttonScore.setStyle("-fx-background-color: #090a0c," + + "linear-gradient(#38424b 0%, #1f2429 20%, #191d22 100%)," + + "linear-gradient(#20262b, #191d22)," + + "radial-gradient(center 50% 0%, radius 100%, rgba(114,131,148,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 5,4,3,5; -fx-background-insets: 0,1,2,0; -fx-text-fill: white;" + + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );" + + "-fx-font-family: \"Arial\"; -fx-text-fill: linear-gradient(white, #d0d0d0);" + + "-fx-font-size: 12px; -fx-padding: 10 20 10 20;"); + } + else{ + buttonScore.setStyle("-fx-background-color: #FFA500," + + "linear-gradient(#FFA500 0%, #FFA500 20%, #FFA500 100%)," + + "linear-gradient(#FFA500, #FFA500)," + + "radial-gradient(center 50% 0%, radius 100%, rgba(114,131,148,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 5,4,3,5; -fx-background-insets: 0,1,2,0; -fx-text-fill: white;" + + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );" + + "-fx-font-family: \"Arial\"; -fx-text-fill: linear-gradient(white, #d0d0d0);" + + "-fx-font-size: 12px; -fx-padding: 10 20 10 20;"); + } + hBox.getChildren().add(buttonScore); + + gridPane.add(hBox, 0, i); + } + borderPane.setCenter(scrollPane); + + + + HBox hBoxExit = new HBox(); + Button exit = new Button("Back"); + exit.setStyle("-fx-background-color: #ecebe9," + + "rgba(0,0,0,0.05), linear-gradient(#dcca8a, #c7a740)," + + "linear-gradient(#f9f2d6 0%, #f4e5bc 20%, #e6c75d 80%, #e2c045 100%)," + + "linear-gradient(#f6ebbe, #e6c34d);" + + "-fx-background-insets: 0,9 9 8 9,9,10,11;" + + "-fx-background-radius: 50; -fx-padding: 15 30 15 30;" + + "-fx-font-family: \"Helvetica\"; -fx-font-size: 18px;" + + "-fx-text-fill: #311c09;" + + "-fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.1) , 2, 0.0 , 0 , 1);"); + exit.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + new ScoreBoard().start(stage); + } + }); + hBoxExit.getChildren().add(exit); + hBoxExit.setAlignment(Pos.CENTER); + borderPane.setBottom(hBoxExit); + + + + + Scene scene = new Scene(borderPane); + stage.setScene(scene); + stage.setWidth(1200); + stage.setHeight(800); + + + } +} + diff --git a/src/main/java/view/menus/ShopMenu.java b/src/main/java/view/menus/ShopMenu.java new file mode 100644 index 0000000..309bfa2 --- /dev/null +++ b/src/main/java/view/menus/ShopMenu.java @@ -0,0 +1,768 @@ +package view.menus; + +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.*; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.stage.Stage; +import javafx.stage.Window; +import models.Card; +import models.CardStufs.Type; +import models.User; + +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ShopMenu { + public String username; + + public ShopMenu(String username){ + this.username = username; + } + + public void start(Stage stage) throws Exception { + //initialize nodes + VBox vBox = new VBox(); + vBox.setAlignment(Pos.CENTER); + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.CENTER); + + //add buttons + Button button = new Button("Show Card"); + button.setStyle("-fx-background-color: linear-gradient(#ffd65b, #e68400)," + + "linear-gradient(#ffef84, #f2ba44)," + + "linear-gradient(#ffea6a, #efaa22)," + + "linear-gradient(#ffe657 0%, #f8c202 50%, #eea10b 100%)," + + "linear-gradient(from 0% 0% to 15% 50%, rgba(255,255,255,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 30;" + + "-fx-background-insets: 0,1,2,3,0;" + + "-fx-text-fill: #654b00;" + + "-fx-font-weight: bold;" + + "-fx-font-size: 14px;" + + "-fx-padding: 10 20 10 20;"); + button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + try { + ShowCard showCard = new ShowCard(); + showCard.username = username; + showCard.start(stage); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + gridPane.add(button, 0, 0); + + + Button cardsBoughtByUser = new Button("Your Cards"); + cardsBoughtByUser.setStyle("-fx-background-color: linear-gradient(#ffd65b, #e68400)," + + "linear-gradient(#ffef84, #f2ba44)," + + "linear-gradient(#ffea6a, #efaa22)," + + "linear-gradient(#ffe657 0%, #f8c202 50%, #eea10b 100%)," + + "linear-gradient(from 0% 0% to 15% 50%, rgba(255,255,255,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 30;" + + "-fx-background-insets: 0,1,2,3,0;" + + "-fx-text-fill: #654b00;" + + "-fx-font-weight: bold;" + + "-fx-font-size: 14px;" + + "-fx-padding: 10 20 10 20;"); + cardsBoughtByUser.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + try { + ShowCardsBought showCardsBought = new ShowCardsBought(); + showCardsBought.username = username; + showCardsBought.start(stage); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + gridPane.add(cardsBoughtByUser, 0, 3); + + + Button button2 = new Button("Show All Cards"); + button2.setStyle("-fx-background-color: linear-gradient(#ffd65b, #e68400)," + + "linear-gradient(#ffef84, #f2ba44)," + + "linear-gradient(#ffea6a, #efaa22)," + + "linear-gradient(#ffe657 0%, #f8c202 50%, #eea10b 100%)," + + "linear-gradient(from 0% 0% to 15% 50%, rgba(255,255,255,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 30;" + + "-fx-background-insets: 0,1,2,3,0;" + + "-fx-text-fill: #654b00;" + + "-fx-font-weight: bold;" + + "-fx-font-size: 14px;" + + "-fx-padding: 10 20 10 20;"); + button2.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + ShowAllCards showAllCards = new ShowAllCards(); + showAllCards.username = username; + try { + showAllCards.start(stage); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + gridPane.add(button2, 0, 2); + + + Button button3 = new Button("Back"); + button3.setStyle("-fx-background-color: linear-gradient(#ffd65b, #e68400)," + + "linear-gradient(#ffef84, #f2ba44)," + + "linear-gradient(#ffea6a, #efaa22)," + + "linear-gradient(#ffe657 0%, #f8c202 50%, #eea10b 100%)," + + "linear-gradient(from 0% 0% to 15% 50%, rgba(255,255,255,0.9), rgba(255,255,255,0));" + + "-fx-background-radius: 30;" + + "-fx-background-insets: 0,1,2,3,0;" + + "-fx-text-fill: #654b00;" + + "-fx-font-weight: bold;" + + "-fx-font-size: 14px;" + + "-fx-padding: 10 20 10 20;"); + button3.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + new MainMenu().start(); + } + }); + gridPane.add(button3, 0, 4); + + + + //add nodes to vbox + vBox.setSpacing(8); + vBox.setPadding(new Insets(10,10,10,10)); + vBox.getChildren().add(gridPane); + + + // create a image + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/background.png")).toExternalForm()); + double width = image.getWidth(); + double height = image.getHeight(); + // create a background image + BackgroundImage backgroundimage = new BackgroundImage(image, + BackgroundRepeat.NO_REPEAT, + BackgroundRepeat.NO_REPEAT, + BackgroundPosition.DEFAULT, + BackgroundSize.DEFAULT); + // create Background + Background background = new Background(backgroundimage); + vBox.setBackground(background); + + + //show stage + Scene scene = new Scene(vBox); + stage.setScene(scene); + stage.setWidth(width); + stage.setHeight(height); + stage.setTitle("Shop Menu"); + stage.centerOnScreen(); + stage.show(); + } + //for graphic i should write buyCard function again + public static String buyCardForGraphic (String command){ + Pattern pattern = Pattern.compile("^buy card --username (.+)? --card (.+)?$"); + Matcher matcher = pattern.matcher(command); + + String username = ""; + String cardsName = ""; + + if (matcher.find()){ + username = matcher.group(1); + cardsName = matcher.group(2); + } + + User user = User.getUserByUsername(username); + if (Card.allCards.get(cardsName).getPrice() > user.getMoney()) + return "not enough money"; + else{ + ArrayList temp = user.getCardsBought(); + temp.add(cardsName); + user.setCardsBought(temp); + int money = user.getMoney(); + money -= Card.allCards.get(cardsName).getPrice(); + user.setMoney(money); + return "card bought successfully"; + } + } + + //for graphic i should write showAllCards function again + public static ArrayList showAllCardsForGraphic (){ + ArrayList allCards = new ArrayList<>(); + for (Map.Entry entry: Card.allCards.entrySet()){ + String key = entry.getKey(); + allCards.add(key); + } + + Collections.sort(allCards); + + return allCards; + } +} +//---------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- +class ShowCard{ + public String username; + + public void start(Stage stage) throws Exception { + VBox vBox = new VBox(); + vBox.setAlignment(Pos.CENTER); + + + Label label = new Label("Enter the cards name:"); + label.setFont(Font.font(20)); + label.setTextFill(Color.web("white")); + + + TextField textField = new TextField(); + HBox hBox = new HBox(textField); + hBox.setAlignment(Pos.CENTER); + textField.setPrefColumnCount(15); + + + HBox hBox1 = new HBox(); + hBox1.setAlignment(Pos.CENTER); + + + Button button = new Button("Search"); + button.setStyle("-fx-background-color: #000000," + + "linear-gradient(#7ebcea, #2f4b8f)," + + "linear-gradient(#426ab7, #263e75)," + + "linear-gradient(#395cab, #223768);" + + "-fx-background-insets: 0,1,2,3;" + + "-fx-background-radius: 3,2,2,2;" + + "-fx-padding: 12 30 12 30; -fx-text-fill: white;" + + "-fx-font-size: 12px;"); + button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + String cardsName = textField.getText(); + if (Card.allCards.containsKey(cardsName)){ + if (Card.allCards.get(cardsName).getCardsType() == Type.MONSTER){ + VBox vBox = new VBox(); + vBox.setAlignment(Pos.CENTER); + + Label label1 = new Label("Price:" + Card.allCards.get(cardsName).getPrice()); + label1.setFont(Font.font(20)); + label1.setTextFill(Color.web("white")); + + Image image2 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + cardsName + ".jpg")).toExternalForm()); + ImageView imageView = new ImageView(image2); + + vBox.getChildren().addAll(label1, imageView); + + HBox hBox1 = new HBox(); + hBox1.setAlignment(Pos.CENTER); + + Button button1 = new Button("Buy"); + if (Card.allCards.get(cardsName).getPrice() < Objects.requireNonNull(User.getUserByUsername(username)).money) { + button1.setStyle("-fx-background-color: #ecebe9," + + "rgba(0,0,0,0.05), linear-gradient(#dcca8a, #c7a740)," + + "linear-gradient(#f9f2d6 0%, #f4e5bc 20%, #e6c75d 80%, #e2c045 100%)," + + "linear-gradient(#f6ebbe, #e6c34d);" + + "-fx-background-insets: 0,9 9 8 9,9,10,11;" + + "-fx-background-radius: 50; -fx-padding: 15 30 15 30;" + + "-fx-font-family: \"Helvetica\"; -fx-font-size: 18px;" + + "-fx-text-fill: #311c09;" + + "-fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.1) , 2, 0.0 , 0 , 1);"); + button1.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + String response = ShopMenu.buyCardForGraphic("buy card --username " + username + " --card " + cardsName); + showAlert(Alert.AlertType.INFORMATION, vBox.getScene().getWindow(), "buy card response", response); + } + }); + } + else{ + button1.setStyle("-fx-background-color: #FF0000," + + "rgba(0,0,0,0.05), linear-gradient(#dcca8a, #c7a740)," + + "linear-gradient(#f9f2d6 0%, #f4e5bc 20%, #e6c75d 80%, #e2c045 100%)," + + "linear-gradient(#f6ebbe, #e6c34d);" + + "-fx-background-insets: 0,9 9 8 9,9,10,11;" + + "-fx-background-radius: 50; -fx-padding: 15 30 15 30;" + + "-fx-font-family: \"Helvetica\"; -fx-font-size: 18px;" + + "-fx-text-fill: #311c09;" + + "-fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.1) , 2, 0.0 , 0 , 1);"); + } + hBox1.getChildren().add(button1); + + + Button button2 = new Button("Back"); + button2.setStyle("-fx-background-color: #ecebe9," + + "rgba(0,0,0,0.05), linear-gradient(#dcca8a, #c7a740)," + + "linear-gradient(#f9f2d6 0%, #f4e5bc 20%, #e6c75d 80%, #e2c045 100%)," + + "linear-gradient(#f6ebbe, #e6c34d);" + + "-fx-background-insets: 0,9 9 8 9,9,10,11;" + + "-fx-background-radius: 50; -fx-padding: 15 30 15 30;" + + "-fx-font-family: \"Helvetica\"; -fx-font-size: 18px;" + + "-fx-text-fill: #311c09;" + + "-fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.1) , 2, 0.0 , 0 , 1);"); + button2.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + ShowCard showCard = new ShowCard(); + showCard.username = username; + try { + showCard.start(stage); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + hBox1.getChildren().add(button2); + + vBox.getChildren().add(hBox1); + + // create a image + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/background.png")).toExternalForm()); + // create a background image + BackgroundImage backgroundimage = new BackgroundImage(image, + BackgroundRepeat.NO_REPEAT, + BackgroundRepeat.NO_REPEAT, + BackgroundPosition.DEFAULT, + BackgroundSize.DEFAULT); + // create Background + Background background = new Background(backgroundimage); + vBox.setBackground(background); + + Scene scene = new Scene(vBox); + stage.setScene(scene); + stage.show(); + } + else{ + VBox vBox = new VBox(); + vBox.setAlignment(Pos.CENTER); + + Label label1 = new Label("Price:" + Card.allCards.get(cardsName).getPrice()); + label1.setFont(Font.font(20)); + label1.setTextFill(Color.web("white")); + + Image image2 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + cardsName + ".jpg")).toExternalForm()); + ImageView imageView = new ImageView(image2); + + vBox.getChildren().addAll(label1, imageView); + + HBox hBox1 = new HBox(); + hBox1.setAlignment(Pos.CENTER); + + Button button1 = new Button("Buy"); + if (Card.allCards.get(cardsName).getPrice() < Objects.requireNonNull(User.getUserByUsername(username)).money) { + button1.setStyle("-fx-background-color: #ecebe9," + + "rgba(0,0,0,0.05), linear-gradient(#dcca8a, #c7a740)," + + "linear-gradient(#f9f2d6 0%, #f4e5bc 20%, #e6c75d 80%, #e2c045 100%)," + + "linear-gradient(#f6ebbe, #e6c34d);" + + "-fx-background-insets: 0,9 9 8 9,9,10,11;" + + "-fx-background-radius: 50; -fx-padding: 15 30 15 30;" + + "-fx-font-family: \"Helvetica\"; -fx-font-size: 18px;" + + "-fx-text-fill: #311c09;" + + "-fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.1) , 2, 0.0 , 0 , 1);"); + button1.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + String response = ShopMenu.buyCardForGraphic("buy card --username " + username + " --card " + cardsName); + showAlert(Alert.AlertType.INFORMATION, vBox.getScene().getWindow(), "buy card response", response); + } + }); + } + else{ + button1.setStyle("-fx-background-color: #FF0000," + + "rgba(0,0,0,0.05), linear-gradient(#dcca8a, #c7a740)," + + "linear-gradient(#f9f2d6 0%, #f4e5bc 20%, #e6c75d 80%, #e2c045 100%)," + + "linear-gradient(#f6ebbe, #e6c34d);" + + "-fx-background-insets: 0,9 9 8 9,9,10,11;" + + "-fx-background-radius: 50; -fx-padding: 15 30 15 30;" + + "-fx-font-family: \"Helvetica\"; -fx-font-size: 18px;" + + "-fx-text-fill: #311c09;" + + "-fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.1) , 2, 0.0 , 0 , 1);"); + } + hBox1.getChildren().add(button1); + + + Button button2 = new Button("Back"); + button2.setStyle("-fx-background-color: #ecebe9," + + "rgba(0,0,0,0.05), linear-gradient(#dcca8a, #c7a740)," + + "linear-gradient(#f9f2d6 0%, #f4e5bc 20%, #e6c75d 80%, #e2c045 100%)," + + "linear-gradient(#f6ebbe, #e6c34d);" + + "-fx-background-insets: 0,9 9 8 9,9,10,11;" + + "-fx-background-radius: 50; -fx-padding: 15 30 15 30;" + + "-fx-font-family: \"Helvetica\"; -fx-font-size: 18px;" + + "-fx-text-fill: #311c09;" + + "-fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.1) , 2, 0.0 , 0 , 1);"); + button2.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + ShowCard showCard = new ShowCard(); + showCard.username = username; + try { + showCard.start(stage); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + hBox1.getChildren().add(button2); + + vBox.getChildren().add(hBox1); + + // create a image + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/background.png")).toExternalForm()); + // create a background image + BackgroundImage backgroundimage = new BackgroundImage(image, + BackgroundRepeat.NO_REPEAT, + BackgroundRepeat.NO_REPEAT, + BackgroundPosition.DEFAULT, + BackgroundSize.DEFAULT); + // create Background + Background background = new Background(backgroundimage); + vBox.setBackground(background); + + Scene scene = new Scene(vBox); + stage.setScene(scene); + stage.show(); + } + } + else { + showAlert(Alert.AlertType.INFORMATION, vBox.getScene().getWindow(), "Invalid Name", "Please enter a valid name."); + } + } + }); + + + Button button1 = new Button("Back"); + button1.setStyle("-fx-background-color: #000000," + + "linear-gradient(#7ebcea, #2f4b8f)," + + "linear-gradient(#426ab7, #263e75)," + + "linear-gradient(#395cab, #223768);" + + "-fx-background-insets: 0,1,2,3;" + + "-fx-background-radius: 3,2,2,2;" + + "-fx-padding: 12 30 12 30; -fx-text-fill: white;" + + "-fx-font-size: 12px;"); + button1.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + ShopMenu shopMenu = new ShopMenu(username); + shopMenu.username = username; + try { + shopMenu.start(stage); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + + + + hBox1.getChildren().addAll(button, button1); + + + + vBox.getChildren().addAll(label, hBox, hBox1); + + + // create a image + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/background.png")).toExternalForm()); + // create a background image + BackgroundImage backgroundimage = new BackgroundImage(image, + BackgroundRepeat.NO_REPEAT, + BackgroundRepeat.NO_REPEAT, + BackgroundPosition.DEFAULT, + BackgroundSize.DEFAULT); + // create Background + Background background = new Background(backgroundimage); + vBox.setBackground(background); + + Scene scene = new Scene(vBox); + stage.setScene(scene); + stage.centerOnScreen(); + stage.show(); + } + + + public void showAlert(Alert.AlertType alertType, Window owner, String title, String message) { + Alert alert = new Alert(alertType); + alert.setTitle(title); + alert.setHeaderText(null); + alert.setContentText(message); + alert.initOwner(owner); + + Optional result = alert.showAndWait(); + if(result.isEmpty()) System.exit(0); + //else if(result.get() == ButtonType.OK) new app().start(this.stage); + } +} +//---------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- +class ShowAllCards{ + public String username; + + public void start(Stage stage) throws Exception { + BorderPane borderPane = new BorderPane(); + + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/right.png")).toExternalForm(), 170, 700, false, false); + ImageView imageView = new ImageView(image); + + Image image1 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/left.png")).toExternalForm(), 170, 700, false, false); + ImageView imageView1 = new ImageView(image1); + + borderPane.setRight(imageView); + borderPane.setLeft(imageView1); + + Button button = new Button("Back"); + button.setStyle("-fx-background-color: linear-gradient(#ff5400, #be1d00);" + + "-fx-background-radius: 30; -fx-background-insets: 0; -fx-text-fill: white;"); + button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + ShopMenu shopMenu = new ShopMenu(username); + shopMenu.username = username; + try { + shopMenu.start(stage); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + button.setAlignment(Pos.CENTER); + + HBox hBox = new HBox(button); + hBox.setAlignment(Pos.CENTER); + borderPane.setBottom(hBox); + + ScrollPane scrollPane = new ScrollPane(); + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.TOP_CENTER); + VBox vBox = new VBox(gridPane); + vBox.setAlignment(Pos.CENTER); + + ArrayList allCards = ShopMenu.showAllCardsForGraphic(); + for (int i = 0; i() { + @Override + public void handle(MouseEvent mouseEvent) { + HBox hBox1 = new HBox(); + Label label = new Label("You have " + Objects.requireNonNull(User.getUserByUsername(username)).getMoney() + "$ and the " + + "price of this card is " + Card.allCards.get(name).getPrice() + "$"); + label.setFont(Font.font(20)); + label.setTextFill(Color.web("Black")); + hBox1.getChildren().add(label); + + + Button button1 = new Button("Buy"); + if (Card.allCards.get(name).getPrice() < Objects.requireNonNull(User.getUserByUsername(username)).getMoney()) { + button1.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button1.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + String response = ShopMenu.buyCardForGraphic("buy card --username " + username + " --card " + name); + showAlert(Alert.AlertType.INFORMATION, vBox.getScene().getWindow(), "buy card response", response); + ShowAllCards showAllCards = new ShowAllCards(); + showAllCards.username = username; + try { + new ShopMenu(username).start(stage); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + else{ + button1.setStyle("-fx-background-color: #FF0000," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + } + hBox1.getChildren().add(button1); + + hBox1.setSpacing(10); + + borderPane.setTop(hBox1); + } + }); + gridPane.add(imageView2, i%3, i/3); + } + else{ + Image image2 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + allCards.get(i) + ".jpg")).toExternalForm(), 275, 275, false, false); + ImageView imageView2 = new ImageView(image2); + imageView2.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent mouseEvent) { + HBox hBox1 = new HBox(); + Label label = new Label("You have " + Objects.requireNonNull(User.getUserByUsername(username)).getMoney() + "$ and the " + + "price of this card is " + Card.allCards.get(name).getPrice() + "$"); + label.setFont(Font.font(20)); + label.setTextFill(Color.web("Black")); + hBox1.getChildren().add(label); + + Button button1 = new Button("Buy"); + if (Card.allCards.get(name).getPrice() < Objects.requireNonNull(User.getUserByUsername(username)).money) { + button1.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button1.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + String response = ShopMenu.buyCardForGraphic("buy card --username " + username + " --card " + name); + showAlert(Alert.AlertType.INFORMATION, vBox.getScene().getWindow(), "buy card response", response); + ShowAllCards showAllCards = new ShowAllCards(); + showAllCards.username = username; + try { + showAllCards.start(stage); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + else{ + button1.setStyle("-fx-background-color: #FF0000," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + } + hBox1.getChildren().add(button1); + + hBox1.setSpacing(10); + + borderPane.setTop(hBox1); + } + }); + gridPane.add(imageView2, i%3, i/3); + } + } + + + + scrollPane.setContent(vBox); + borderPane.setCenter(scrollPane); + + + + + + + Scene scene = new Scene(borderPane); + stage.setScene(scene); + stage.setHeight(800); + stage.setWidth(1200); + stage.centerOnScreen(); + stage.show(); + } + + + public void showAlert(Alert.AlertType alertType, Window owner, String title, String message) { + Alert alert = new Alert(alertType); + alert.setTitle(title); + alert.setHeaderText(null); + alert.setContentText(message); + alert.initOwner(owner); + + Optional result = alert.showAndWait(); + if(result.isEmpty()) System.exit(0); + //else if(result.get() == ButtonType.OK) new app().start(this.stage); + } +} +//---------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------- +class ShowCardsBought{ + public String username; + + public void start(Stage stage) throws Exception { + BorderPane borderPane = new BorderPane(); + + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/right.png")).toExternalForm(), 170, 620, false, false); + ImageView imageView = new ImageView(image); + + Image image1 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/left.png")).toExternalForm(), 170, 620, false, false); + ImageView imageView1 = new ImageView(image1); + + borderPane.setRight(imageView); + borderPane.setLeft(imageView1); + + Button button = new Button("Back"); + button.setStyle("-fx-background-color: linear-gradient(#ff5400, #be1d00);" + + "-fx-background-radius: 30; -fx-background-insets: 0; -fx-text-fill: white;"); + button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent actionEvent) { + ShopMenu shopMenu = new ShopMenu(username); + shopMenu.username = username; + try { + shopMenu.start(stage); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + button.setAlignment(Pos.CENTER); + + HBox hBox = new HBox(button); + hBox.setAlignment(Pos.CENTER); + borderPane.setBottom(hBox); + + ScrollPane scrollPane = new ScrollPane(); + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.TOP_CENTER); + VBox vBox = new VBox(gridPane); + vBox.setAlignment(Pos.CENTER); + + ArrayList allCards = Objects.requireNonNull(User.getUserByUsername(username)).cardsBought; + ArrayList marked = new ArrayList<>(); + for (int i = 0; i { + loc = "Main"; + start(); + }); + + Button button2 = new Button("Side"); + button2.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button2.setOnAction(actionEvent -> { + loc = "Side"; + start(); + }); + + //Back Button + Button button = new Button("Back"); + button.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button.setOnAction(actionEvent -> DeckView.getInstance(user).start()); + + hBox1.getChildren().addAll(label, button1, button2, button); + hBox1.setSpacing(10); + return hBox1; + } + + private void addCard(BorderPane borderPane, GridPane gridPane, VBox vBox, int i, String cardName) { + if(loc.equals("Main")) { + if (Card.allCards.get(cardName).getCardsType() == Type.MONSTER) { + ImageView imageView2 = new ImageView(new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + deck.mainDeck.get(i).getName() + ".jpg")).toExternalForm(), 140, 200, false, false)); + imageView2.setOnMouseClicked(mouseEvent -> deleteFunc(borderPane, vBox, cardName)); + gridPane.add(imageView2, i % 3, i / 3); + } else { + ImageView imageView2 = new ImageView(new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + deck.mainDeck.get(i).getName() + ".jpg")).toExternalForm(), 140, 200, false, false)); + imageView2.setOnMouseClicked(mouseEvent -> deleteFunc(borderPane, vBox, cardName)); + gridPane.add(imageView2, i % 3, i / 3); + } + } + else{ + if (Card.allCards.get(cardName).getCardsType() == Type.MONSTER) { + ImageView imageView2 = new ImageView(new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + deck.sideDeck.get(i).getName() + ".jpg")).toExternalForm(), 140, 200, false, false)); + imageView2.setOnMouseClicked(mouseEvent -> deleteFunc(borderPane, vBox, cardName)); + gridPane.add(imageView2, i % 3, i / 3); + } else { + ImageView imageView2 = new ImageView(new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + deck.sideDeck.get(i).getName() + ".jpg")).toExternalForm(), 140, 200, false, false)); + imageView2.setOnMouseClicked(mouseEvent -> deleteFunc(borderPane, vBox, cardName)); + gridPane.add(imageView2, i % 3, i / 3); + } + } + } + + private void deleteFunc(BorderPane borderPane, VBox vBox, String cardName) { + HBox hBox1 = new HBox(); + + Label label = new Label("Are you Sure You Want To Delete " + cardName + " From Deck " + deck.getDeckName()); + label.setFont(Font.font(20)); + label.setTextFill(Color.web("Black")); + + Button button1 = new Button("Yes"); + button1.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button1.setOnAction(actionEvent -> { + if(loc.equals("Main")) showAlert(vBox.getScene().getWindow(), "Delete Card From Main", DeckMenu.getInstance(user).removeCard(cardName,deck.getDeckName())); + else showAlert(vBox.getScene().getWindow(), "Delete Card From Side", DeckMenu.getInstance(user).removeCardFromSide(cardName,deck.getDeckName())); + DataBase.storeDecks(allDecks); + DataBase.saveTheUserList(User.getUsers()); + new DeckView(user).start(); + }); + + hBox1.getChildren().addAll(label,button1); + hBox1.setSpacing(10); + borderPane.setTop(hBox1); + } + + private void showAlert(Window owner, String title, String message) { + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle(title); + alert.setHeaderText(null); + alert.setContentText(message); + alert.initOwner(owner); + alert.showAndWait(); + } +} diff --git a/src/main/java/view/menus/SignUpMenu.java b/src/main/java/view/menus/SignUpMenu.java new file mode 100644 index 0000000..40049e2 --- /dev/null +++ b/src/main/java/view/menus/SignUpMenu.java @@ -0,0 +1,115 @@ +package view.menus; + +import javafx.scene.ImageCursor; +import javafx.scene.image.Image; +import models.User; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.GridPane; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.stage.Window; +import view.CreateGrid; +import view.Main; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.Objects; +import java.util.Random; + +public class SignUpMenu { + + public void start() { + GridPane gridPane = CreateGrid.createGridPane(); + addUIControls(gridPane); + + Scene scene = new Scene(gridPane,800,650); + + Image img = new Image(Objects.requireNonNull(this.getClass().getResource("cursor.png")).toExternalForm()); + ImageCursor cursor = new ImageCursor(img, 10, 10); + scene.setCursor(cursor); + + String style = Objects.requireNonNull(this.getClass().getResource("login/Login.css")).toExternalForm(); + scene.getStylesheets().add(style); + + Main.stage.setScene(scene); + } + + private void addUIControls(GridPane grid) { + Text welcomeText = new Text("Sign Up Menu"); + welcomeText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + grid.add(welcomeText,0 ,0); + + Label lblUsername = new Label("Username"); + grid.add(lblUsername,0,1); + + TextField txtUsername = new TextField(); + txtUsername.setPromptText("username"); + grid.add(txtUsername,1,1); + + Label lblNickname = new Label("Nickname"); + grid.add(lblNickname,0,2); + + TextField txtNickname = new TextField(); + txtNickname.setPromptText("nickname"); + grid.add(txtNickname,1,2); + + Label lblPassword = new Label("Password"); + grid.add(lblPassword,0,3); + + PasswordField txtPassword = new PasswordField(); + txtPassword.setPromptText("password"); + grid.add(txtPassword,1,3); + + Button signUpBtn = new Button("Sign Up"); + signUpBtn.setOnAction(actionEvent -> signupFunc(grid, txtUsername, txtNickname, txtPassword)); + grid.add(signUpBtn,1 ,4); + + Button exitButton = new Button("Exit"); + grid.add(exitButton, 0, 4); + exitButton.setOnAction(event -> new WelcomeMenu().start()); + } + + private void signupFunc(GridPane grid, TextField txtUsername, TextField txtNickname, PasswordField txtPassword) { + + if(User.getUserByUsername(txtUsername.getText()) != null) + showAlert(Alert.AlertType.INFORMATION, grid.getScene().getWindow(), "Form Error!", "There is a user with this username"); + else if(User.getUserByNickName(txtNickname.getText()) != null) + showAlert(Alert.AlertType.INFORMATION, grid.getScene().getWindow(), "Form Error!", "There is a user with this Nickname"); + else if(txtPassword.getText().isEmpty()) + showAlert(Alert.AlertType.INFORMATION, grid.getScene().getWindow(), "Form Error!", "Please enter a password"); + else{ + User user = new User(txtUsername.getText(), txtPassword.getText(), txtNickname.getText()); + getImageRandom(user); + showAlert(Alert.AlertType.CONFIRMATION, grid.getScene().getWindow(), "Registration Successful!", "Welcome " + txtUsername.getText()); + new WelcomeMenu().start(); + } + } + + private void getImageRandom(User user) { + Random random = new Random(); + int number = random.nextInt(29); + number += 1; + String from = Objects.requireNonNull(this.getClass().getResource("/models/UserImages/"+number + ".png")).getPath(); + String to = Objects.requireNonNull(this.getClass().getResource("/models/Images/1.png")).getPath(); + try{ + BufferedImage bi = ImageIO.read(new File(from)); + ImageIO.write(bi, "png", new File(user.getUsername()+".png")); + System.out.println("Copied!"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void showAlert(Alert.AlertType alertType, Window owner, String title, String message) { + Alert alert = new Alert(alertType); + alert.setTitle(title); + alert.setHeaderText(null); + alert.setContentText(message); + alert.initOwner(owner); + alert.showAndWait(); + } + +} diff --git a/src/main/java/view/menus/WelcomeMenu.java b/src/main/java/view/menus/WelcomeMenu.java new file mode 100644 index 0000000..39b71e9 --- /dev/null +++ b/src/main/java/view/menus/WelcomeMenu.java @@ -0,0 +1,57 @@ +package view.menus; + +import javafx.scene.ImageCursor; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.image.Image; +import javafx.scene.layout.GridPane; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import view.CreateGrid; +import view.Main; + +import java.util.Objects; + +public class WelcomeMenu{ + + public void start() { + GridPane gridPane = CreateGrid.createGridPane(); + addUIControls(gridPane); + + Scene scene = new Scene(gridPane,800,650); + + Image img = new Image(Objects.requireNonNull(this.getClass().getResource("cursor.png")).toExternalForm()); + ImageCursor cursor = new ImageCursor(img, 10, 10); + scene.setCursor(cursor); + + String style = Objects.requireNonNull(this.getClass().getResource("login/Login.css")).toExternalForm(); + scene.getStylesheets().add(style); + + Main.stage.setTitle("YU-GI-UH!"); + Main.stage.resizableProperty().set(false); + Main.stage.centerOnScreen(); + Main.stage.setScene(scene); + Main.stage.show(); + } + + private void addUIControls(GridPane grid) { + Text welcomeText = new Text("Welcome"); + welcomeText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + grid.add(welcomeText,0 ,0); + + Button loginBtn = new Button("Login"); + loginBtn.setOnAction(actionEvent -> new LoginMenu().start()); + grid.add(loginBtn,0 ,1); + + Button signUpBtn = new Button("Sign Up"); + signUpBtn.setOnAction(actionEvent -> new SignUpMenu().start()); + grid.add(signUpBtn,0 ,2); + + Button exitBtn = new Button("Exit"); + exitBtn.setOnAction(actionEvent -> System.exit(0)); + grid.add(exitBtn,0 ,3); + } + +} + diff --git a/src/main/java/view/menus/inDeckMenu.java b/src/main/java/view/menus/inDeckMenu.java new file mode 100644 index 0000000..61caf6b --- /dev/null +++ b/src/main/java/view/menus/inDeckMenu.java @@ -0,0 +1,183 @@ +package view.menus; + +import controllers.Database.DataBase; +import controllers.menues.DeckMenu; +import controllers.menues.ShopMenu; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.geometry.Pos; +import javafx.scene.ImageCursor; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.scene.text.Text; +import javafx.stage.Window; +import models.Card; +import models.CardStufs.Type; +import models.Deck; +import models.User; +import view.Main; + +import java.util.HashMap; +import java.util.Objects; + +import static models.Deck.allDecks; + +public class inDeckMenu { + private final User user; + private final Deck deck; + private final HashMap map = new HashMap<>(); + + public inDeckMenu(Deck deck, User user){ + this.user = user; + this.deck = deck; + } + + public void start() { + //Left and Right Pics! + BorderPane borderPane = new BorderPane(); + Image image = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/right.png")).toExternalForm(), 170, 650, false, false); + ImageView imageView = new ImageView(image); + Image image1 = new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/left.png")).toExternalForm(), 170, 650, false, false); + ImageView imageView1 = new ImageView(image1); + borderPane.setRight(imageView); + borderPane.setLeft(imageView1); + + HBox hBox1 = new HBox(); + + Label label = new Label("Username: " + user.getUsername() + " DeckName: "+ deck.getDeckName()); + label.setFont(Font.font(20)); + label.setTextFill(Color.web("Black")); + + //Back Button + Button button = new Button("Back"); + button.setStyle("-fx-background-color: linear-gradient(#ff5400, #be1d00);" + + "-fx-background-radius: 30; -fx-background-insets: 0; -fx-text-fill: white;"); + button.setOnAction(actionEvent -> DeckView.getInstance(user).start()); + + hBox1.getChildren().addAll(label,button); + hBox1.setSpacing(10); + borderPane.setTop(hBox1); + + GridPane gridPane = new GridPane(); + gridPane.setAlignment(Pos.TOP_CENTER); + + VBox vBox = new VBox(gridPane); + vBox.setAlignment(Pos.CENTER); + + for (int i = 0; i < user.cardsBought.size(); i++){ + if(map.containsKey(user.cardsBought.get(i))) map.put(user.cardsBought.get(i),map.get(user.cardsBought.get(i))+1); + else{ + map.put(user.cardsBought.get(i),1); + } + } + + int i =0; + for (String cardName: map.keySet()) { + addCard(borderPane, gridPane, vBox, i, cardName); + i++; + } + + ScrollPane scrollPane = new ScrollPane(); + scrollPane.setContent(vBox); + borderPane.setCenter(scrollPane); + Scene scene = new Scene(borderPane,800,650); + + Image img = new Image(Objects.requireNonNull(getClass().getResource("cursor.png")).toExternalForm()); + ImageCursor cursor = new ImageCursor(img, 10, 10); + scene.setCursor(cursor); + + Main.stage.setScene(scene); + } + + private void addCard(BorderPane borderPane, GridPane gridPane, VBox vBox, int i, String cardName) { + if (Card.allCards.get(cardName).getCardsType() == Type.MONSTER) { + ImageView imageView2 = new ImageView(new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/Monsters/" + cardName + ".jpg")).toExternalForm(), 80, 100, false, false)); + imageView2.setOnMouseClicked(mouseEvent -> addFunc(borderPane, vBox, cardName)); + gridPane.add(imageView2,0,i); + + Text cardNameTxt = new Text(cardName); + cardNameTxt.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + gridPane.add(cardNameTxt,1,i); + + Text activeDeckText = new Text("ŁŽX" + map.get(cardName)); + activeDeckText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + gridPane.add(activeDeckText,2,i); + + Text numberInDeckText = new Text("ŁŽX" + Deck.getNumberOfCardsInWholeDeck(deck.getDeckName(), cardName)); + numberInDeckText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + gridPane.add(numberInDeckText,3,i); + } else { + ImageView imageView2 = new ImageView(new Image(Objects.requireNonNull(getClass().getResource("/view/menus/shop/SpellTrap/" + cardName + ".jpg")).toExternalForm(), 80, 100, false, false)); + imageView2.setOnMouseClicked(mouseEvent -> addFunc(borderPane, vBox, cardName)); + gridPane.add(imageView2,0,i); + + Text cardNameTxt = new Text(cardName); + cardNameTxt.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + gridPane.add(cardNameTxt,1,i); + + Text activeDeckText = new Text("ŁŽX" + map.get(cardName)); + activeDeckText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + gridPane.add(activeDeckText,2,i); + + Text numberInDeckText = new Text("ŁŽX" + Deck.getNumberOfCardsInWholeDeck(deck.getDeckName(), cardName)); + numberInDeckText.setFont(Font.font("tahoma", FontWeight.LIGHT ,25)); + gridPane.add(numberInDeckText,3,i); + } + } + + private void addFunc(BorderPane borderPane, VBox vBox, String cardName) { + HBox hBox1 = new HBox(); + + Label label = new Label("Where Do You Want To Add " + cardName + " To Deck " + deck.getDeckName()); + label.setFont(Font.font(20)); + label.setTextFill(Color.web("Black")); + + Button button1 = new Button("Main"); + button1.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button1.setOnAction(actionEvent -> { + showAlert(vBox.getScene().getWindow(), "add Card To Main Deck", DeckMenu.getInstance(user).addCard(cardName, deck.getDeckName())); + DataBase.storeDecks(allDecks); + DataBase.saveTheUserList(User.getUsers()); + new inDeckMenu(deck,user).start(); + }); + + Button button2 = new Button("Side"); + button2.setStyle("-fx-background-color: #c3c4c4," + + "linear-gradient(#d6d6d6 50%, white 100%)," + + "radial-gradient(center 50% -40%, radius 200%, #e6e6e6 45%, rgba(230,230,230,0) 50%);" + + "-fx-background-radius: 30; -fx-background-insets: 0,1,1;" + + "-fx-text-fill: black; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 3, 0.0 , 0 , 1 );"); + button2.setOnAction(actionEvent -> { + showAlert(vBox.getScene().getWindow(), "add Card To Side Deck", DeckMenu.getInstance(user).addCardToSide(cardName, deck.getDeckName())); + DataBase.storeDecks(allDecks); + DataBase.saveTheUserList(User.getUsers()); + new inDeckMenu(deck,user).start(); + }); + + hBox1.getChildren().addAll(label,button1,button2); + hBox1.setSpacing(10); + borderPane.setTop(hBox1); + } + + private void showAlert(Window owner, String title, String message) { + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle(title); + alert.setHeaderText(null); + alert.setContentText(message); + alert.initOwner(owner); + alert.showAndWait(); + } +} diff --git a/src/main/java/view/menus/subStage.java b/src/main/java/view/menus/subStage.java new file mode 100644 index 0000000..b6ed8a1 --- /dev/null +++ b/src/main/java/view/menus/subStage.java @@ -0,0 +1,23 @@ +package view.menus; + +import javafx.scene.Scene; +import javafx.stage.Modality; +import javafx.stage.Stage; +import view.Main; + +public class subStage { + Stage stage; + public subStage(String title, Scene scene) { + Stage subStage = new Stage(); + this.stage = subStage; + subStage.setTitle(title); + subStage.setScene(scene); + subStage.initModality(Modality.WINDOW_MODAL); + subStage.initOwner(Main.stage); + subStage.show(); + } + + public Stage getStage() { + return stage; + } +} diff --git a/src/main/resources/controllers/Battelfield/Monsters/AlexandriteDragon.jpg b/src/main/resources/controllers/Battelfield/Monsters/AlexandriteDragon.jpg new file mode 100644 index 0000000..8b4eb98 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/AlexandriteDragon.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/AxeRaider.jpg b/src/main/resources/controllers/Battelfield/Monsters/AxeRaider.jpg new file mode 100644 index 0000000..57b5280 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/AxeRaider.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Babydragon.jpg b/src/main/resources/controllers/Battelfield/Monsters/Babydragon.jpg new file mode 100644 index 0000000..57eb39b Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Babydragon.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/BattleOX.jpg b/src/main/resources/controllers/Battelfield/Monsters/BattleOX.jpg new file mode 100644 index 0000000..d1e1baf Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/BattleOX.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Battlewarrior.jpg b/src/main/resources/controllers/Battelfield/Monsters/Battlewarrior.jpg new file mode 100644 index 0000000..502a93b Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Battlewarrior.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/BeastKingBarbaros.jpg b/src/main/resources/controllers/Battelfield/Monsters/BeastKingBarbaros.jpg new file mode 100644 index 0000000..1a697a9 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/BeastKingBarbaros.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Bitron.jpg b/src/main/resources/controllers/Battelfield/Monsters/Bitron.jpg new file mode 100644 index 0000000..72aae1b Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Bitron.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Blue-Eyeswhitedragon.jpg b/src/main/resources/controllers/Battelfield/Monsters/Blue-Eyeswhitedragon.jpg new file mode 100644 index 0000000..18493a2 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Blue-Eyeswhitedragon.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/CommandKnight.jpg b/src/main/resources/controllers/Battelfield/Monsters/CommandKnight.jpg new file mode 100644 index 0000000..642d246 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/CommandKnight.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/CrabTurtle.jpg b/src/main/resources/controllers/Battelfield/Monsters/CrabTurtle.jpg new file mode 100644 index 0000000..c296f6d Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/CrabTurtle.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Crawlingdragon.jpg b/src/main/resources/controllers/Battelfield/Monsters/Crawlingdragon.jpg new file mode 100644 index 0000000..a000c18 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Crawlingdragon.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Curtainofthedarkones.jpg b/src/main/resources/controllers/Battelfield/Monsters/Curtainofthedarkones.jpg new file mode 100644 index 0000000..f485f28 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Curtainofthedarkones.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/DarkBlade.jpg b/src/main/resources/controllers/Battelfield/Monsters/DarkBlade.jpg new file mode 100644 index 0000000..72c06a9 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/DarkBlade.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Darkmagician.jpg b/src/main/resources/controllers/Battelfield/Monsters/Darkmagician.jpg new file mode 100644 index 0000000..390437c Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Darkmagician.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/ExploderDragon.jpg b/src/main/resources/controllers/Battelfield/Monsters/ExploderDragon.jpg new file mode 100644 index 0000000..6b11cde Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/ExploderDragon.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/FeralImp.jpg b/src/main/resources/controllers/Battelfield/Monsters/FeralImp.jpg new file mode 100644 index 0000000..e7f4b5f Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/FeralImp.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Fireyarou.jpg b/src/main/resources/controllers/Battelfield/Monsters/Fireyarou.jpg new file mode 100644 index 0000000..31f59a6 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Fireyarou.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Flamemanipulator.jpg b/src/main/resources/controllers/Battelfield/Monsters/Flamemanipulator.jpg new file mode 100644 index 0000000..b2389e4 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Flamemanipulator.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/GateGuardian.jpg b/src/main/resources/controllers/Battelfield/Monsters/GateGuardian.jpg new file mode 100644 index 0000000..2df729a Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/GateGuardian.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Haniwa.jpg b/src/main/resources/controllers/Battelfield/Monsters/Haniwa.jpg new file mode 100644 index 0000000..7dea060 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Haniwa.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/HeraldofCreation.jpg b/src/main/resources/controllers/Battelfield/Monsters/HeraldofCreation.jpg new file mode 100644 index 0000000..9c9e9ec Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/HeraldofCreation.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Herooftheeast.jpg b/src/main/resources/controllers/Battelfield/Monsters/Herooftheeast.jpg new file mode 100644 index 0000000..1f42b88 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Herooftheeast.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/HornImp.jpg b/src/main/resources/controllers/Battelfield/Monsters/HornImp.jpg new file mode 100644 index 0000000..348c307 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/HornImp.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Leotron.jpg b/src/main/resources/controllers/Battelfield/Monsters/Leotron.jpg new file mode 100644 index 0000000..7561aef Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Leotron.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Man-EaterBug.jpg b/src/main/resources/controllers/Battelfield/Monsters/Man-EaterBug.jpg new file mode 100644 index 0000000..a79c2bc Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Man-EaterBug.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Marshmallon.jpg b/src/main/resources/controllers/Battelfield/Monsters/Marshmallon.jpg new file mode 100644 index 0000000..ddd7932 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Marshmallon.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/MirageDragon.jpg b/src/main/resources/controllers/Battelfield/Monsters/MirageDragon.jpg new file mode 100644 index 0000000..f06a4e4 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/MirageDragon.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Scanner.jpg b/src/main/resources/controllers/Battelfield/Monsters/Scanner.jpg new file mode 100644 index 0000000..926d38b Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Scanner.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/SilverFang.jpg b/src/main/resources/controllers/Battelfield/Monsters/SilverFang.jpg new file mode 100644 index 0000000..b910f16 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/SilverFang.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/SkullGuardian.jpg b/src/main/resources/controllers/Battelfield/Monsters/SkullGuardian.jpg new file mode 100644 index 0000000..bbc7cb9 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/SkullGuardian.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/SlotMachine.jpg b/src/main/resources/controllers/Battelfield/Monsters/SlotMachine.jpg new file mode 100644 index 0000000..3b3b1a6 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/SlotMachine.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/SpiralSerpent.jpg b/src/main/resources/controllers/Battelfield/Monsters/SpiralSerpent.jpg new file mode 100644 index 0000000..3a26fce Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/SpiralSerpent.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Suijin.jpg b/src/main/resources/controllers/Battelfield/Monsters/Suijin.jpg new file mode 100644 index 0000000..aa4bf0c Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Suijin.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Terratiger,TheEmpoweredWarrior.jpg b/src/main/resources/controllers/Battelfield/Monsters/Terratiger,TheEmpoweredWarrior.jpg new file mode 100644 index 0000000..04bc9dd Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Terratiger,TheEmpoweredWarrior.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Texchanger.jpg b/src/main/resources/controllers/Battelfield/Monsters/Texchanger.jpg new file mode 100644 index 0000000..b3026b6 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Texchanger.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/TheCalculator.jpg b/src/main/resources/controllers/Battelfield/Monsters/TheCalculator.jpg new file mode 100644 index 0000000..afde12d Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/TheCalculator.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/TheTricky.jpg b/src/main/resources/controllers/Battelfield/Monsters/TheTricky.jpg new file mode 100644 index 0000000..d0f7f3e Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/TheTricky.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Unknown.jpg b/src/main/resources/controllers/Battelfield/Monsters/Unknown.jpg new file mode 100644 index 0000000..15d0de9 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Unknown.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/WarriorDaiGrepher.jpg b/src/main/resources/controllers/Battelfield/Monsters/WarriorDaiGrepher.jpg new file mode 100644 index 0000000..f577970 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/WarriorDaiGrepher.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Wattaildragon.jpg b/src/main/resources/controllers/Battelfield/Monsters/Wattaildragon.jpg new file mode 100644 index 0000000..2982bb3 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Wattaildragon.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/Wattkid.jpg b/src/main/resources/controllers/Battelfield/Monsters/Wattkid.jpg new file mode 100644 index 0000000..687e2d0 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/Wattkid.jpg differ diff --git a/src/main/resources/controllers/Battelfield/Monsters/YomiShip.jpg b/src/main/resources/controllers/Battelfield/Monsters/YomiShip.jpg new file mode 100644 index 0000000..012739d Binary files /dev/null and b/src/main/resources/controllers/Battelfield/Monsters/YomiShip.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/AdvancedRitualArt.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/AdvancedRitualArt.jpg new file mode 100644 index 0000000..e212724 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/AdvancedRitualArt.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/BlackPendant.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/BlackPendant.jpg new file mode 100644 index 0000000..3f4aeec Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/BlackPendant.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/CallofTheHaunted.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/CallofTheHaunted.jpg new file mode 100644 index 0000000..a84bff7 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/CallofTheHaunted.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/ChangeofHeart.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/ChangeofHeart.jpg new file mode 100644 index 0000000..754321e Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/ChangeofHeart.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/ClosedForest.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/ClosedForest.jpg new file mode 100644 index 0000000..e68caeb Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/ClosedForest.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/DarkHole.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/DarkHole.jpg new file mode 100644 index 0000000..22141dd Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/DarkHole.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Forest.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Forest.jpg new file mode 100644 index 0000000..92552f9 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Forest.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Harpie'sFeatherDuster.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Harpie'sFeatherDuster.jpg new file mode 100644 index 0000000..09a4cc0 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Harpie'sFeatherDuster.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/MagicCylinder.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/MagicCylinder.jpg new file mode 100644 index 0000000..4c1e6d8 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/MagicCylinder.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/MagicJammer.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/MagicJammer.jpg new file mode 100644 index 0000000..9ab1c43 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/MagicJammer.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/MagnumShield.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/MagnumShield.jpg new file mode 100644 index 0000000..5f6ebb7 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/MagnumShield.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Messengerofpeace.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Messengerofpeace.jpg new file mode 100644 index 0000000..1ea9907 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Messengerofpeace.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/MindCrush.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/MindCrush.jpg new file mode 100644 index 0000000..ea5196d Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/MindCrush.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/MirrorForce.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/MirrorForce.jpg new file mode 100644 index 0000000..38635ce Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/MirrorForce.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/MonsterReborn.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/MonsterReborn.jpg new file mode 100644 index 0000000..cd129f4 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/MonsterReborn.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Mysticalspacetyphoon.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Mysticalspacetyphoon.jpg new file mode 100644 index 0000000..1e9949f Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Mysticalspacetyphoon.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/NegateAttack.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/NegateAttack.jpg new file mode 100644 index 0000000..e8a30ee Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/NegateAttack.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/PotofGreed.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/PotofGreed.jpg new file mode 100644 index 0000000..eab2160 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/PotofGreed.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Raigeki.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Raigeki.jpg new file mode 100644 index 0000000..6cec6d0 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Raigeki.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Ringofdefense.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Ringofdefense.jpg new file mode 100644 index 0000000..642a61a Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Ringofdefense.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/SolemnWarning.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/SolemnWarning.jpg new file mode 100644 index 0000000..02ac41a Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/SolemnWarning.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/SpellAbsorption.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/SpellAbsorption.jpg new file mode 100644 index 0000000..710be97 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/SpellAbsorption.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/SupplySquad.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/SupplySquad.jpg new file mode 100644 index 0000000..b4e4d6f Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/SupplySquad.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Swordofdarkdestruction.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Swordofdarkdestruction.jpg new file mode 100644 index 0000000..277fe0c Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Swordofdarkdestruction.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/SwordsOfRevealingLight.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/SwordsOfRevealingLight.jpg new file mode 100644 index 0000000..0c0b2f0 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/SwordsOfRevealingLight.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Terraforming.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Terraforming.jpg new file mode 100644 index 0000000..a6ffc61 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Terraforming.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/TimeSeal.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/TimeSeal.jpg new file mode 100644 index 0000000..62eeab9 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/TimeSeal.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/TorrentialTribute.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/TorrentialTribute.jpg new file mode 100644 index 0000000..13b2ca0 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/TorrentialTribute.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/TrapHole.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/TrapHole.jpg new file mode 100644 index 0000000..7f11e59 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/TrapHole.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/TwinTwisters.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/TwinTwisters.jpg new file mode 100644 index 0000000..9cb4fa9 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/TwinTwisters.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Umiiruka.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Umiiruka.jpg new file mode 100644 index 0000000..d283f7c Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Umiiruka.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/UnitedWeStand.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/UnitedWeStand.jpg new file mode 100644 index 0000000..a845bcd Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/UnitedWeStand.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Vanity'sEmptiness.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Vanity'sEmptiness.jpg new file mode 100644 index 0000000..9a05ec1 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Vanity'sEmptiness.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/WallOfRevealingLight.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/WallOfRevealingLight.jpg new file mode 100644 index 0000000..a0763b1 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/WallOfRevealingLight.jpg differ diff --git a/src/main/resources/controllers/Battelfield/SpellTrap/Yami.jpg b/src/main/resources/controllers/Battelfield/SpellTrap/Yami.jpg new file mode 100644 index 0000000..96fad28 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/SpellTrap/Yami.jpg differ diff --git a/src/main/resources/controllers/Battelfield/login/Login.css b/src/main/resources/controllers/Battelfield/login/Login.css new file mode 100644 index 0000000..bb25a8e --- /dev/null +++ b/src/main/resources/controllers/Battelfield/login/Login.css @@ -0,0 +1,32 @@ +root { + display: block; +} +.root { + -fx-background-image: url("background.jpg"); +} +.label { + -fx-font-size: 12px; + -fx-font-weight: bold; + -fx-text-fill: #fdfdfd; + -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); +} + +#welcome-text { + -fx-font-size: 32px; + -fx-font-family: "Arial Black"; + -fx-fill: #818181; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} +#actiontarget { + -fx-fill: FIREBRICK; + -fx-font-weight: bold; + -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); +} + +.button { + -fx-text-fill: white; + -fx-font-family: "Arial Narrow"; + -fx-font-weight: bold; + -fx-background-color: linear-gradient(#61a2b1, #2A5058); + -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); +} diff --git a/src/main/resources/controllers/Battelfield/login/background.jpg b/src/main/resources/controllers/Battelfield/login/background.jpg new file mode 100644 index 0000000..bdbb82b Binary files /dev/null and b/src/main/resources/controllers/Battelfield/login/background.jpg differ diff --git a/src/main/resources/controllers/Battelfield/tenor.gif b/src/main/resources/controllers/Battelfield/tenor.gif new file mode 100644 index 0000000..b67a7c1 Binary files /dev/null and b/src/main/resources/controllers/Battelfield/tenor.gif differ diff --git a/src/main/resources/controllers/menues/tenor.gif b/src/main/resources/controllers/menues/tenor.gif new file mode 100644 index 0000000..b67a7c1 Binary files /dev/null and b/src/main/resources/controllers/menues/tenor.gif differ diff --git a/src/main/resources/models/Images/1.png b/src/main/resources/models/Images/1.png new file mode 100644 index 0000000..67ce500 Binary files /dev/null and b/src/main/resources/models/Images/1.png differ diff --git a/src/main/resources/models/UserImages/1.png b/src/main/resources/models/UserImages/1.png new file mode 100644 index 0000000..67ce500 Binary files /dev/null and b/src/main/resources/models/UserImages/1.png differ diff --git a/src/main/resources/models/UserImages/10.png b/src/main/resources/models/UserImages/10.png new file mode 100644 index 0000000..cef49f9 Binary files /dev/null and b/src/main/resources/models/UserImages/10.png differ diff --git a/src/main/resources/models/UserImages/11.png b/src/main/resources/models/UserImages/11.png new file mode 100644 index 0000000..a384d98 Binary files /dev/null and b/src/main/resources/models/UserImages/11.png differ diff --git a/src/main/resources/models/UserImages/12.png b/src/main/resources/models/UserImages/12.png new file mode 100644 index 0000000..2e9a360 Binary files /dev/null and b/src/main/resources/models/UserImages/12.png differ diff --git a/src/main/resources/models/UserImages/13.png b/src/main/resources/models/UserImages/13.png new file mode 100644 index 0000000..af5bb06 Binary files /dev/null and b/src/main/resources/models/UserImages/13.png differ diff --git a/src/main/resources/models/UserImages/14.png b/src/main/resources/models/UserImages/14.png new file mode 100644 index 0000000..274341e Binary files /dev/null and b/src/main/resources/models/UserImages/14.png differ diff --git a/src/main/resources/models/UserImages/15.png b/src/main/resources/models/UserImages/15.png new file mode 100644 index 0000000..b85de2d Binary files /dev/null and b/src/main/resources/models/UserImages/15.png differ diff --git a/src/main/resources/models/UserImages/16.png b/src/main/resources/models/UserImages/16.png new file mode 100644 index 0000000..58c44fd Binary files /dev/null and b/src/main/resources/models/UserImages/16.png differ diff --git a/src/main/resources/models/UserImages/17.png b/src/main/resources/models/UserImages/17.png new file mode 100644 index 0000000..3099336 Binary files /dev/null and b/src/main/resources/models/UserImages/17.png differ diff --git a/src/main/resources/models/UserImages/18.png b/src/main/resources/models/UserImages/18.png new file mode 100644 index 0000000..b21baf5 Binary files /dev/null and b/src/main/resources/models/UserImages/18.png differ diff --git a/src/main/resources/models/UserImages/19.png b/src/main/resources/models/UserImages/19.png new file mode 100644 index 0000000..8771563 Binary files /dev/null and b/src/main/resources/models/UserImages/19.png differ diff --git a/src/main/resources/models/UserImages/2.png b/src/main/resources/models/UserImages/2.png new file mode 100644 index 0000000..b471180 Binary files /dev/null and b/src/main/resources/models/UserImages/2.png differ diff --git a/src/main/resources/models/UserImages/20.png b/src/main/resources/models/UserImages/20.png new file mode 100644 index 0000000..a019a0c Binary files /dev/null and b/src/main/resources/models/UserImages/20.png differ diff --git a/src/main/resources/models/UserImages/21.png b/src/main/resources/models/UserImages/21.png new file mode 100644 index 0000000..bcbc43a Binary files /dev/null and b/src/main/resources/models/UserImages/21.png differ diff --git a/src/main/resources/models/UserImages/22.png b/src/main/resources/models/UserImages/22.png new file mode 100644 index 0000000..fc7b006 Binary files /dev/null and b/src/main/resources/models/UserImages/22.png differ diff --git a/src/main/resources/models/UserImages/23.png b/src/main/resources/models/UserImages/23.png new file mode 100644 index 0000000..7fe8ad3 Binary files /dev/null and b/src/main/resources/models/UserImages/23.png differ diff --git a/src/main/resources/models/UserImages/24.png b/src/main/resources/models/UserImages/24.png new file mode 100644 index 0000000..c72b153 Binary files /dev/null and b/src/main/resources/models/UserImages/24.png differ diff --git a/src/main/resources/models/UserImages/25.png b/src/main/resources/models/UserImages/25.png new file mode 100644 index 0000000..f59b1a8 Binary files /dev/null and b/src/main/resources/models/UserImages/25.png differ diff --git a/src/main/resources/models/UserImages/26.png b/src/main/resources/models/UserImages/26.png new file mode 100644 index 0000000..45aec62 Binary files /dev/null and b/src/main/resources/models/UserImages/26.png differ diff --git a/src/main/resources/models/UserImages/27.png b/src/main/resources/models/UserImages/27.png new file mode 100644 index 0000000..bd4ed63 Binary files /dev/null and b/src/main/resources/models/UserImages/27.png differ diff --git a/src/main/resources/models/UserImages/28.png b/src/main/resources/models/UserImages/28.png new file mode 100644 index 0000000..707beee Binary files /dev/null and b/src/main/resources/models/UserImages/28.png differ diff --git a/src/main/resources/models/UserImages/29.png b/src/main/resources/models/UserImages/29.png new file mode 100644 index 0000000..64401be Binary files /dev/null and b/src/main/resources/models/UserImages/29.png differ diff --git a/src/main/resources/models/UserImages/3.png b/src/main/resources/models/UserImages/3.png new file mode 100644 index 0000000..0b92223 Binary files /dev/null and b/src/main/resources/models/UserImages/3.png differ diff --git a/src/main/resources/models/UserImages/30.png b/src/main/resources/models/UserImages/30.png new file mode 100644 index 0000000..685ff73 Binary files /dev/null and b/src/main/resources/models/UserImages/30.png differ diff --git a/src/main/resources/models/UserImages/4.png b/src/main/resources/models/UserImages/4.png new file mode 100644 index 0000000..02801eb Binary files /dev/null and b/src/main/resources/models/UserImages/4.png differ diff --git a/src/main/resources/models/UserImages/5.png b/src/main/resources/models/UserImages/5.png new file mode 100644 index 0000000..c68fe06 Binary files /dev/null and b/src/main/resources/models/UserImages/5.png differ diff --git a/src/main/resources/models/UserImages/6.png b/src/main/resources/models/UserImages/6.png new file mode 100644 index 0000000..72a0313 Binary files /dev/null and b/src/main/resources/models/UserImages/6.png differ diff --git a/src/main/resources/models/UserImages/7.png b/src/main/resources/models/UserImages/7.png new file mode 100644 index 0000000..925f306 Binary files /dev/null and b/src/main/resources/models/UserImages/7.png differ diff --git a/src/main/resources/models/UserImages/8.png b/src/main/resources/models/UserImages/8.png new file mode 100644 index 0000000..72593f2 Binary files /dev/null and b/src/main/resources/models/UserImages/8.png differ diff --git a/src/main/resources/models/UserImages/9.png b/src/main/resources/models/UserImages/9.png new file mode 100644 index 0000000..fdb5582 Binary files /dev/null and b/src/main/resources/models/UserImages/9.png differ diff --git a/src/main/resources/models/UserImages/admin.png b/src/main/resources/models/UserImages/admin.png new file mode 100644 index 0000000..67ce500 Binary files /dev/null and b/src/main/resources/models/UserImages/admin.png differ diff --git a/src/main/resources/music/CARD_CRASH.mp3 b/src/main/resources/music/CARD_CRASH.mp3 new file mode 100644 index 0000000..9f70d8f Binary files /dev/null and b/src/main/resources/music/CARD_CRASH.mp3 differ diff --git a/src/main/resources/music/COIN.mp3 b/src/main/resources/music/COIN.mp3 new file mode 100644 index 0000000..9c92cf2 Binary files /dev/null and b/src/main/resources/music/COIN.mp3 differ diff --git a/src/main/resources/music/SUMMON&SET.mp3 b/src/main/resources/music/SUMMON&SET.mp3 new file mode 100644 index 0000000..71b8a10 Binary files /dev/null and b/src/main/resources/music/SUMMON&SET.mp3 differ diff --git a/src/main/resources/music/firstMusic.mp3 b/src/main/resources/music/firstMusic.mp3 new file mode 100644 index 0000000..5c36aca Binary files /dev/null and b/src/main/resources/music/firstMusic.mp3 differ diff --git a/src/main/resources/music/game.mp3 b/src/main/resources/music/game.mp3 new file mode 100644 index 0000000..e92d5de Binary files /dev/null and b/src/main/resources/music/game.mp3 differ diff --git a/src/main/resources/music/menu.mp3 b/src/main/resources/music/menu.mp3 new file mode 100644 index 0000000..63b07a7 Binary files /dev/null and b/src/main/resources/music/menu.mp3 differ diff --git a/src/main/resources/view/game/background.jpeg b/src/main/resources/view/game/background.jpeg new file mode 100644 index 0000000..f2bcc24 Binary files /dev/null and b/src/main/resources/view/game/background.jpeg differ diff --git a/src/main/resources/view/game/background.jpg b/src/main/resources/view/game/background.jpg new file mode 100644 index 0000000..bdbb82b Binary files /dev/null and b/src/main/resources/view/game/background.jpg differ diff --git a/src/main/resources/view/game/game.css b/src/main/resources/view/game/game.css new file mode 100644 index 0000000..d7ed0fc --- /dev/null +++ b/src/main/resources/view/game/game.css @@ -0,0 +1,34 @@ +root { + display: block; +} +.root { + -fx-background-image: url("background.jpg"); +} +.label { + -fx-font-size: 16px; + -fx-font-family: "Arial Black"; + -fx-font-weight: bold; + -fx-text-fill: #ffffff; + -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); +} + +.welcome-text { + -fx-font-size: 32px; + -fx-font-family: "Arial Black"; + -fx-fill: #ffffff; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} +.user-text { + -fx-font-size: 20px; + -fx-font-family: "Arial Black"; + -fx-fill: #ff0000; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} + +.button { + -fx-text-fill: white; + -fx-font-family: "Arial Narrow"; + -fx-font-weight: bold; + -fx-background-color: linear-gradient(#61a2b1, #2A5058); + -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); +} diff --git a/src/main/resources/view/menus/cursor.png b/src/main/resources/view/menus/cursor.png new file mode 100644 index 0000000..30c7670 Binary files /dev/null and b/src/main/resources/view/menus/cursor.png differ diff --git a/src/main/resources/view/menus/deck/Deck.css b/src/main/resources/view/menus/deck/Deck.css new file mode 100644 index 0000000..7f14413 --- /dev/null +++ b/src/main/resources/view/menus/deck/Deck.css @@ -0,0 +1,34 @@ +root { + display: block; +} +.root { + -fx-background-image: url("background.jpg"); + -fx-background-repeat: no-repeat; + -fx-background-size: cover; +} +.label { + -fx-font-size: 12px; + -fx-font-weight: bold; + -fx-text-fill: #333333; + -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); +} + +#welcome-text { + -fx-font-size: 32px; + -fx-font-family: "Arial Black"; + -fx-fill: #818181; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} +#actiontarget { + -fx-fill: FIREBRICK; + -fx-font-weight: bold; + -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); +} + +.button { + -fx-text-fill: white; + -fx-font-family: "Arial Narrow"; + -fx-font-weight: bold; + -fx-background-color: linear-gradient(#61a2b1, #2A5058); + -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); +} diff --git a/src/main/resources/view/menus/deck/background.jpg b/src/main/resources/view/menus/deck/background.jpg new file mode 100644 index 0000000..c4ad206 Binary files /dev/null and b/src/main/resources/view/menus/deck/background.jpg differ diff --git a/src/main/resources/view/menus/deck/delete.png b/src/main/resources/view/menus/deck/delete.png new file mode 100644 index 0000000..9673d98 Binary files /dev/null and b/src/main/resources/view/menus/deck/delete.png differ diff --git a/src/main/resources/view/menus/deck/eye.png b/src/main/resources/view/menus/deck/eye.png new file mode 100644 index 0000000..d985b4b Binary files /dev/null and b/src/main/resources/view/menus/deck/eye.png differ diff --git a/src/main/resources/view/menus/deck/pencil.png b/src/main/resources/view/menus/deck/pencil.png new file mode 100644 index 0000000..e25d4f8 Binary files /dev/null and b/src/main/resources/view/menus/deck/pencil.png differ diff --git a/src/main/resources/view/menus/deck/star.png b/src/main/resources/view/menus/deck/star.png new file mode 100644 index 0000000..050e397 Binary files /dev/null and b/src/main/resources/view/menus/deck/star.png differ diff --git a/src/main/resources/view/menus/duel/background.jpg b/src/main/resources/view/menus/duel/background.jpg new file mode 100644 index 0000000..b28c856 Binary files /dev/null and b/src/main/resources/view/menus/duel/background.jpg differ diff --git a/src/main/resources/view/menus/duel/duel.css b/src/main/resources/view/menus/duel/duel.css new file mode 100644 index 0000000..d7ed0fc --- /dev/null +++ b/src/main/resources/view/menus/duel/duel.css @@ -0,0 +1,34 @@ +root { + display: block; +} +.root { + -fx-background-image: url("background.jpg"); +} +.label { + -fx-font-size: 16px; + -fx-font-family: "Arial Black"; + -fx-font-weight: bold; + -fx-text-fill: #ffffff; + -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); +} + +.welcome-text { + -fx-font-size: 32px; + -fx-font-family: "Arial Black"; + -fx-fill: #ffffff; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} +.user-text { + -fx-font-size: 20px; + -fx-font-family: "Arial Black"; + -fx-fill: #ff0000; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} + +.button { + -fx-text-fill: white; + -fx-font-family: "Arial Narrow"; + -fx-font-weight: bold; + -fx-background-color: linear-gradient(#61a2b1, #2A5058); + -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); +} diff --git a/src/main/resources/view/menus/elements/deck.png b/src/main/resources/view/menus/elements/deck.png new file mode 100644 index 0000000..4853055 Binary files /dev/null and b/src/main/resources/view/menus/elements/deck.png differ diff --git a/src/main/resources/view/menus/elements/default.png b/src/main/resources/view/menus/elements/default.png new file mode 100644 index 0000000..7543bff Binary files /dev/null and b/src/main/resources/view/menus/elements/default.png differ diff --git a/src/main/resources/view/menus/elements/field.png b/src/main/resources/view/menus/elements/field.png new file mode 100644 index 0000000..a6c6420 Binary files /dev/null and b/src/main/resources/view/menus/elements/field.png differ diff --git a/src/main/resources/view/menus/elements/graveYard.png b/src/main/resources/view/menus/elements/graveYard.png new file mode 100644 index 0000000..2f9a1fc Binary files /dev/null and b/src/main/resources/view/menus/elements/graveYard.png differ diff --git a/src/main/resources/view/menus/field/fie_burn.bmp b/src/main/resources/view/menus/field/fie_burn.bmp new file mode 100644 index 0000000..9c6923e Binary files /dev/null and b/src/main/resources/view/menus/field/fie_burn.bmp differ diff --git a/src/main/resources/view/menus/field/fie_dark.bmp b/src/main/resources/view/menus/field/fie_dark.bmp new file mode 100644 index 0000000..7042a5f Binary files /dev/null and b/src/main/resources/view/menus/field/fie_dark.bmp differ diff --git a/src/main/resources/view/menus/field/fie_desert.bmp b/src/main/resources/view/menus/field/fie_desert.bmp new file mode 100644 index 0000000..959da03 Binary files /dev/null and b/src/main/resources/view/menus/field/fie_desert.bmp differ diff --git a/src/main/resources/view/menus/field/fie_fusion.bmp b/src/main/resources/view/menus/field/fie_fusion.bmp new file mode 100644 index 0000000..bb8508a Binary files /dev/null and b/src/main/resources/view/menus/field/fie_fusion.bmp differ diff --git a/src/main/resources/view/menus/field/fie_gaia.bmp b/src/main/resources/view/menus/field/fie_gaia.bmp new file mode 100644 index 0000000..6d6657d Binary files /dev/null and b/src/main/resources/view/menus/field/fie_gaia.bmp differ diff --git a/src/main/resources/view/menus/field/fie_mori.bmp b/src/main/resources/view/menus/field/fie_mori.bmp new file mode 100644 index 0000000..2dfb984 Binary files /dev/null and b/src/main/resources/view/menus/field/fie_mori.bmp differ diff --git a/src/main/resources/view/menus/field/fie_normal.bmp b/src/main/resources/view/menus/field/fie_normal.bmp new file mode 100644 index 0000000..a2e09a6 Binary files /dev/null and b/src/main/resources/view/menus/field/fie_normal.bmp differ diff --git a/src/main/resources/view/menus/field/fie_sanctu.bmp b/src/main/resources/view/menus/field/fie_sanctu.bmp new file mode 100644 index 0000000..71f8a11 Binary files /dev/null and b/src/main/resources/view/menus/field/fie_sanctu.bmp differ diff --git a/src/main/resources/view/menus/field/fie_shine.bmp b/src/main/resources/view/menus/field/fie_shine.bmp new file mode 100644 index 0000000..ce4aaf3 Binary files /dev/null and b/src/main/resources/view/menus/field/fie_shine.bmp differ diff --git a/src/main/resources/view/menus/field/fie_sougen.bmp b/src/main/resources/view/menus/field/fie_sougen.bmp new file mode 100644 index 0000000..9a4038d Binary files /dev/null and b/src/main/resources/view/menus/field/fie_sougen.bmp differ diff --git a/src/main/resources/view/menus/field/fie_umi.bmp b/src/main/resources/view/menus/field/fie_umi.bmp new file mode 100644 index 0000000..8aebda4 Binary files /dev/null and b/src/main/resources/view/menus/field/fie_umi.bmp differ diff --git a/src/main/resources/view/menus/field/fie_water.bmp b/src/main/resources/view/menus/field/fie_water.bmp new file mode 100644 index 0000000..877f106 Binary files /dev/null and b/src/main/resources/view/menus/field/fie_water.bmp differ diff --git a/src/main/resources/view/menus/field/fie_yama.bmp b/src/main/resources/view/menus/field/fie_yama.bmp new file mode 100644 index 0000000..3eb6c42 Binary files /dev/null and b/src/main/resources/view/menus/field/fie_yama.bmp differ diff --git a/src/main/resources/view/menus/field/fie_yami.bmp b/src/main/resources/view/menus/field/fie_yami.bmp new file mode 100644 index 0000000..c2d8315 Binary files /dev/null and b/src/main/resources/view/menus/field/fie_yami.bmp differ diff --git a/src/main/resources/view/menus/game/Game.fxml b/src/main/resources/view/menus/game/Game.fxml new file mode 100644 index 0000000..d844201 --- /dev/null +++ b/src/main/resources/view/menus/game/Game.fxml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/view/menus/game/Monsters/Alexandrite Dragon.jpg b/src/main/resources/view/menus/game/Monsters/Alexandrite Dragon.jpg new file mode 100644 index 0000000..8b4eb98 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Alexandrite Dragon.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Axe Raider.jpg b/src/main/resources/view/menus/game/Monsters/Axe Raider.jpg new file mode 100644 index 0000000..57b5280 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Axe Raider.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Baby dragon.jpg b/src/main/resources/view/menus/game/Monsters/Baby dragon.jpg new file mode 100644 index 0000000..57eb39b Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Baby dragon.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Battle OX.jpg b/src/main/resources/view/menus/game/Monsters/Battle OX.jpg new file mode 100644 index 0000000..d1e1baf Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Battle OX.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Battle warrior.jpg b/src/main/resources/view/menus/game/Monsters/Battle warrior.jpg new file mode 100644 index 0000000..502a93b Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Battle warrior.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Beast King Barbaros.jpg b/src/main/resources/view/menus/game/Monsters/Beast King Barbaros.jpg new file mode 100644 index 0000000..1a697a9 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Beast King Barbaros.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Bitron.jpg b/src/main/resources/view/menus/game/Monsters/Bitron.jpg new file mode 100644 index 0000000..72aae1b Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Bitron.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Blue-Eyes white dragon.jpg b/src/main/resources/view/menus/game/Monsters/Blue-Eyes white dragon.jpg new file mode 100644 index 0000000..18493a2 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Blue-Eyes white dragon.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Command Knight.jpg b/src/main/resources/view/menus/game/Monsters/Command Knight.jpg new file mode 100644 index 0000000..642d246 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Command Knight.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Crab Turtle.jpg b/src/main/resources/view/menus/game/Monsters/Crab Turtle.jpg new file mode 100644 index 0000000..c296f6d Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Crab Turtle.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Crawling dragon.jpg b/src/main/resources/view/menus/game/Monsters/Crawling dragon.jpg new file mode 100644 index 0000000..a000c18 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Crawling dragon.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Curtain of the dark ones.jpg b/src/main/resources/view/menus/game/Monsters/Curtain of the dark ones.jpg new file mode 100644 index 0000000..f485f28 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Curtain of the dark ones.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Dark Blade.jpg b/src/main/resources/view/menus/game/Monsters/Dark Blade.jpg new file mode 100644 index 0000000..72c06a9 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Dark Blade.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Dark magician.jpg b/src/main/resources/view/menus/game/Monsters/Dark magician.jpg new file mode 100644 index 0000000..390437c Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Dark magician.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Exploder Dragon.jpg b/src/main/resources/view/menus/game/Monsters/Exploder Dragon.jpg new file mode 100644 index 0000000..6b11cde Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Exploder Dragon.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Feral Imp.jpg b/src/main/resources/view/menus/game/Monsters/Feral Imp.jpg new file mode 100644 index 0000000..e7f4b5f Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Feral Imp.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Fireyarou.jpg b/src/main/resources/view/menus/game/Monsters/Fireyarou.jpg new file mode 100644 index 0000000..31f59a6 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Fireyarou.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Flame manipulator.jpg b/src/main/resources/view/menus/game/Monsters/Flame manipulator.jpg new file mode 100644 index 0000000..b2389e4 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Flame manipulator.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Gate Guardian.jpg b/src/main/resources/view/menus/game/Monsters/Gate Guardian.jpg new file mode 100644 index 0000000..2df729a Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Gate Guardian.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Haniwa.jpg b/src/main/resources/view/menus/game/Monsters/Haniwa.jpg new file mode 100644 index 0000000..7dea060 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Haniwa.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Herald of Creation.jpg b/src/main/resources/view/menus/game/Monsters/Herald of Creation.jpg new file mode 100644 index 0000000..9c9e9ec Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Herald of Creation.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Hero of the east.jpg b/src/main/resources/view/menus/game/Monsters/Hero of the east.jpg new file mode 100644 index 0000000..1f42b88 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Hero of the east.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Horn Imp.jpg b/src/main/resources/view/menus/game/Monsters/Horn Imp.jpg new file mode 100644 index 0000000..348c307 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Horn Imp.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Leotron.jpg b/src/main/resources/view/menus/game/Monsters/Leotron.jpg new file mode 100644 index 0000000..7561aef Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Leotron.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Man-Eater Bug.jpg b/src/main/resources/view/menus/game/Monsters/Man-Eater Bug.jpg new file mode 100644 index 0000000..a79c2bc Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Man-Eater Bug.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Marshmallon.jpg b/src/main/resources/view/menus/game/Monsters/Marshmallon.jpg new file mode 100644 index 0000000..ddd7932 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Marshmallon.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Mirage Dragon.jpg b/src/main/resources/view/menus/game/Monsters/Mirage Dragon.jpg new file mode 100644 index 0000000..f06a4e4 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Mirage Dragon.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Scanner.jpg b/src/main/resources/view/menus/game/Monsters/Scanner.jpg new file mode 100644 index 0000000..926d38b Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Scanner.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Silver Fang.jpg b/src/main/resources/view/menus/game/Monsters/Silver Fang.jpg new file mode 100644 index 0000000..b910f16 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Silver Fang.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Skull Guardian.jpg b/src/main/resources/view/menus/game/Monsters/Skull Guardian.jpg new file mode 100644 index 0000000..bbc7cb9 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Skull Guardian.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Slot Machine.jpg b/src/main/resources/view/menus/game/Monsters/Slot Machine.jpg new file mode 100644 index 0000000..3b3b1a6 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Slot Machine.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Spiral Serpent.jpg b/src/main/resources/view/menus/game/Monsters/Spiral Serpent.jpg new file mode 100644 index 0000000..3a26fce Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Spiral Serpent.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Suijin.jpg b/src/main/resources/view/menus/game/Monsters/Suijin.jpg new file mode 100644 index 0000000..aa4bf0c Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Suijin.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Terratiger, The Empowered Warrior.jpg b/src/main/resources/view/menus/game/Monsters/Terratiger, The Empowered Warrior.jpg new file mode 100644 index 0000000..04bc9dd Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Terratiger, The Empowered Warrior.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Texchanger.jpg b/src/main/resources/view/menus/game/Monsters/Texchanger.jpg new file mode 100644 index 0000000..b3026b6 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Texchanger.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/The Calculator.jpg b/src/main/resources/view/menus/game/Monsters/The Calculator.jpg new file mode 100644 index 0000000..afde12d Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/The Calculator.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/The Tricky.jpg b/src/main/resources/view/menus/game/Monsters/The Tricky.jpg new file mode 100644 index 0000000..d0f7f3e Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/The Tricky.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Unknown.jpg b/src/main/resources/view/menus/game/Monsters/Unknown.jpg new file mode 100644 index 0000000..15d0de9 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Unknown.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Warrior Dai Grepher.jpg b/src/main/resources/view/menus/game/Monsters/Warrior Dai Grepher.jpg new file mode 100644 index 0000000..f577970 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Warrior Dai Grepher.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Wattaildragon.jpg b/src/main/resources/view/menus/game/Monsters/Wattaildragon.jpg new file mode 100644 index 0000000..2982bb3 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Wattaildragon.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Wattkid.jpg b/src/main/resources/view/menus/game/Monsters/Wattkid.jpg new file mode 100644 index 0000000..687e2d0 Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Wattkid.jpg differ diff --git a/src/main/resources/view/menus/game/Monsters/Yomi Ship.jpg b/src/main/resources/view/menus/game/Monsters/Yomi Ship.jpg new file mode 100644 index 0000000..012739d Binary files /dev/null and b/src/main/resources/view/menus/game/Monsters/Yomi Ship.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Advanced Ritual Art.jpg b/src/main/resources/view/menus/game/SpellTrap/Advanced Ritual Art.jpg new file mode 100644 index 0000000..e212724 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Advanced Ritual Art.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Black Pendant.jpg b/src/main/resources/view/menus/game/SpellTrap/Black Pendant.jpg new file mode 100644 index 0000000..3f4aeec Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Black Pendant.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Call of The Haunted.jpg b/src/main/resources/view/menus/game/SpellTrap/Call of The Haunted.jpg new file mode 100644 index 0000000..a84bff7 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Call of The Haunted.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Change of Heart.jpg b/src/main/resources/view/menus/game/SpellTrap/Change of Heart.jpg new file mode 100644 index 0000000..754321e Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Change of Heart.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Closed Forest.jpg b/src/main/resources/view/menus/game/SpellTrap/Closed Forest.jpg new file mode 100644 index 0000000..e68caeb Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Closed Forest.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Dark Hole.jpg b/src/main/resources/view/menus/game/SpellTrap/Dark Hole.jpg new file mode 100644 index 0000000..22141dd Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Dark Hole.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Forest.jpg b/src/main/resources/view/menus/game/SpellTrap/Forest.jpg new file mode 100644 index 0000000..92552f9 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Forest.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Harpie's Feather Duster.jpg b/src/main/resources/view/menus/game/SpellTrap/Harpie's Feather Duster.jpg new file mode 100644 index 0000000..09a4cc0 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Harpie's Feather Duster.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Magic Cylinder.jpg b/src/main/resources/view/menus/game/SpellTrap/Magic Cylinder.jpg new file mode 100644 index 0000000..4c1e6d8 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Magic Cylinder.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Magic Jammer.jpg b/src/main/resources/view/menus/game/SpellTrap/Magic Jammer.jpg new file mode 100644 index 0000000..9ab1c43 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Magic Jammer.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Magnum Shield.jpg b/src/main/resources/view/menus/game/SpellTrap/Magnum Shield.jpg new file mode 100644 index 0000000..5f6ebb7 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Magnum Shield.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Messenger of peace.jpg b/src/main/resources/view/menus/game/SpellTrap/Messenger of peace.jpg new file mode 100644 index 0000000..1ea9907 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Messenger of peace.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Mind Crush.jpg b/src/main/resources/view/menus/game/SpellTrap/Mind Crush.jpg new file mode 100644 index 0000000..ea5196d Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Mind Crush.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Mirror Force.jpg b/src/main/resources/view/menus/game/SpellTrap/Mirror Force.jpg new file mode 100644 index 0000000..38635ce Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Mirror Force.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Monster Reborn.jpg b/src/main/resources/view/menus/game/SpellTrap/Monster Reborn.jpg new file mode 100644 index 0000000..cd129f4 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Monster Reborn.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Mystical space typhoon.jpg b/src/main/resources/view/menus/game/SpellTrap/Mystical space typhoon.jpg new file mode 100644 index 0000000..1e9949f Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Mystical space typhoon.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Negate Attack.jpg b/src/main/resources/view/menus/game/SpellTrap/Negate Attack.jpg new file mode 100644 index 0000000..e8a30ee Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Negate Attack.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Pot of Greed.jpg b/src/main/resources/view/menus/game/SpellTrap/Pot of Greed.jpg new file mode 100644 index 0000000..eab2160 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Pot of Greed.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Raigeki.jpg b/src/main/resources/view/menus/game/SpellTrap/Raigeki.jpg new file mode 100644 index 0000000..6cec6d0 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Raigeki.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Ring of defense.jpg b/src/main/resources/view/menus/game/SpellTrap/Ring of defense.jpg new file mode 100644 index 0000000..642a61a Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Ring of defense.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Solemn Warning.jpg b/src/main/resources/view/menus/game/SpellTrap/Solemn Warning.jpg new file mode 100644 index 0000000..02ac41a Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Solemn Warning.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Spell Absorption.jpg b/src/main/resources/view/menus/game/SpellTrap/Spell Absorption.jpg new file mode 100644 index 0000000..710be97 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Spell Absorption.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Supply Squad.jpg b/src/main/resources/view/menus/game/SpellTrap/Supply Squad.jpg new file mode 100644 index 0000000..b4e4d6f Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Supply Squad.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Sword of dark destruction.jpg b/src/main/resources/view/menus/game/SpellTrap/Sword of dark destruction.jpg new file mode 100644 index 0000000..277fe0c Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Sword of dark destruction.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Swords Of Revealing Light.jpg b/src/main/resources/view/menus/game/SpellTrap/Swords Of Revealing Light.jpg new file mode 100644 index 0000000..0c0b2f0 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Swords Of Revealing Light.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Terraforming.jpg b/src/main/resources/view/menus/game/SpellTrap/Terraforming.jpg new file mode 100644 index 0000000..a6ffc61 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Terraforming.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Time Seal.jpg b/src/main/resources/view/menus/game/SpellTrap/Time Seal.jpg new file mode 100644 index 0000000..62eeab9 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Time Seal.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Torrential Tribute.jpg b/src/main/resources/view/menus/game/SpellTrap/Torrential Tribute.jpg new file mode 100644 index 0000000..13b2ca0 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Torrential Tribute.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Trap Hole.jpg b/src/main/resources/view/menus/game/SpellTrap/Trap Hole.jpg new file mode 100644 index 0000000..7f11e59 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Trap Hole.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Twin Twisters.jpg b/src/main/resources/view/menus/game/SpellTrap/Twin Twisters.jpg new file mode 100644 index 0000000..9cb4fa9 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Twin Twisters.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Umiiruka.jpg b/src/main/resources/view/menus/game/SpellTrap/Umiiruka.jpg new file mode 100644 index 0000000..d283f7c Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Umiiruka.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/United We Stand.jpg b/src/main/resources/view/menus/game/SpellTrap/United We Stand.jpg new file mode 100644 index 0000000..a845bcd Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/United We Stand.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Vanity's Emptiness.jpg b/src/main/resources/view/menus/game/SpellTrap/Vanity's Emptiness.jpg new file mode 100644 index 0000000..9a05ec1 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Vanity's Emptiness.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Wall Of Revealing Light.jpg b/src/main/resources/view/menus/game/SpellTrap/Wall Of Revealing Light.jpg new file mode 100644 index 0000000..a0763b1 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Wall Of Revealing Light.jpg differ diff --git a/src/main/resources/view/menus/game/SpellTrap/Yami.jpg b/src/main/resources/view/menus/game/SpellTrap/Yami.jpg new file mode 100644 index 0000000..96fad28 Binary files /dev/null and b/src/main/resources/view/menus/game/SpellTrap/Yami.jpg differ diff --git a/src/main/resources/view/menus/game/attack.png b/src/main/resources/view/menus/game/attack.png new file mode 100644 index 0000000..73e5a86 Binary files /dev/null and b/src/main/resources/view/menus/game/attack.png differ diff --git a/src/main/resources/view/menus/game/background.jpeg b/src/main/resources/view/menus/game/background.jpeg new file mode 100644 index 0000000..f2bcc24 Binary files /dev/null and b/src/main/resources/view/menus/game/background.jpeg differ diff --git a/src/main/resources/view/menus/game/background.jpg b/src/main/resources/view/menus/game/background.jpg new file mode 100644 index 0000000..bdbb82b Binary files /dev/null and b/src/main/resources/view/menus/game/background.jpg differ diff --git a/src/main/resources/view/menus/game/game.css b/src/main/resources/view/menus/game/game.css new file mode 100644 index 0000000..d7ed0fc --- /dev/null +++ b/src/main/resources/view/menus/game/game.css @@ -0,0 +1,34 @@ +root { + display: block; +} +.root { + -fx-background-image: url("background.jpg"); +} +.label { + -fx-font-size: 16px; + -fx-font-family: "Arial Black"; + -fx-font-weight: bold; + -fx-text-fill: #ffffff; + -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); +} + +.welcome-text { + -fx-font-size: 32px; + -fx-font-family: "Arial Black"; + -fx-fill: #ffffff; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} +.user-text { + -fx-font-size: 20px; + -fx-font-family: "Arial Black"; + -fx-fill: #ff0000; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} + +.button { + -fx-text-fill: white; + -fx-font-family: "Arial Narrow"; + -fx-font-weight: bold; + -fx-background-color: linear-gradient(#61a2b1, #2A5058); + -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); +} diff --git a/src/main/resources/view/menus/game/phases/BattlePhase.png b/src/main/resources/view/menus/game/phases/BattlePhase.png new file mode 100644 index 0000000..617373b Binary files /dev/null and b/src/main/resources/view/menus/game/phases/BattlePhase.png differ diff --git a/src/main/resources/view/menus/game/phases/DrawPhase.png b/src/main/resources/view/menus/game/phases/DrawPhase.png new file mode 100644 index 0000000..c626876 Binary files /dev/null and b/src/main/resources/view/menus/game/phases/DrawPhase.png differ diff --git a/src/main/resources/view/menus/game/phases/DuelPhase.png b/src/main/resources/view/menus/game/phases/DuelPhase.png new file mode 100644 index 0000000..feea361 Binary files /dev/null and b/src/main/resources/view/menus/game/phases/DuelPhase.png differ diff --git a/src/main/resources/view/menus/game/phases/EndPhase.png b/src/main/resources/view/menus/game/phases/EndPhase.png new file mode 100644 index 0000000..7ea0d62 Binary files /dev/null and b/src/main/resources/view/menus/game/phases/EndPhase.png differ diff --git a/src/main/resources/view/menus/game/phases/Main.png b/src/main/resources/view/menus/game/phases/Main.png new file mode 100644 index 0000000..4dd9366 Binary files /dev/null and b/src/main/resources/view/menus/game/phases/Main.png differ diff --git a/src/main/resources/view/menus/game/phases/Standby.png b/src/main/resources/view/menus/game/phases/Standby.png new file mode 100644 index 0000000..238fe33 Binary files /dev/null and b/src/main/resources/view/menus/game/phases/Standby.png differ diff --git a/src/main/resources/view/menus/head.jpg b/src/main/resources/view/menus/head.jpg new file mode 100644 index 0000000..80cbe33 Binary files /dev/null and b/src/main/resources/view/menus/head.jpg differ diff --git a/src/main/resources/view/menus/img.png b/src/main/resources/view/menus/img.png new file mode 100644 index 0000000..9020f05 Binary files /dev/null and b/src/main/resources/view/menus/img.png differ diff --git a/src/main/resources/view/menus/login/Login.css b/src/main/resources/view/menus/login/Login.css new file mode 100644 index 0000000..86e2ac6 --- /dev/null +++ b/src/main/resources/view/menus/login/Login.css @@ -0,0 +1,32 @@ +root { + display: block; +} +.root { + -fx-background-image: url("background.jpg"); +} +.label { + -fx-font-size: 12px; + -fx-font-weight: bold; + -fx-text-fill: #333333; + -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); +} + +#welcome-text { + -fx-font-size: 32px; + -fx-font-family: "Arial Black"; + -fx-fill: #818181; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} +#actiontarget { + -fx-fill: FIREBRICK; + -fx-font-weight: bold; + -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); +} + +.button { + -fx-text-fill: white; + -fx-font-family: "Arial Narrow"; + -fx-font-weight: bold; + -fx-background-color: linear-gradient(#61a2b1, #2A5058); + -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); +} diff --git a/src/main/resources/view/menus/login/background.jpg b/src/main/resources/view/menus/login/background.jpg new file mode 100644 index 0000000..bdbb82b Binary files /dev/null and b/src/main/resources/view/menus/login/background.jpg differ diff --git a/src/main/resources/view/menus/profile/background.png b/src/main/resources/view/menus/profile/background.png new file mode 100644 index 0000000..8b4e35d Binary files /dev/null and b/src/main/resources/view/menus/profile/background.png differ diff --git a/src/main/resources/view/menus/profile/profile.css b/src/main/resources/view/menus/profile/profile.css new file mode 100644 index 0000000..1d2abb7 --- /dev/null +++ b/src/main/resources/view/menus/profile/profile.css @@ -0,0 +1,34 @@ +root { + display: block; +} +.root { + -fx-background-image: url("background.png"); +} +.label { + -fx-font-size: 16px; + -fx-font-family: "Arial Black"; + -fx-font-weight: bold; + -fx-text-fill: #333333; + -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); +} + +.welcome-text { + -fx-font-size: 32px; + -fx-font-family: "Arial Black"; + -fx-fill: #ffffff; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} +.user-text { + -fx-font-size: 20px; + -fx-font-family: "Arial Black"; + -fx-fill: #ff0000; + -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); +} + +.button { + -fx-text-fill: white; + -fx-font-family: "Arial Narrow"; + -fx-font-weight: bold; + -fx-background-color: linear-gradient(#61a2b1, #2A5058); + -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); +} diff --git a/src/main/resources/view/menus/scoreboard/bronze.png b/src/main/resources/view/menus/scoreboard/bronze.png new file mode 100644 index 0000000..d3e83c3 Binary files /dev/null and b/src/main/resources/view/menus/scoreboard/bronze.png differ diff --git a/src/main/resources/view/menus/scoreboard/gold.png b/src/main/resources/view/menus/scoreboard/gold.png new file mode 100644 index 0000000..71c31fc Binary files /dev/null and b/src/main/resources/view/menus/scoreboard/gold.png differ diff --git a/src/main/resources/view/menus/scoreboard/left.png b/src/main/resources/view/menus/scoreboard/left.png new file mode 100644 index 0000000..c6aeb40 Binary files /dev/null and b/src/main/resources/view/menus/scoreboard/left.png differ diff --git a/src/main/resources/view/menus/scoreboard/right.png b/src/main/resources/view/menus/scoreboard/right.png new file mode 100644 index 0000000..f7382bb Binary files /dev/null and b/src/main/resources/view/menus/scoreboard/right.png differ diff --git a/src/main/resources/view/menus/scoreboard/silver.png b/src/main/resources/view/menus/scoreboard/silver.png new file mode 100644 index 0000000..5017e25 Binary files /dev/null and b/src/main/resources/view/menus/scoreboard/silver.png differ diff --git a/src/main/resources/view/menus/scoreboard/up.png b/src/main/resources/view/menus/scoreboard/up.png new file mode 100644 index 0000000..fffe721 Binary files /dev/null and b/src/main/resources/view/menus/scoreboard/up.png differ diff --git a/src/main/resources/view/menus/scoreboard/vv.mp4 b/src/main/resources/view/menus/scoreboard/vv.mp4 new file mode 100644 index 0000000..ac11eef Binary files /dev/null and b/src/main/resources/view/menus/scoreboard/vv.mp4 differ diff --git a/src/main/resources/view/menus/shop/Monsters/Alexandrite Dragon.jpg b/src/main/resources/view/menus/shop/Monsters/Alexandrite Dragon.jpg new file mode 100644 index 0000000..8b4eb98 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Alexandrite Dragon.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Axe Raider.jpg b/src/main/resources/view/menus/shop/Monsters/Axe Raider.jpg new file mode 100644 index 0000000..57b5280 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Axe Raider.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Baby dragon.jpg b/src/main/resources/view/menus/shop/Monsters/Baby dragon.jpg new file mode 100644 index 0000000..57eb39b Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Baby dragon.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Battle OX.jpg b/src/main/resources/view/menus/shop/Monsters/Battle OX.jpg new file mode 100644 index 0000000..d1e1baf Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Battle OX.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Battle warrior.jpg b/src/main/resources/view/menus/shop/Monsters/Battle warrior.jpg new file mode 100644 index 0000000..502a93b Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Battle warrior.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Beast King Barbaros.jpg b/src/main/resources/view/menus/shop/Monsters/Beast King Barbaros.jpg new file mode 100644 index 0000000..1a697a9 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Beast King Barbaros.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Bitron.jpg b/src/main/resources/view/menus/shop/Monsters/Bitron.jpg new file mode 100644 index 0000000..72aae1b Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Bitron.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Blue-Eyes white dragon.jpg b/src/main/resources/view/menus/shop/Monsters/Blue-Eyes white dragon.jpg new file mode 100644 index 0000000..18493a2 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Blue-Eyes white dragon.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Command Knight.jpg b/src/main/resources/view/menus/shop/Monsters/Command Knight.jpg new file mode 100644 index 0000000..642d246 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Command Knight.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Crab Turtle.jpg b/src/main/resources/view/menus/shop/Monsters/Crab Turtle.jpg new file mode 100644 index 0000000..c296f6d Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Crab Turtle.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Crawling dragon.jpg b/src/main/resources/view/menus/shop/Monsters/Crawling dragon.jpg new file mode 100644 index 0000000..a000c18 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Crawling dragon.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Curtain of the dark ones.jpg b/src/main/resources/view/menus/shop/Monsters/Curtain of the dark ones.jpg new file mode 100644 index 0000000..f485f28 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Curtain of the dark ones.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Dark Blade.jpg b/src/main/resources/view/menus/shop/Monsters/Dark Blade.jpg new file mode 100644 index 0000000..72c06a9 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Dark Blade.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Dark magician.jpg b/src/main/resources/view/menus/shop/Monsters/Dark magician.jpg new file mode 100644 index 0000000..390437c Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Dark magician.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Exploder Dragon.jpg b/src/main/resources/view/menus/shop/Monsters/Exploder Dragon.jpg new file mode 100644 index 0000000..6b11cde Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Exploder Dragon.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Feral Imp.jpg b/src/main/resources/view/menus/shop/Monsters/Feral Imp.jpg new file mode 100644 index 0000000..e7f4b5f Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Feral Imp.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Fireyarou.jpg b/src/main/resources/view/menus/shop/Monsters/Fireyarou.jpg new file mode 100644 index 0000000..31f59a6 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Fireyarou.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Flame manipulator.jpg b/src/main/resources/view/menus/shop/Monsters/Flame manipulator.jpg new file mode 100644 index 0000000..b2389e4 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Flame manipulator.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Gate Guardian.jpg b/src/main/resources/view/menus/shop/Monsters/Gate Guardian.jpg new file mode 100644 index 0000000..2df729a Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Gate Guardian.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Haniwa.jpg b/src/main/resources/view/menus/shop/Monsters/Haniwa.jpg new file mode 100644 index 0000000..7dea060 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Haniwa.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Herald of Creation.jpg b/src/main/resources/view/menus/shop/Monsters/Herald of Creation.jpg new file mode 100644 index 0000000..9c9e9ec Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Herald of Creation.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Hero of the east.jpg b/src/main/resources/view/menus/shop/Monsters/Hero of the east.jpg new file mode 100644 index 0000000..1f42b88 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Hero of the east.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Horn Imp.jpg b/src/main/resources/view/menus/shop/Monsters/Horn Imp.jpg new file mode 100644 index 0000000..348c307 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Horn Imp.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Leotron.jpg b/src/main/resources/view/menus/shop/Monsters/Leotron.jpg new file mode 100644 index 0000000..7561aef Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Leotron.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Man-Eater Bug.jpg b/src/main/resources/view/menus/shop/Monsters/Man-Eater Bug.jpg new file mode 100644 index 0000000..a79c2bc Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Man-Eater Bug.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Marshmallon.jpg b/src/main/resources/view/menus/shop/Monsters/Marshmallon.jpg new file mode 100644 index 0000000..ddd7932 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Marshmallon.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Mirage Dragon.jpg b/src/main/resources/view/menus/shop/Monsters/Mirage Dragon.jpg new file mode 100644 index 0000000..f06a4e4 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Mirage Dragon.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Scanner.jpg b/src/main/resources/view/menus/shop/Monsters/Scanner.jpg new file mode 100644 index 0000000..926d38b Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Scanner.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Silver Fang.jpg b/src/main/resources/view/menus/shop/Monsters/Silver Fang.jpg new file mode 100644 index 0000000..b910f16 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Silver Fang.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Skull Guardian.jpg b/src/main/resources/view/menus/shop/Monsters/Skull Guardian.jpg new file mode 100644 index 0000000..bbc7cb9 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Skull Guardian.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Slot Machine.jpg b/src/main/resources/view/menus/shop/Monsters/Slot Machine.jpg new file mode 100644 index 0000000..3b3b1a6 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Slot Machine.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Spiral Serpent.jpg b/src/main/resources/view/menus/shop/Monsters/Spiral Serpent.jpg new file mode 100644 index 0000000..3a26fce Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Spiral Serpent.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Suijin.jpg b/src/main/resources/view/menus/shop/Monsters/Suijin.jpg new file mode 100644 index 0000000..aa4bf0c Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Suijin.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Terratiger, The Empowered Warrior.jpg b/src/main/resources/view/menus/shop/Monsters/Terratiger, The Empowered Warrior.jpg new file mode 100644 index 0000000..04bc9dd Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Terratiger, The Empowered Warrior.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Texchanger.jpg b/src/main/resources/view/menus/shop/Monsters/Texchanger.jpg new file mode 100644 index 0000000..b3026b6 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Texchanger.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/The Calculator.jpg b/src/main/resources/view/menus/shop/Monsters/The Calculator.jpg new file mode 100644 index 0000000..afde12d Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/The Calculator.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/The Tricky.jpg b/src/main/resources/view/menus/shop/Monsters/The Tricky.jpg new file mode 100644 index 0000000..d0f7f3e Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/The Tricky.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Unknown.jpg b/src/main/resources/view/menus/shop/Monsters/Unknown.jpg new file mode 100644 index 0000000..15d0de9 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Unknown.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Warrior Dai Grepher.jpg b/src/main/resources/view/menus/shop/Monsters/Warrior Dai Grepher.jpg new file mode 100644 index 0000000..f577970 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Warrior Dai Grepher.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Wattaildragon.jpg b/src/main/resources/view/menus/shop/Monsters/Wattaildragon.jpg new file mode 100644 index 0000000..2982bb3 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Wattaildragon.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Wattkid.jpg b/src/main/resources/view/menus/shop/Monsters/Wattkid.jpg new file mode 100644 index 0000000..687e2d0 Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Wattkid.jpg differ diff --git a/src/main/resources/view/menus/shop/Monsters/Yomi Ship.jpg b/src/main/resources/view/menus/shop/Monsters/Yomi Ship.jpg new file mode 100644 index 0000000..012739d Binary files /dev/null and b/src/main/resources/view/menus/shop/Monsters/Yomi Ship.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Advanced Ritual Art.jpg b/src/main/resources/view/menus/shop/SpellTrap/Advanced Ritual Art.jpg new file mode 100644 index 0000000..e212724 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Advanced Ritual Art.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Black Pendant.jpg b/src/main/resources/view/menus/shop/SpellTrap/Black Pendant.jpg new file mode 100644 index 0000000..3f4aeec Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Black Pendant.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Call of The Haunted.jpg b/src/main/resources/view/menus/shop/SpellTrap/Call of The Haunted.jpg new file mode 100644 index 0000000..a84bff7 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Call of The Haunted.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Change of Heart.jpg b/src/main/resources/view/menus/shop/SpellTrap/Change of Heart.jpg new file mode 100644 index 0000000..754321e Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Change of Heart.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Closed Forest.jpg b/src/main/resources/view/menus/shop/SpellTrap/Closed Forest.jpg new file mode 100644 index 0000000..e68caeb Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Closed Forest.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Dark Hole.jpg b/src/main/resources/view/menus/shop/SpellTrap/Dark Hole.jpg new file mode 100644 index 0000000..22141dd Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Dark Hole.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Forest.jpg b/src/main/resources/view/menus/shop/SpellTrap/Forest.jpg new file mode 100644 index 0000000..92552f9 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Forest.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Harpie's Feather Duster.jpg b/src/main/resources/view/menus/shop/SpellTrap/Harpie's Feather Duster.jpg new file mode 100644 index 0000000..09a4cc0 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Harpie's Feather Duster.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Magic Cylinder.jpg b/src/main/resources/view/menus/shop/SpellTrap/Magic Cylinder.jpg new file mode 100644 index 0000000..4c1e6d8 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Magic Cylinder.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Magic Jammer.jpg b/src/main/resources/view/menus/shop/SpellTrap/Magic Jammer.jpg new file mode 100644 index 0000000..9ab1c43 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Magic Jammer.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Magnum Shield.jpg b/src/main/resources/view/menus/shop/SpellTrap/Magnum Shield.jpg new file mode 100644 index 0000000..5f6ebb7 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Magnum Shield.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Messenger of peace.jpg b/src/main/resources/view/menus/shop/SpellTrap/Messenger of peace.jpg new file mode 100644 index 0000000..1ea9907 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Messenger of peace.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Mind Crush.jpg b/src/main/resources/view/menus/shop/SpellTrap/Mind Crush.jpg new file mode 100644 index 0000000..ea5196d Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Mind Crush.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Mirror Force.jpg b/src/main/resources/view/menus/shop/SpellTrap/Mirror Force.jpg new file mode 100644 index 0000000..38635ce Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Mirror Force.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Monster Reborn.jpg b/src/main/resources/view/menus/shop/SpellTrap/Monster Reborn.jpg new file mode 100644 index 0000000..cd129f4 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Monster Reborn.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Mystical space typhoon.jpg b/src/main/resources/view/menus/shop/SpellTrap/Mystical space typhoon.jpg new file mode 100644 index 0000000..1e9949f Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Mystical space typhoon.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Negate Attack.jpg b/src/main/resources/view/menus/shop/SpellTrap/Negate Attack.jpg new file mode 100644 index 0000000..e8a30ee Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Negate Attack.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Pot of Greed.jpg b/src/main/resources/view/menus/shop/SpellTrap/Pot of Greed.jpg new file mode 100644 index 0000000..eab2160 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Pot of Greed.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Raigeki.jpg b/src/main/resources/view/menus/shop/SpellTrap/Raigeki.jpg new file mode 100644 index 0000000..6cec6d0 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Raigeki.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Ring of defense.jpg b/src/main/resources/view/menus/shop/SpellTrap/Ring of defense.jpg new file mode 100644 index 0000000..642a61a Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Ring of defense.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Solemn Warning.jpg b/src/main/resources/view/menus/shop/SpellTrap/Solemn Warning.jpg new file mode 100644 index 0000000..02ac41a Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Solemn Warning.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Spell Absorption.jpg b/src/main/resources/view/menus/shop/SpellTrap/Spell Absorption.jpg new file mode 100644 index 0000000..710be97 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Spell Absorption.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Supply Squad.jpg b/src/main/resources/view/menus/shop/SpellTrap/Supply Squad.jpg new file mode 100644 index 0000000..b4e4d6f Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Supply Squad.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Sword of dark destruction.jpg b/src/main/resources/view/menus/shop/SpellTrap/Sword of dark destruction.jpg new file mode 100644 index 0000000..277fe0c Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Sword of dark destruction.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Swords Of Revealing Light.jpg b/src/main/resources/view/menus/shop/SpellTrap/Swords Of Revealing Light.jpg new file mode 100644 index 0000000..0c0b2f0 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Swords Of Revealing Light.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Terraforming.jpg b/src/main/resources/view/menus/shop/SpellTrap/Terraforming.jpg new file mode 100644 index 0000000..a6ffc61 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Terraforming.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Time Seal.jpg b/src/main/resources/view/menus/shop/SpellTrap/Time Seal.jpg new file mode 100644 index 0000000..62eeab9 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Time Seal.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Torrential Tribute.jpg b/src/main/resources/view/menus/shop/SpellTrap/Torrential Tribute.jpg new file mode 100644 index 0000000..13b2ca0 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Torrential Tribute.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Trap Hole.jpg b/src/main/resources/view/menus/shop/SpellTrap/Trap Hole.jpg new file mode 100644 index 0000000..7f11e59 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Trap Hole.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Twin Twisters.jpg b/src/main/resources/view/menus/shop/SpellTrap/Twin Twisters.jpg new file mode 100644 index 0000000..9cb4fa9 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Twin Twisters.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Umiiruka.jpg b/src/main/resources/view/menus/shop/SpellTrap/Umiiruka.jpg new file mode 100644 index 0000000..d283f7c Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Umiiruka.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/United We Stand.jpg b/src/main/resources/view/menus/shop/SpellTrap/United We Stand.jpg new file mode 100644 index 0000000..a845bcd Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/United We Stand.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Vanity's Emptiness.jpg b/src/main/resources/view/menus/shop/SpellTrap/Vanity's Emptiness.jpg new file mode 100644 index 0000000..9a05ec1 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Vanity's Emptiness.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Wall Of Revealing Light.jpg b/src/main/resources/view/menus/shop/SpellTrap/Wall Of Revealing Light.jpg new file mode 100644 index 0000000..a0763b1 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Wall Of Revealing Light.jpg differ diff --git a/src/main/resources/view/menus/shop/SpellTrap/Yami.jpg b/src/main/resources/view/menus/shop/SpellTrap/Yami.jpg new file mode 100644 index 0000000..96fad28 Binary files /dev/null and b/src/main/resources/view/menus/shop/SpellTrap/Yami.jpg differ diff --git a/src/main/resources/view/menus/shop/background.png b/src/main/resources/view/menus/shop/background.png new file mode 100644 index 0000000..8e340ab Binary files /dev/null and b/src/main/resources/view/menus/shop/background.png differ diff --git a/src/main/resources/view/menus/shop/left.png b/src/main/resources/view/menus/shop/left.png new file mode 100644 index 0000000..c323d03 Binary files /dev/null and b/src/main/resources/view/menus/shop/left.png differ diff --git a/src/main/resources/view/menus/shop/right.png b/src/main/resources/view/menus/shop/right.png new file mode 100644 index 0000000..af35da6 Binary files /dev/null and b/src/main/resources/view/menus/shop/right.png differ diff --git a/src/main/resources/view/menus/shop/showAllCardsBackGround.jpg b/src/main/resources/view/menus/shop/showAllCardsBackGround.jpg new file mode 100644 index 0000000..3a9d672 Binary files /dev/null and b/src/main/resources/view/menus/shop/showAllCardsBackGround.jpg differ diff --git a/src/main/resources/view/menus/tail.jpg b/src/main/resources/view/menus/tail.jpg new file mode 100644 index 0000000..646c048 Binary files /dev/null and b/src/main/resources/view/menus/tail.jpg differ diff --git a/src/test/java/AttackTest.java b/src/test/java/AttackTest.java deleted file mode 100644 index d483f1c..0000000 --- a/src/test/java/AttackTest.java +++ /dev/null @@ -1,158 +0,0 @@ -import controllers.Battelfield.Battlefield; -import controllers.Constants.Initialize; -import controllers.Regex; -import controllers.menues.DuelMenu; -import models.Card; -import models.CardStufs.FaceUp; -import models.Duelist; -import models.Monster.*; -import models.User; -import org.junit.Test; -import org.junit.jupiter.api.BeforeEach; - -import java.io.ByteArrayInputStream; -import java.lang.constant.Constable; -import java.util.ArrayList; -import java.util.Objects; - -import static org.junit.Assert.assertEquals; - -public class AttackTest { - ArrayList listOfSpecialMonsters = new ArrayList<>(); - ArrayList listOfNormalMonsters = new ArrayList<>(); - - ArrayList defenceReturn = new ArrayList<>(); - ArrayList expectedReturn = new ArrayList<>(); - - Battlefield battlefield; - @BeforeEach - public void initBattlefield(){ - Initialize.init(); - User user = User.getUserByUsername("admin"); - Initialize.makeAI(); - Duelist duelist1 = new Duelist(user); - Duelist duelist2 = new Duelist(user); - String data = "1\nnext phase"; - System.setIn(new ByteArrayInputStream(data.getBytes())); - battlefield = new Battlefield(duelist1, duelist2); - } - - private void initializeMonster() { - initBattlefield(); - listOfSpecialMonsters.add(new YomiShip(Card.allCards.get("Yomi Ship"))); - listOfSpecialMonsters.add(new Suijin(Card.allCards.get("Suijin"))); - listOfSpecialMonsters.add(new ManEaterBug(Card.allCards.get("Man-Eater Bug"))); - listOfSpecialMonsters.add(new GateGuardian(Card.allCards.get("Gate Guardian"))); - listOfSpecialMonsters.add(new Scanner(Card.allCards.get("Scanner"))); - listOfSpecialMonsters.add(new Marshmallon(Card.allCards.get("Marshmallon"))); - listOfSpecialMonsters.add(new BeastKingBarbaros(Card.allCards.get("Beast King Barbaros"))); - listOfSpecialMonsters.add(new Texchanger(Card.allCards.get("Texchanger"))); - listOfSpecialMonsters.add(new TheCalculator(Card.allCards.get("The Calculator"))); - listOfSpecialMonsters.add(new HeraldOfCreation(Card.allCards.get("Herald of Creation"))); - listOfSpecialMonsters.add(new TerratigerTheEmpoweredWarrior(Card.allCards.get("Terratiger, the Empowered Warrior"))); - listOfSpecialMonsters.add(new TheTricky(Card.allCards.get("The Tricky"))); - //normal monsters with 14 monsters - listOfNormalMonsters.add((Monster) Card.getCardByName("Feral Imp"));///def 1400 att 1300 - listOfNormalMonsters.add((Monster) Card.getCardByName("Dark magician"));//def 2100 att 2500 - listOfNormalMonsters.add((Monster) Card.getCardByName("Fireyarou"));//def 1000 att 1300 - listOfNormalMonsters.add((Monster) Card.getCardByName("Wattkid"));//def 500 att 1000 - listOfNormalMonsters.add((Monster) Card.getCardByName("Baby dragon"));// def 700 att 1200 - listOfNormalMonsters.add((Monster) Card.getCardByName("Hero of the east"));// def 1000 att 1100 - listOfNormalMonsters.add((Monster) Card.getCardByName("Battle warrior"));// def 1000 att 700 - listOfNormalMonsters.add((Monster) Card.getCardByName("Crawling dragon"));//def 1400 att 1600 - listOfNormalMonsters.add((Monster) Card.getCardByName("Flame manipulator"));// def 1000 att 900 - listOfNormalMonsters.add((Monster) Card.getCardByName("Blue-Eyes white dragon"));//def 2500 att 3000 - listOfNormalMonsters.add((Monster) Card.getCardByName("Haniwa"));//def 500 att 500 - listOfNormalMonsters.add((Monster) Card.getCardByName("Wattaildragon"));//def 1000 att 2500 - listOfNormalMonsters.add((Monster) Card.getCardByName("Warrior Dai Grepher")); - listOfNormalMonsters.add((Monster) Card.getCardByName("Dark Blade")); - //ritual monsters - listOfNormalMonsters.add((Monster) Card.getCardByName("Crab Turtle")); - listOfNormalMonsters.add((Monster) Card.getCardByName("Skull Guardian")); - } - - @Test - public void testMonsterAttack(){ - initializeMonster(); - for(int i=0;i<6;i++) { - //0 until 5 - battlefield.attackingMonster = listOfNormalMonsters.get(i); - battlefield.attackingMonster.setCardsFace(FaceUp.ATTACK); - //6 until 12 - battlefield.attackedMonster = listOfNormalMonsters.get(listOfNormalMonsters.size()-i-5); - battlefield.attackedMonster.setCardsFace(FaceUp.ATTACK); - - defenceReturn.add(battlefield.attackedMonster.defenceFunc(battlefield)); - } - expectedReturn.add(-1); - expectedReturn.add(1); - expectedReturn.add(-1); - expectedReturn.add(1); - expectedReturn.add(-1); - expectedReturn.add(1); - - assertEquals(defenceReturn.size(), expectedReturn.size()); - - for(int i = 0; i < defenceReturn.size(); i++) { - assertEquals(defenceReturn.get(i), expectedReturn.get(i)); - } - - } - @Test - public void testMonsterDefence(){ - initializeMonster(); - - defenceReturn.clear();expectedReturn.clear(); - - battlefield.attackingMonster = listOfNormalMonsters.get(0); - battlefield.attackingMonster.setCardsFace(FaceUp.ATTACK); - battlefield.attackedMonster = listOfNormalMonsters.get(11); - battlefield.attackedMonster.setCardsFace(FaceUp.DEFENSE_FRONT); - defenceReturn.add(battlefield.attackedMonster.defenceFunc(battlefield)); - - battlefield.attackingMonster = listOfNormalMonsters.get(1); - battlefield.attackingMonster.setCardsFace(FaceUp.ATTACK); - battlefield.attackedMonster = listOfNormalMonsters.get(10); - battlefield.attackedMonster.setCardsFace(FaceUp.DEFENSE_BACK); - defenceReturn.add(battlefield.attackedMonster.defenceFunc(battlefield)); - - battlefield.attackingMonster = listOfNormalMonsters.get(2); - battlefield.attackingMonster.setCardsFace(FaceUp.ATTACK); - battlefield.attackedMonster = listOfNormalMonsters.get(9); - battlefield.attackedMonster.setCardsFace(FaceUp.DEFENSE_BACK); - defenceReturn.add(battlefield.attackedMonster.defenceFunc(battlefield)); - - battlefield.attackingMonster = listOfNormalMonsters.get(3); - battlefield.attackingMonster.setCardsFace(FaceUp.ATTACK); - battlefield.attackedMonster = listOfNormalMonsters.get(8); - battlefield.attackedMonster.setCardsFace(FaceUp.DEFENSE_BACK); - defenceReturn.add(battlefield.attackedMonster.defenceFunc(battlefield)); - - battlefield.attackingMonster = listOfNormalMonsters.get(4); - battlefield.attackingMonster.setCardsFace(FaceUp.ATTACK); - battlefield.attackedMonster = listOfNormalMonsters.get(7); - battlefield.attackedMonster.setCardsFace(FaceUp.DEFENSE_FRONT); - defenceReturn.add(battlefield.attackedMonster.defenceFunc(battlefield)); - - battlefield.attackingMonster = listOfNormalMonsters.get(5); - battlefield.attackingMonster.setCardsFace(FaceUp.ATTACK); - battlefield.attackedMonster = listOfNormalMonsters.get(6); - battlefield.attackedMonster.setCardsFace(FaceUp.DEFENSE_BACK); - defenceReturn.add(battlefield.attackedMonster.defenceFunc(battlefield)); - - expectedReturn.add(1); - expectedReturn.add(2); - expectedReturn.add(2); - expectedReturn.add(2); - expectedReturn.add(-1); - expectedReturn.add(2); - - assertEquals(defenceReturn.size(), expectedReturn.size()); - - for(int i = 0; i < defenceReturn.size(); i++) { - assertEquals(expectedReturn.get(i), defenceReturn.get(i)); - } - - } - -} diff --git a/src/test/java/BackupDatabase.java b/src/test/java/BackupDatabase.java deleted file mode 100644 index c43dc75..0000000 --- a/src/test/java/BackupDatabase.java +++ /dev/null @@ -1,49 +0,0 @@ -import java.io.File; -import java.io.IOException; - -public interface BackupDatabase { - default void moveDatabase() throws IOException { - // File (or directory) with old name - File file = new File("savedList.list"); - - File file2 = new File("savedList_2.list"); - - File file3 = new File("Deck.list"); - - File file4 = new File("Deck_2.list"); - if (file2.exists()) - file2.delete(); - - if (file4.exists()) - file4.delete(); - - // Rename file (or directory) - boolean success1 = file.renameTo(file2); - if(success1) - System.out.println("user database renamed successfully"); - boolean success2 = file3.renameTo(file4); - if(success2) - System.out.println("Deck database renamed successfully"); - } - default void backDatabase(){ - // File (or directory) with old name - File file = new File("savedList_2.list"); - - File file2 = new File("savedList.list"); - - File file3 = new File("Deck_2.list"); - - File file4 = new File("Deck.list"); - if (file2.exists()) - file2.delete(); - - if (file4.exists()) - file4.delete(); - boolean success1 = file.renameTo(file2); - if(success1) - System.out.println("user database renamed successfully"); - boolean success2 = file3.renameTo(file4); - if(success2) - System.out.println("Deck database renamed successfully"); - } -} diff --git a/src/test/java/DeckTest.java b/src/test/java/DeckTest.java deleted file mode 100644 index db86f7c..0000000 --- a/src/test/java/DeckTest.java +++ /dev/null @@ -1,48 +0,0 @@ -import controllers.Menu; -import controllers.ProgramController; -import controllers.Regex; -import controllers.menues.DeckMenu; -import models.Deck; -import models.User; -import org.junit.Assert; -import org.junit.Test; -import org.junit.jupiter.api.BeforeEach; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; - -import static controllers.ProgramController.currUser; -import static controllers.ProgramController.currentMenu; - -public class DeckTest implements BackupDatabase { - @Test - public void deckTest() throws IOException { - moveDatabase(); - String userInputs = "deck create alire" + System.getProperty("line.separator") - + "deck create aaa" + System.getProperty("line.separator") - + "deck create aaaaa" + System.getProperty("line.separator") - + "deck set-activate alire" + System.getProperty("line.separator") - + "deck show -a" + System.getProperty("line.separator") - + "deck show -d alire" + System.getProperty("line.separator") - + "deck show -d alire --side" + System.getProperty("line.separator") - + "deck show --cards" + System.getProperty("line.separator") - + "menu exit" + System.getProperty("line.separator") - + "menu exit" + System.getProperty("line.separator") - + "menu exit" + System.getProperty("line.separator"); - new Regex(); - System.setIn(new ByteArrayInputStream(userInputs.getBytes())); - currentMenu = Menu.DECK_MENU; - currUser = new User("alireza","123","game"); - DeckMenu.getInstance(currUser).runDeckMenu(); - Assert.assertNotNull(Deck.getDeckByName("alire")); - Assert.assertNotNull(Deck.getDeckByName("aaa")); - Assert.assertNotNull(Deck.getDeckByName("aaaaa")); - Assert.assertNotNull(Deck.getDeckByName("alire")); - User user = User.getUserByUsername("alireza"); - assert user != null; - Assert.assertEquals(user.getActiveDeck(),Deck.getDeckByName("alire")); - backDatabase(); - } - -} diff --git a/src/test/java/LoginRegisterTest.java b/src/test/java/LoginRegisterTest.java deleted file mode 100644 index c661d40..0000000 --- a/src/test/java/LoginRegisterTest.java +++ /dev/null @@ -1,82 +0,0 @@ -import controllers.Regex; -import controllers.menues.LoginMenu; -import models.User; -import org.junit.Assert; -import org.junit.Test; - -import java.io.*; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.List; -import java.util.Objects; - -import static org.junit.Assert.assertEquals; - -import static controllers.menues.LoginMenu.createNewUser; - -public class LoginRegisterTest implements BackupDatabase{ - @Test - public void userRegisterTest() throws IOException { - moveDatabase(); - final String output = "src/main/java/UnitTests/RegisterAndLogin/RegisterTestOutput.txt"; - final String input = "src/main/java/UnitTests/RegisterAndLogin/RegisterTest.txt"; - final String expectedOutput = "src/main/java/UnitTests/RegisterAndLogin/RegisterExpected.txt"; - writeOutputsToTXT(output); - try (BufferedReader br = new BufferedReader(new FileReader(input))) { - String line; - while ((line = br.readLine()) != null) { - createNewUser(Regex.getMatcher(line,Regex.userCreate),false); - } - } catch (IOException e) { - e.printStackTrace(); - } - compareTXT(output, expectedOutput); - backDatabase(); - } - - public void writeOutputsToTXT(String output) throws FileNotFoundException { - PrintStream fileStream = new PrintStream(output); - System.setOut(fileStream); - } - - public static void compareTXT(String output, String expectedOutput) throws IOException { - List file1 = Files.readAllLines(Paths.get(output)); - List file2 = Files.readAllLines(Paths.get(expectedOutput)); - - assertEquals(file1.size(), file2.size()); - - for(int i = 0; i < file1.size(); i++) { - assertEquals(file1.get(i), file2.get(i)); - } - } - - @Test - public void userLoginTest() throws IOException { - moveDatabase(); - new User("pouria1","123","Empire1"); - new User("pouria2","123","Empire2"); - new User("pouria3","123","Empire3"); - new User("pouria4","123","Empire4"); - new User("pouria5","123","Empire5"); - new User("pouria6","123","Empire6"); - new User("pouria7","123","Empire7"); - String userInputs = "user login -u pouria1 -p 123" + System.getProperty("line.separator") - + "user login -u pouria1 -p 123" + System.getProperty("line.separator") - + "user login -p 123 -u pouria2" + System.getProperty("line.separator") - + "user login --username pouria3 --password 123" + System.getProperty("line.separator") - + "user login --password 123 -u pouria4" + System.getProperty("line.separator") - + "user login --username pouria5 -p 123" + System.getProperty("line.separator") - + "user login -u pouria6 --password 123" + System.getProperty("line.separator") - + "user login -p 123 -u pouria7" + System.getProperty("line.separator"); - new Regex(); - System.setIn(new ByteArrayInputStream(userInputs.getBytes())); - Assert.assertTrue(Objects.requireNonNull(User.getUserByUsername("pouria1")).isLoggedIn()); - Assert.assertTrue(Objects.requireNonNull(User.getUserByUsername("pouria2")).isLoggedIn()); - Assert.assertTrue(Objects.requireNonNull(User.getUserByUsername("pouria3")).isLoggedIn()); - Assert.assertTrue(Objects.requireNonNull(User.getUserByUsername("pouria4")).isLoggedIn()); - Assert.assertTrue(Objects.requireNonNull(User.getUserByUsername("pouria5")).isLoggedIn()); - Assert.assertTrue(Objects.requireNonNull(User.getUserByUsername("pouria6")).isLoggedIn()); - Assert.assertTrue(Objects.requireNonNull(User.getUserByUsername("pouria7")).isLoggedIn()); - backDatabase(); - } -} diff --git a/src/test/java/ProfileTest.java b/src/test/java/ProfileTest.java deleted file mode 100644 index 9caf799..0000000 --- a/src/test/java/ProfileTest.java +++ /dev/null @@ -1,79 +0,0 @@ - -import controllers.Menu; -import controllers.Regex; -import controllers.menues.DeckMenu; -import controllers.menues.ProfileMenu; -import models.Deck; -import models.User; -import org.junit.Assert; -import org.junit.Test; -import org.junit.jupiter.api.BeforeEach; - -import java.io.*; - -import static controllers.ProgramController.currUser; -import static controllers.ProgramController.currentMenu; -import static controllers.menues.LoginMenu.createNewUser; - -public class ProfileTest implements BackupDatabase{ - @Test - public void profileTest() throws IOException { - moveDatabase(); - new User("pouria1","123","Empire1"); - new User("pouria2","123","Empire2"); - new User("pouria3","123","Empire3"); - new User("pouria4","123","Empire4"); - new User("pouria5","123","Empire5"); - new User("pouria6","123","Empire6"); - new User("pouria7","123","Empire7"); - String userInputs = "profile change --nickname e1" + System.getProperty("line.separator") - + "profile change --password --current 123 --new 321" + System.getProperty("line.separator") - + "menu exit" + System.getProperty("line.separator") - + "profile change -n e2" + System.getProperty("line.separator") - + "profile change -p -c 123 -n 321" + System.getProperty("line.separator") - + "menu exit" + System.getProperty("line.separator") - + "profile change -p --current 123 --new 321" + System.getProperty("line.separator") - + "menu exit" + System.getProperty("line.separator") - + "profile change --password -c 123 --new 321" + System.getProperty("line.separator") - + "menu exit" + System.getProperty("line.separator") - + "profile change -p -c 123 --new 321" + System.getProperty("line.separator") - + "menu exit" + System.getProperty("line.separator") - + "profile change --password --current 123 -n 321" + System.getProperty("line.separator") - + "menu exit" + System.getProperty("line.separator") - + "profile change -p -c 123 -n 321" + System.getProperty("line.separator") - + "menu exit" + System.getProperty("line.separator"); - new Regex(); - System.setIn(new ByteArrayInputStream(userInputs.getBytes())); - User user1 = User.getUserByUsername("pouria1"); - new ProfileMenu(user1).runProfileMenu(user1); - assert user1 != null; - Assert.assertEquals(user1.getPassword(),"321"); - Assert.assertEquals(user1.getNickName(),"e1"); - User user2 = User.getUserByUsername("pouria2"); - new ProfileMenu(user2).runProfileMenu(user2); - assert user2 != null; - Assert.assertEquals(user2.getPassword(),"321"); - Assert.assertEquals(user2.getNickName(),"e2"); - User user3 = User.getUserByUsername("pouria3"); - new ProfileMenu(user3).runProfileMenu(user3); - assert user3 != null; - Assert.assertEquals(user3.getPassword(),"321"); - User user4 = User.getUserByUsername("pouria4"); - new ProfileMenu(user4).runProfileMenu(user4); - assert user4 != null; - Assert.assertEquals(user4.getPassword(),"321"); - User user5 = User.getUserByUsername("pouria5"); - new ProfileMenu(user5).runProfileMenu(user5); - assert user5 != null; - Assert.assertEquals(user5.getPassword(),"321"); - User user6 = User.getUserByUsername("pouria6"); - new ProfileMenu(user6).runProfileMenu(user6); - assert user6 != null; - Assert.assertEquals(user6.getPassword(),"321"); - User user7 = User.getUserByUsername("pouria7"); - new ProfileMenu(user7).runProfileMenu(user7); - assert user7 != null; - Assert.assertEquals(user7.getPassword(),"321"); - backDatabase(); - } -} diff --git a/src/test/java/SpellAndTrapTest.java b/src/test/java/SpellAndTrapTest.java deleted file mode 100644 index c1d1a1b..0000000 --- a/src/test/java/SpellAndTrapTest.java +++ /dev/null @@ -1,65 +0,0 @@ -import controllers.Battelfield.Battlefield; -import controllers.Constants.Initialize; -import models.Card; -import models.Duelist; -import models.Monster.GateGuardian; -import models.Monster.ManEaterBug; -import models.Monster.Monster; -import models.SpellAndTrap.*; -import models.User; -import org.junit.Test; -import org.junit.jupiter.api.BeforeEach; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Objects; - -import static org.junit.Assert.assertEquals; - -public class SpellAndTrapTest implements BackupDatabase { - Battlefield battlefield; - ArrayList expectedMonsterZone = new ArrayList<>(); - ArrayList expectedSpellAndTrapZone = new ArrayList<>(); - @BeforeEach - public void initForSpell(){ - Initialize.init(); - Duelist duelist1 = new Duelist(Objects.requireNonNull(User.getUserByUsername("admin"))); - Duelist duelist2 = new Duelist(Objects.requireNonNull(User.getUserByUsername("admin"))); - String data = "1"; - System.setIn(new ByteArrayInputStream(data.getBytes())); - battlefield = new Battlefield(duelist1, duelist2); - //cards added to monsterZone - battlefield.getOpponent().field.monsterZone.add(Card.getCardByName("Wattaildragon")); - battlefield.getOpponent().field.monsterZone.add(Card.getCardByName("Warrior Dai Grepher")); - battlefield.getOpponent().field.monsterZone.add(Card.getCardByName("Dark Blade")); - battlefield.getOpponent().field.monsterZone.add(new ManEaterBug(Card.allCards.get("Man-Eater Bug"))); - battlefield.getOpponent().field.monsterZone.add(new GateGuardian(Card.allCards.get("Gate Guardian"))); - //cards added to spellAndTrap zone - battlefield.getOpponent().field.monsterZone.add(new TrapHole(Card.allCards.get("Trap Hole"))); - battlefield.getOpponent().field.monsterZone.add(new MirrorForce(Card.allCards.get("Mirror Force"))); - battlefield.getOpponent().field.monsterZone.add(new SupplySquad(Card.allCards.get("Supply Squad"))); - battlefield.getOpponent().field.monsterZone.add(new MonsterReborn(Card.allCards.get("Monster Reborn"))); - battlefield.getOpponent().field.monsterZone.add(new ChangeOfHeart(Card.allCards.get("Change of Heart"))); - } - @Test - public void spellAndTrapTest() throws IOException { - moveDatabase(); - - initForSpell(); - //just one card added to turn and activate it - //first test : - battlefield.getTurn().field.spellTrapZone.add(0,new Raigeki(Card.allCards.get("Raigeki"))); - battlefield.getTurn().field.spellTrapZone.get(0).action(battlefield); - expectedMonsterZone.add(null); - expectedMonsterZone.add(null); - expectedMonsterZone.add(null); - expectedMonsterZone.add(null); - expectedMonsterZone.add(null); - - for(int i = 0; i < 5; i++) { - assertEquals(expectedMonsterZone.get(i), battlefield.getOpponent().field.monsterZone.get(i)); - } - backDatabase(); - } -} diff --git a/src/test/java/SummonMonsterTest.java b/src/test/java/SummonMonsterTest.java deleted file mode 100644 index 2cb1cb1..0000000 --- a/src/test/java/SummonMonsterTest.java +++ /dev/null @@ -1,57 +0,0 @@ -import controllers.Battelfield.Battlefield; -import controllers.Constants.Initialize; -import models.Card; -import models.Duelist; -import models.Monster.GateGuardian; -import models.Monster.ManEaterBug; -import models.Monster.Monster; -import models.SpellAndTrap.*; -import models.User; -import org.junit.Test; -import org.junit.jupiter.api.BeforeEach; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Objects; - -import static org.junit.Assert.assertEquals; - -public class SummonMonsterTest implements BackupDatabase { - Battlefield battlefield; - ArrayList expectedMonsterZone = new ArrayList<>(); - - @BeforeEach - public void initForSummon(){ - Initialize.init(); - Duelist duelist1 = new Duelist(Objects.requireNonNull(User.getUserByUsername("admin"))); - Duelist duelist2 = new Duelist(Objects.requireNonNull(User.getUserByUsername("admin"))); - String data = "1\nselect 5"; - System.setIn(new ByteArrayInputStream(data.getBytes())); - battlefield = new Battlefield(duelist1, duelist2); - //going to main_phase 1 - battlefield.nextPhase(); - battlefield.nextPhase(); - //cards added to monsterZone - battlefield.getTurn().field.hand.add(Card.getCardByName("Wattaildragon")); - battlefield.selectedCard = Card.getCardByName("Wattaildragon"); - battlefield.getTurn().field.monsterZone.set(0,Card.getCardByName("Wattaildragon")); - battlefield.getTurn().field.monsterZone.set(1,Card.getCardByName("Warrior Dai Grepher")); - battlefield.getTurn().field.monsterZone.set(3,new ManEaterBug(Card.allCards.get("Man-Eater Bug"))); - battlefield.getTurn().field.monsterZone.set(4,new GateGuardian(Card.allCards.get("Gate Guardian"))); - } - - @Test - public void summonMonsterTest() throws IOException { - moveDatabase(); - - initForSummon(); - Monster monster = (Monster) battlefield.getTurn().field.monsterZone.get(4); - String data = "select 5"; - System.setIn(new ByteArrayInputStream(data.getBytes())); - battlefield.summon(); - assertEquals(battlefield.getTurn().field.graveYard.get(0), monster); - - backDatabase(); - } -} diff --git a/target/classes/Main.class b/target/classes/Main.class deleted file mode 100644 index 0aec168..0000000 Binary files a/target/classes/Main.class and /dev/null differ diff --git a/target/classes/controllers/Constants/Initialize.class b/target/classes/controllers/Constants/Initialize.class deleted file mode 100644 index 7c72951..0000000 Binary files a/target/classes/controllers/Constants/Initialize.class and /dev/null differ diff --git a/target/classes/controllers/Menu.class b/target/classes/controllers/Menu.class deleted file mode 100644 index 8e25aed..0000000 Binary files a/target/classes/controllers/Menu.class and /dev/null differ diff --git a/target/classes/controllers/Regex.class b/target/classes/controllers/Regex.class deleted file mode 100644 index f663f6e..0000000 Binary files a/target/classes/controllers/Regex.class and /dev/null differ diff --git a/target/classes/controllers/menues/DeckMenu.class b/target/classes/controllers/menues/DeckMenu.class deleted file mode 100644 index d5dae4d..0000000 Binary files a/target/classes/controllers/menues/DeckMenu.class and /dev/null differ diff --git a/target/classes/controllers/menues/DuelMenu.class b/target/classes/controllers/menues/DuelMenu.class deleted file mode 100644 index 2adcbff..0000000 Binary files a/target/classes/controllers/menues/DuelMenu.class and /dev/null differ diff --git a/target/classes/controllers/menues/ProfileMenu.class b/target/classes/controllers/menues/ProfileMenu.class deleted file mode 100644 index 6cd11ee..0000000 Binary files a/target/classes/controllers/menues/ProfileMenu.class and /dev/null differ diff --git a/target/classes/controllers/menues/ScoreBoardMenu.class b/target/classes/controllers/menues/ScoreBoardMenu.class deleted file mode 100644 index 5c4a3c6..0000000 Binary files a/target/classes/controllers/menues/ScoreBoardMenu.class and /dev/null differ diff --git a/target/classes/controllers/menues/ShopMenu.class b/target/classes/controllers/menues/ShopMenu.class deleted file mode 100644 index 1d57c0d..0000000 Binary files a/target/classes/controllers/menues/ShopMenu.class and /dev/null differ diff --git a/target/classes/models/Card.class b/target/classes/models/Card.class deleted file mode 100644 index 5348c5a..0000000 Binary files a/target/classes/models/Card.class and /dev/null differ diff --git a/target/classes/models/Deck.class b/target/classes/models/Deck.class deleted file mode 100644 index 0b3fae2..0000000 Binary files a/target/classes/models/Deck.class and /dev/null differ diff --git a/target/classes/models/Duelist.class b/target/classes/models/Duelist.class deleted file mode 100644 index 3abb60d..0000000 Binary files a/target/classes/models/Duelist.class and /dev/null differ diff --git a/target/classes/models/Field.class b/target/classes/models/Field.class deleted file mode 100644 index 5709b56..0000000 Binary files a/target/classes/models/Field.class and /dev/null differ diff --git a/target/classes/view/Responses.class b/target/classes/view/Responses.class deleted file mode 100644 index 48b31e4..0000000 Binary files a/target/classes/view/Responses.class and /dev/null differ diff --git a/target/classes/view/UserInterface.class b/target/classes/view/UserInterface.class deleted file mode 100644 index 1db20a0..0000000 Binary files a/target/classes/view/UserInterface.class and /dev/null differ