-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMagic.java
132 lines (103 loc) · 5.11 KB
/
Magic.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package magic;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
/**
* @author Gruppo 6
*/
public class Magic {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
System.out.println("╔═════════════════════════════════════╗");
System.out.println("║ Preliminary Checks and Loadings ║");
System.out.println("╚═════════════════════════════════════╝\n");
System.out.println("\nKnown cards: " + CardFactory.size() + "\n");
for (String s:CardFactory.known_cards()) {
System.out.println(s);
}
System.out.println("\n╔═══════════════════╗");
System.out.println("║ Initial Setup ║");
System.out.println("╚═══════════════════╝\n");
instance.setup();
System.out.println("\n╔══════════════════════════╗");
System.out.println("║ The Battle Has Begun ║");
System.out.println("╚══════════════════════════╝\n");
instance.run();
} catch(RuntimeException e) {
System.out.println(e.getMessage());
}
}
//Signleton and instance access
public static final Magic instance = new Magic();
public void setup() {
System.out.println("Please write player 1's name:");
Players[0].setName(reader.nextLine());
ArrayList<Card> p1deck = new ArrayList<Card>();
System.out.println( Players[0].name() + " give the filename of your deck (with extension):");
try {
Scanner p1deckFile = new Scanner(new File(reader.nextLine()));
while(p1deckFile.hasNextLine()) {
p1deck.add(CardFactory.construct(p1deckFile.nextLine()));
}
} catch (IOException ex) { throw new RuntimeException("cannot read player 1's deck file!" ); }
Players[0].setDeck(p1deck.iterator());
System.out.println("Please write player 2's name:");
Players[1].setName(reader.nextLine());
ArrayList<Card> p2deck = new ArrayList<Card>();
System.out.println( Players[1].name() + " give the filename of your deck (with extension):");
try {
Scanner p2deckFile = new Scanner(new File(reader.nextLine()));
while(p2deckFile.hasNextLine()) {
p2deck.add(CardFactory.construct(p2deckFile.nextLine()));
}
} catch (IOException ex) { throw new RuntimeException("cannot read player 1's deck file!" ); }
Players[1].setDeck(p2deck.iterator());
}
//game setup
private Magic() {
turnManagerStack.push( new DefaultTurnManager(Players) );
Players[0]=new DecoratedPlayer();
Players[0].setName("Player 1");
Players[1]=new DecoratedPlayer();
Players[1].setName("Player 2");
}
//execute game
public void run() {
Players[0].getDeck().shuffle();
Players[1].getDeck().shuffle();
for (int i=0; i!=5; ++i) Players[0].draw();
for (int i=0; i!=5; ++i) Players[1].draw();
Players[0].setPhase(Phases.DRAW,new SkipPhaseCount(Phases.DRAW));
try {
while (true) { instance.nextPlayer().executeTurn(); }
}catch(EndOfGame e){
System.out.println(e.getMessage());
}
}
// Player and turn management
private final DecoratedPlayer[] Players = new DecoratedPlayer[2];
private final Deque<TurnManager> turnManagerStack = new ArrayDeque<>();
public void setTurnManager(TurnManager m) { turnManagerStack.push(m); }
public void removeTurnManager(TurnManager m) { turnManagerStack.remove(m); }
public DecoratedPlayer getPlayer(int i) { return Players[i]; }
public DecoratedPlayer getCurrentPlayer() { return turnManagerStack.peek().getCurrentPlayer(); }
public DecoratedPlayer getCurrentAdversary() { return turnManagerStack.peek().getCurrentAdversary(); }
public DecoratedPlayer nextPlayer() { return turnManagerStack.peek().nextPlayer(); }
// Stack access
private final CardStack stack = new CardStack();
public CardStack getStack() { return stack; }
//Trigger access
private final Triggers triggers=new Triggers();
public Triggers getTriggers() { return triggers; }
//IO resources to be dropped in final version
private final Scanner reader = new Scanner(System.in);
public Scanner getScanner() { return reader; }
private final ArrayList<CombatEntry> combatField = new ArrayList<>();
public ArrayList<CombatEntry> getCombatField() { return combatField; }
}