Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Player {
- private final String name;
- private final Hand hand;
- private final Field field;
- private final Deck deck;
- private final Graveyard graveyard;
- private Game game;
- public Player(final String name, final Hand hand, final Field field, final Deck deck, final Graveyard graveyard) {
- Objects.requireNonNull(name);
- Arguments.requireMinimalLength(name, 1, "name");
- this.name = name;
- this.hand = Objects.requireNonNull(hand);
- this.field = Objects.requireNonNull(field);
- this.deck = Objects.requireNonNull(deck);
- this.graveyard = Objects.requireNonNull(graveyard);
- }
- public static Player createFromConfiguration(final PlayerConfiguration playerConfiguration, final String name) {
- Objects.requireNonNull(playerConfiguration, "playerConfiguration");
- Objects.requireNonNull(name, "name");
- return new Player(
- name,
- new Hand(playerConfiguration.getHandCapacity()),
- new Field(playerConfiguration.getFieldMonsterCapacity()),
- Deck.newShuffledDeck(playerConfiguration.getDeckCards()),
- new Graveyard()
- );
- }
- public void setGame(final Game game) {
- States.requireNull(this.game, IllegalStateException::new, "A game has already been assigned to this player");
- this.game = Objects.requireNonNull(game);
- }
- public void playTurn() {
- Scanner scanner = new Scanner(System.in);
- new DrawCardAction().performAction(this);
- String command;
- do {
- command = scanner.next();
- switch (command) {
- case "put":
- int handCardIndex = scanner.nextInt();
- int fieldCardIndex = scanner.nextInt();
- new PutMonsterOnFieldAction(handCardIndex, fieldCardIndex).performAction(this);
- break;
- case "attack":
- int selfMonsterIndex = scanner.nextInt();
- int opponentMonsterIndex = scanner.nextInt();
- new AttackMonsterAction(selfMonsterIndex, opponentMonsterIndex, getOpponent()).performAction(this);
- break;
- default:
- System.out.println("Unrecognized command");
- break;
- }
- } while (!command.equals("end"));
- }
- public Game getGame() {
- return game;
- }
- public String getName() {
- return name;
- }
- public Hand getHand() {
- return hand;
- }
- public Field getField() {
- return field;
- }
- public Deck getDeck() {
- return deck;
- }
- public Graveyard getGraveyard() {
- return graveyard;
- }
- private Player getOpponent() {
- return game.getPlayers().filter(x -> x != this).findFirst().orElseThrow(() -> new IllegalStateException("No opponent has been found"));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment