Skip to content

Commit 29900a9

Browse files
committed
finished phase 1
1 parent 078e33e commit 29900a9

83 files changed

Lines changed: 1476 additions & 896 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/main/java/Main.java

Lines changed: 5 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@
22
import com.google.gson.Gson;
33
import com.google.gson.reflect.TypeToken;
44
import model.Card;
5-
import model.Deck;
65
import model.User;
7-
import view.DeckPage;
8-
import view.LoginPage;
9-
import view.MainPage;
106
import view.Page;
117

128
import java.io.IOException;
@@ -19,60 +15,20 @@ public class Main {
1915
public static void initializeProgram() {
2016
try {
2117
String data = new String(Files.readAllBytes(Paths.get("src/main/resources/Users.json")));
22-
ArrayList<User> users = new Gson().fromJson(data, new TypeToken<ArrayList<User>>(){}.getType());
18+
ArrayList<User> users = new Gson().fromJson(data, new TypeToken<ArrayList<User>>() {
19+
}.getType());
2320
User.setUsers(users);
24-
}catch(IOException e) {
21+
} catch (IOException e) {
2522
e.printStackTrace();
2623
}
2724
}
2825

29-
public static void main(String[] args)
30-
{
26+
public static void main(String[] args) {
3127
Card.setCards();
28+
Card.updateCardsDatabase();
3229
initializeProgram();
33-
test();
3430
Page page = new Page();
3531
page.run();
3632
}
3733

38-
public static void test() {
39-
LoginPage loginPage = new LoginPage();
40-
loginPage.runLoginPage("user create --username moein --nickname moein7 --password m");
41-
loginPage.runLoginPage("user create --username ali --nickname ali2 --password a");
42-
loginPage.runLoginPage("user login --password m --username moein");
43-
44-
MainPage mainPage = new MainPage();
45-
DeckPage deckPage = new DeckPage();
46-
deckPage.runDeckPage("deck create d1");
47-
deckPage.runDeckPage("deck create d2");
48-
deckPage.runDeckPage("deck set-activate d1");
49-
50-
loginPage.runLoginPage("user login --password a --username ali");
51-
deckPage.runDeckPage("deck create d1");
52-
deckPage.runDeckPage("deck create d2");
53-
deckPage.runDeckPage("deck set-activate d1");
54-
55-
loginPage.runLoginPage("user login --password m --username moein");
56-
addCardToDeckByUsername(deckPage, "moein");
57-
58-
loginPage.runLoginPage("user login --password a --username ali");
59-
addCardToDeckByUsername(deckPage, "ali");
60-
61-
mainPage.runMainPage("duel --new --second-player moein --rounds 1");
62-
}
63-
64-
private static void addCardToDeckByUsername(DeckPage deckPage, String username) {
65-
for (int i = 0; i < 75; i++) {
66-
User.getUserByUsername(username).getCards().add(Card.getCards().get(i));
67-
}
68-
69-
for (int i = 0; i < 40; i++) {
70-
deckPage.runDeckPage("deck add-card --deck d1 --card " + Card.getCards().get(i).getCardName());
71-
}
72-
73-
for (int i = 43; i < 55; i++) {
74-
deckPage.runDeckPage("deck add-card --side --deck d1 --card " + Card.getCards().get(i).getCardName());
75-
}
76-
}
77-
7834
}

src/main/java/controller/AI.java

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package controller;
2+
3+
import model.*;
4+
5+
public class AI {
6+
public static AI instance;
7+
8+
private AI() {
9+
10+
}
11+
12+
public static AI getInstance() {
13+
if (instance == null) instance = new AI();
14+
return instance;
15+
}
16+
17+
public static int getTributeNumber() {
18+
for (int i = 1; i < 6; i++) {
19+
if (User.getUserByUsername("AI").getBoard().getMonsterCards()[i] != null) return i;
20+
}
21+
return 0;
22+
}
23+
24+
public void AIPlay() {
25+
playMonster();
26+
playSpell();
27+
playTrap();
28+
DuelPageController.getInstance().nextPhase();
29+
playAttack();
30+
if (canPlayDirectAttack()) playDirectAttack();
31+
32+
DuelPageController.getInstance().changeTurn();
33+
}
34+
35+
private boolean canPlayDirectAttack() {
36+
String opponentUsername = DuelPageController.getInstance().getOpponentUsername();
37+
for (int i = 1; i < 6; i++) {
38+
if (User.getUserByUsername(opponentUsername).getBoard().getMonsterCards()[i] != null)
39+
return false;
40+
}
41+
return true;
42+
}
43+
44+
45+
public void playDirectAttack() {
46+
for (int i = 1; i < 6; i++) {
47+
if (User.getUserByUsername("AI").getBoard().getMonsterCards()[i] != null &&
48+
User.getUserByUsername("AI").getBoard().getMonsterCards()[i].getCardState() == CardState.OO) {
49+
DuelPageController.getInstance().selectMyMonsterCard(i);
50+
DuelPageController.getInstance().directAttack();
51+
}
52+
}
53+
}
54+
55+
public void playAttack() {
56+
String opponentUsername = DuelPageController.getInstance().getOpponentUsername();
57+
58+
for (int i = 1; i < 6; i++) {
59+
if (User.getUserByUsername(opponentUsername).getBoard().getMonsterCards()[i] != null) {
60+
for (int j = 1; j < 6; j++) {
61+
if (User.getUserByUsername("AI").getBoard().getMonsterCards()[j] != null &&
62+
User.getUserByUsername("AI").getBoard().getMonsterCards()[j].getCardState() == CardState.OO) {
63+
if (User.getUserByUsername(opponentUsername).getBoard().getMonsterCards()[i].getCardState() == CardState.OO) {
64+
if (User.getUserByUsername("AI").getBoard().getMonsterCards()[j].getAttack() >
65+
User.getUserByUsername(opponentUsername).getBoard().getMonsterCards()[i].getAttack()) {
66+
DuelPageController.getInstance().selectMyMonsterCard(j);
67+
DuelPageController.getInstance().attack(i);
68+
}
69+
} else if (User.getUserByUsername(opponentUsername).getBoard().getMonsterCards()[i].getCardState() == CardState.DO) {
70+
if (User.getUserByUsername("AI").getBoard().getMonsterCards()[j].getAttack() >
71+
User.getUserByUsername(opponentUsername).getBoard().getMonsterCards()[i].getDefense()) {
72+
DuelPageController.getInstance().selectMyMonsterCard(j);
73+
DuelPageController.getInstance().attack(i);
74+
}
75+
} else {
76+
DuelPageController.getInstance().selectMyMonsterCard(j);
77+
DuelPageController.getInstance().attack(i);
78+
}
79+
}
80+
}
81+
}
82+
}
83+
}
84+
85+
public void playMonster() {
86+
for (int i = 0; i < User.getUserByUsername("AI").getBoard().getInHandCards().size(); i++) {
87+
if (User.getUserByUsername("AI").getBoard().getInHandCards().get(i) instanceof Monster) {
88+
User.getUserByUsername("AI").getBoard().setSelectedCardNumberInHand(i + 1);
89+
DuelPageController.getInstance().selectInHandCard(i + 1);
90+
if (((Monster) User.getUserByUsername("AI").getBoard().getInHandCards().get(i)).getDefense() >= 1800)
91+
DuelPageController.getInstance().setMonster();
92+
else {
93+
DuelPageController.getInstance().summonCard();
94+
}
95+
}
96+
}
97+
}
98+
99+
public void playSpell() {
100+
for (int i = 0; i < User.getUserByUsername("AI").getBoard().getInHandCards().size(); i++) {
101+
if (User.getUserByUsername("AI").getBoard().getInHandCards().get(i) instanceof Spell) {
102+
User.getUserByUsername("AI").getBoard().setSelectedCardNumberInHand(i);
103+
DuelPageController.getInstance().setSpellCard();
104+
}
105+
}
106+
}
107+
108+
public void playTrap() {
109+
for (int i = 0; i < User.getUserByUsername("AI").getBoard().getInHandCards().size(); i++) {
110+
if (User.getUserByUsername("AI").getBoard().getInHandCards().get(i) instanceof Trap) {
111+
User.getUserByUsername("AI").getBoard().setSelectedCardNumberInHand(i);
112+
DuelPageController.getInstance().setTrapCard();
113+
}
114+
}
115+
}
116+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package controller;
2+
3+
import model.Card;
4+
import model.User;
5+
import view.BetweenDuelPage;
6+
import view.Menu;
7+
import view.Page;
8+
9+
public class BetweenDuelPageController extends DuelPageController {
10+
private static BetweenDuelPageController instance;
11+
private String currentUsername;
12+
13+
private BetweenDuelPageController() {
14+
15+
}
16+
17+
public static BetweenDuelPageController getInstance() {
18+
if (instance == null)
19+
instance = new BetweenDuelPageController();
20+
return instance;
21+
}
22+
23+
public void exchangeCard(String mainDeckCardName, String sideDeckCardName) {
24+
if (!User.getUserByUsername(currentUsername).getActivatedDeck().isCardWithThisNameAlreadyExistsInMainDeckCards(mainDeckCardName))
25+
System.out.println("card with name " + mainDeckCardName + " doesn't exist in you main deck cards");
26+
else if (!User.getUserByUsername(currentUsername).getActivatedDeck().isCardWithThisNameAlreadyExistsInSideDeckCards(sideDeckCardName))
27+
System.out.println("card with name " + sideDeckCardName + " doesn't exist in you side deck cards");
28+
else {
29+
Card sideDeckCard = User.getUserByUsername(currentUsername).getActivatedDeck().getCardByCardNameFromSideDeck(sideDeckCardName);
30+
Card mainDeckCard = User.getUserByUsername(currentUsername).getActivatedDeck().getCardByCardNameFromMainDeck(sideDeckCardName);
31+
User.getUserByUsername(currentUsername).getActivatedDeck().getSideDeckCards().add(mainDeckCard);
32+
User.getUserByUsername(currentUsername).getActivatedDeck().getMainDeckCards().add(sideDeckCard);
33+
User.getUserByUsername(currentUsername).getActivatedDeck().getSideDeckCards().remove(sideDeckCard);
34+
User.getUserByUsername(currentUsername).getActivatedDeck().getMainDeckCards().remove(mainDeckCard);
35+
36+
skip();
37+
}
38+
}
39+
40+
41+
public String getCurrentUsername() {
42+
return currentUsername;
43+
}
44+
45+
public void setCurrentUsername(String currentUsername) {
46+
this.currentUsername = currentUsername;
47+
}
48+
49+
public void skip() {
50+
if (currentUsername.equals(DuelPageController.getInstance().getFirstPlayerUsername()))
51+
currentUsername = DuelPageController.getInstance().getSecondPlayerUsername();
52+
else if (currentUsername.equals(DuelPageController.getInstance().getSecondPlayerUsername())) {
53+
User.getUserByUsername(firstPlayerUsername).getBoard().setMainDeckCards
54+
(User.getUserByUsername(firstPlayerUsername).getActivatedDeck().getMainDeckCards());
55+
User.getUserByUsername(secondPlayerUsername).getBoard().setMainDeckCards
56+
(User.getUserByUsername(secondPlayerUsername).getActivatedDeck().getMainDeckCards());
57+
Page.setCurrentMenu(Menu.DUEL);
58+
}
59+
BetweenDuelPage.printHelp();
60+
61+
if (currentUsername.equals("AI")) Page.setCurrentMenu(Menu.DUEL);
62+
}
63+
}
Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
11
package controller;
22

3-
public abstract class Controller
4-
{
3+
public abstract class Controller {
54
protected static String username;
65

76

87
public String getUsername() {
98
return username;
109
}
1110

12-
public void setUsername(String username)
13-
{
11+
public void setUsername(String username) {
1412
Controller.username = username;
1513
}
16-
17-
public abstract void exit();
18-
19-
public abstract void showCurrentMenu();
2014
}

src/main/java/controller/DeckPageController.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import view.Page;
66

77
import java.util.ArrayList;
8+
import java.util.Collection;
9+
import java.util.Collections;
810
import java.util.Comparator;
911

1012
public class DeckPageController extends Controller {
@@ -68,7 +70,7 @@ public void setActiveDeck(String name) {
6870
if (!User.getUserByUsername(username).isDeckWithThisNameAlreadyExists(name))
6971
Page.setMessage("deck with name " + name + " does not exist");
7072
else {
71-
User.getUserByUsername(username).getDeckByDeckName(name).setActivated(true); // todo one of these two lines is extra
73+
User.getUserByUsername(username).getDeckByDeckName(name).setActivated(true);
7274
User.getUserByUsername(username).setActivatedDeck(User.getUserByUsername(username).getDeckByDeckName(name));
7375
Page.setMessage("deck activated successfully");
7476
}
@@ -184,14 +186,14 @@ private void showMainDeckCards(String deckName, Deck deck) {
184186
// show monster card
185187
deck.getMainDeckCards().sort(new SortByName());
186188
for (Card mainDeckCard : deck.getMainDeckCards()) {
187-
if (mainDeckCard instanceof Monster) // todo check here
189+
if (mainDeckCard instanceof Monster)
188190
System.out.println(mainDeckCard.getCardName() + ": " + mainDeckCard.getDescription());
189191
}
190192
System.out.println("Spell and Traps:");
191193
// show spell and traps cards
192194
deck.getMainDeckCards().sort(new SortByName());
193195
for (Card mainDeckCard : deck.getMainDeckCards()) {
194-
if (mainDeckCard instanceof Spell || mainDeckCard instanceof Trap) // todo check here
196+
if (mainDeckCard instanceof Spell || mainDeckCard instanceof Trap)
195197
System.out.println(mainDeckCard.getCardName() + ": " + mainDeckCard.getDescription());
196198
}
197199
}
@@ -231,23 +233,12 @@ public void showAllCards() {
231233
private void sortAllCardsByName(String deckName) {
232234

233235

234-
}
235-
236-
@Override
237-
public void exit() {
238-
239-
}
240-
241-
@Override
242-
public void showCurrentMenu() {
243-
244236
}
245237
}
246238

247239
class SortByName implements Comparator<Card> {
248240
// Used for sorting in ascending order of name
249-
public int compare(Card a, Card b)
250-
{
241+
public int compare(Card a, Card b) {
251242
return a.getCardName().compareTo(b.getCardName());
252243
}
253244
}

src/main/java/controller/DrawPhase.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)