Skip to content

Commit

Permalink
Merge pull request #38 from aoaaceai/master
Browse files Browse the repository at this point in the history
Added StatusHolder and some other cards
  • Loading branch information
secminhr committed Jun 2, 2020
2 parents 9eb6f15 + 22cbbe8 commit 3c8b125
Show file tree
Hide file tree
Showing 51 changed files with 759 additions and 44 deletions.
1 change: 1 addition & 0 deletions .idea/dictionaries/aoaaceai.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions src/main/java/eod/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import eod.event.*;
import eod.event.relay.EventReceiver;
import eod.event.relay.EventSender;
import eod.event.relay.StatusHolder;
import eod.exceptions.GameLosingException;
import eod.exceptions.NotSupportedException;
import eod.param.AttackParam;
Expand Down Expand Up @@ -83,6 +84,10 @@ public void setIsActing(boolean acting) {
isActingPlayer = acting;
}

public boolean isActingPlayer() {
return isActingPlayer;
}

public void handReceive(ArrayList<Card> h) {
hand.receive(h);
output.sendReceivedCards(this, h.toArray(new Card[0]));
Expand All @@ -105,6 +110,15 @@ public void drawFromDeck(int count) {
output.sendReceivedCards(this, cards);
}

public void drawFromDeck(Class<? extends Card> cardType, int count) {
output.sendDrawingCards(this);

Card[] cards = deck.draw(cardType, count);
hand.receive(new ArrayList<>(Arrays.asList(cards)));

output.sendReceivedCards(this, cards);
}

public boolean checkCardTypeInHand(Class<? extends Card> c) {
return hand.containsType(c);
}
Expand Down Expand Up @@ -432,6 +446,11 @@ public void unregisterReceiver(EventReceiver receiver) {
receivers.remove(receiver);
}

@Override
public StatusHolder[] getStatusHolders() {
return receivers.stream().filter(receiver -> receiver instanceof StatusHolder).map(receiver -> (StatusHolder) receiver).toArray(StatusHolder[]::new);
}

@Override
public void send(GameObject sender, Event event) {
receivers.stream()
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/eod/card/abstraction/summon/AssassinSummon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package eod.card.abstraction.summon;

public abstract class AssassinSummon extends SummonCard{
public AssassinSummon(int cost, SummonCardType type) {
super(cost, type);
}
}
7 changes: 7 additions & 0 deletions src/main/java/eod/card/abstraction/summon/BunkerSummon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package eod.card.abstraction.summon;

public abstract class BunkerSummon extends SummonCard {
public BunkerSummon(int cost, SummonCardType type) {
super(cost, type);
}
}
7 changes: 7 additions & 0 deletions src/main/java/eod/card/abstraction/summon/FighterSummon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package eod.card.abstraction.summon;

public abstract class FighterSummon extends SummonCard {
public FighterSummon(int cost, SummonCardType type) {
super(cost, type);
}
}
7 changes: 7 additions & 0 deletions src/main/java/eod/card/abstraction/summon/HackerSummon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package eod.card.abstraction.summon;

public abstract class HackerSummon extends SummonCard {
public HackerSummon(int cost, SummonCardType type) {
super(cost, type);
}
}
7 changes: 7 additions & 0 deletions src/main/java/eod/card/abstraction/summon/MachineSummon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package eod.card.abstraction.summon;

public abstract class MachineSummon extends SummonCard {
public MachineSummon(int cost, SummonCardType type) {
super(cost, type);
}
}
7 changes: 7 additions & 0 deletions src/main/java/eod/card/abstraction/summon/MedicSummon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package eod.card.abstraction.summon;

public abstract class MedicSummon extends SummonCard {
public MedicSummon(int cost, SummonCardType type) {
super(cost, type);
}
}
7 changes: 7 additions & 0 deletions src/main/java/eod/card/abstraction/summon/SapperSummon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package eod.card.abstraction.summon;

public abstract class SapperSummon extends SummonCard {
public SapperSummon(int cost, SummonCardType type) {
super(cost, type);
}
}
7 changes: 7 additions & 0 deletions src/main/java/eod/card/abstraction/summon/ShooterSummon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package eod.card.abstraction.summon;

public abstract class ShooterSummon extends SummonCard {
public ShooterSummon(int cost, SummonCardType type) {
super(cost, type);
}
}
7 changes: 7 additions & 0 deletions src/main/java/eod/card/abstraction/summon/SniperSummon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package eod.card.abstraction.summon;

public abstract class SniperSummon extends SummonCard {
public SniperSummon(int cost, SummonCardType type) {
super(cost, type);
}
}
22 changes: 22 additions & 0 deletions src/main/java/eod/card/collection/Deck.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import eod.snapshots.Snapshotted;

import java.util.*;
import java.util.stream.Collectors;

public class Deck implements Snapshotted<Deck.Snapshot>, Iterable<Card>, GameObject {

Expand Down Expand Up @@ -43,6 +44,27 @@ public Card[] draw(int count) {

}

public Card[] draw(Class<? extends Card> cardType, int count) {
// TODO:
// Whether or not the drawn card will have the same reference as the card in deck is unknown. testing needed.
List<Card> canDraw = cards.stream().filter(card -> card.cardTypeEquals(cardType)).collect(Collectors.toList());
int n = Math.min(canDraw.size(), count);
Random random = new Random();

Card[] drew = new Card[n];

for(int i = 0;i < n;i++) {
drew[i] = canDraw.remove(random.nextInt(canDraw.size()));
cards.remove(drew[i]);
}

if(cards.size() == 0) {
throw new GameLosingException("Deck is drained.");
}

return drew;
}

public void dropCard(Card card) {
for(Card c:cards) {
if(c.cardTypeEquals(card.getClass())) {
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/eod/card/collection/Hand.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ public boolean containsCard(Card c) {
return hand.contains(c);
}

public int size() {
return hand.size();
}
public Stream<Card> stream() {
return hand.stream();
}
Expand Down
60 changes: 60 additions & 0 deletions src/main/java/eod/card/concrete/normal/TyrantsCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package eod.card.concrete.normal;

import eod.Party;
import eod.card.abstraction.Card;
import eod.card.abstraction.action.NormalCard;
import eod.effect.Effect;
import eod.effect.EffectExecutor;
import eod.warObject.Status;
import eod.warObject.WarObject;
import eod.warObject.character.concrete.red.Gangster;

import static eod.effect.EffectFunctions.*;
import static eod.specifier.WarObjectSpecifier.WarObject;
import static eod.specifier.condition.Conditions.Being;
import static eod.specifier.condition.Conditions.OwnedBy;

public class TyrantsCommand extends NormalCard {
public TyrantsCommand() {
super(4);
}

@Override
public void applyEffect(EffectExecutor executor) {
WarObject[] gangsters = WarObject(player.getBoard()).which(OwnedBy(player)).which(Being(Gangster.class)).get();

for(WarObject gangster:gangsters) {
executor.tryToExecute(
IncreaseAttack(1).to((Gangster) gangster)
);
executor.tryToExecute(
IncreaseHealth(1).to((Gangster) gangster)
);
}

executor.tryToExecute(
GiveStatus(Status.FURIOUS, Effect.HandlerType.Owner).to(gangsters)
);

for(WarObject gangster:gangsters) {
((Gangster) gangster).attack(executor);
}
}

@Override
public Card copy() {
Card c = new TyrantsCommand();
c.setPlayer(player);
return c;
}

@Override
public String getName() {
return "暴君的指揮";
}

@Override
public Party getParty() {
return Party.RED;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package eod.card.concrete.summon;

import eod.Party;
import eod.card.abstraction.Card;
import eod.card.abstraction.summon.SummonCard;
import eod.card.abstraction.summon.SummonCardType;
import eod.effect.Summon;
import eod.warObject.character.concrete.transparent.AssassinsIntermediary;

import static eod.effect.EffectFunctions.Summon;

public class AssassinsIntermediarySummon extends SummonCard {
public AssassinsIntermediarySummon() {
super(2, SummonCardType.NORMAL);
}

@Override
public Summon summonEffect() {
return Summon(new AssassinsIntermediary(player)).onOnePointOf(player, player.getBaseEmpty());
}

@Override
public Card copy() {
Card c = new AssassinsIntermediarySummon();
c.setPlayer(player);
return c;
}

@Override
public String getName() {
return "召喚 殺手掮客";
}

@Override
public Party getParty() {
return Party.TRANSPARENT;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public Card copy() {

@Override
public String getName() {
return "召喚 特攻隊隊長";
return "召喚 特攻隊長";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import eod.Party;
import eod.card.abstraction.Card;
import eod.card.abstraction.summon.FighterSummon;
import eod.card.abstraction.summon.SummonCard;
import eod.card.abstraction.summon.SummonCardType;
import eod.effect.Summon;
Expand All @@ -12,7 +13,7 @@

import static eod.effect.EffectFunctions.Summon;

public class BloodThirstFighterSummon extends SummonCard {
public class BloodThirstFighterSummon extends FighterSummon {
public BloodThirstFighterSummon() {
super(5, SummonCardType.NORMAL);
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/eod/card/concrete/summon/DroneSummon.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@

import eod.Party;
import eod.card.abstraction.Card;
import eod.card.abstraction.summon.MachineSummon;
import eod.card.abstraction.summon.SummonCard;
import eod.card.abstraction.summon.SummonCardType;
import eod.effect.Summon;
import eod.warObject.character.concrete.transparent.Drone;

import static eod.effect.EffectFunctions.Summon;

public class DroneSummon extends SummonCard {
public class DroneSummon extends MachineSummon {
public DroneSummon() {
super(3, SummonCardType.TOKEN);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@

import eod.Party;
import eod.card.abstraction.Card;
import eod.card.abstraction.summon.FighterSummon;
import eod.card.abstraction.summon.SummonCard;
import eod.card.abstraction.summon.SummonCardType;
import eod.effect.Summon;
import eod.warObject.character.concrete.red.ExperiencedWarrior;

import static eod.effect.EffectFunctions.Summon;

public class ExperiencedWarriorSummon extends SummonCard {
public class ExperiencedWarriorSummon extends FighterSummon {
public ExperiencedWarriorSummon() {
super(3, SummonCardType.TOKEN);
}
Expand Down
38 changes: 38 additions & 0 deletions src/main/java/eod/card/concrete/summon/ExpertOfPoisonSummon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package eod.card.concrete.summon;

import eod.Party;
import eod.card.abstraction.Card;
import eod.card.abstraction.summon.SummonCard;
import eod.card.abstraction.summon.SummonCardType;
import eod.effect.Summon;
import eod.warObject.character.concrete.transparent.ExpertOfPoison;

import static eod.effect.EffectFunctions.Summon;

public class ExpertOfPoisonSummon extends SummonCard {
public ExpertOfPoisonSummon() {
super(5, SummonCardType.NORMAL);
}

@Override
public Summon summonEffect() {
return Summon(new ExpertOfPoison(player)).onOnePointOf(player, player.getBaseEmpty());
}

@Override
public Card copy() {
Card c = new ExpertOfPoisonSummon();
c.setPlayer(player);
return c;
}

@Override
public String getName() {
return "召喚 毒殺專家";
}

@Override
public Party getParty() {
return Party.TRANSPARENT;
}
}
Loading

0 comments on commit 3c8b125

Please sign in to comment.