Skip to content

Commit

Permalink
Merge pull request #52 from Game-as-a-Service/feature/kill-continue-w…
Browse files Browse the repository at this point in the history
…eapon

finish RepeatingCrossbow TDD and ATDD
  • Loading branch information
scolley31 committed Apr 13, 2024
2 parents 547938f + f0d185f commit 27e0104
Show file tree
Hide file tree
Showing 14 changed files with 844 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,14 @@ public class Game {
private Stack<Behavior> topBehavior = new Stack<>();

public Game(String gameId, List<Player> players) {
playCardHandler = new DyingAskPeachBehaviorHandler(new PeachBehaviorHandler(new NormalActiveKillBehaviorHandler(new MinusMountsBehaviorHandler(new PlusMountsBehaviorHandler(null, this), this), this), this), this);
playCardHandler = new DyingAskPeachBehaviorHandler(new PeachBehaviorHandler(new NormalActiveKillBehaviorHandler(new MinusMountsBehaviorHandler(new PlusMountsBehaviorHandler(new RepeatingCrossbowBehaviorHandler(null, this), this), this), this), this), this);
setGameId(gameId);
setPlayers(players);
enterPhase(new Initial(this));
}

public Game() {
playCardHandler = new DyingAskPeachBehaviorHandler(new PeachBehaviorHandler(new NormalActiveKillBehaviorHandler(new MinusMountsBehaviorHandler(new PlusMountsBehaviorHandler(null,this), this), this), this), this);
playCardHandler = new DyingAskPeachBehaviorHandler(new PeachBehaviorHandler(new NormalActiveKillBehaviorHandler(new MinusMountsBehaviorHandler(new PlusMountsBehaviorHandler(new RepeatingCrossbowBehaviorHandler(null, this),this), this), this), this), this);
}


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

import com.gaas.threeKingdoms.handcard.HandCard;
import com.gaas.threeKingdoms.handcard.basiccard.Kill;
import com.gaas.threeKingdoms.handcard.equipmentcard.armorcard.RepeatingCrossbowArmorCard;
import com.gaas.threeKingdoms.player.Player;
import lombok.Data;

Expand All @@ -26,7 +27,9 @@ public boolean isPlayedValidCard(String cardId) {
if (handCardOptional.isEmpty()) return false;

HandCard handCard = handCardOptional.get();
if (handCard instanceof Kill && isShowKill) {
if (handCard instanceof Kill && currentRoundPlayer.getEquipmentArmorCard() instanceof RepeatingCrossbowArmorCard) {
isShowKill = false;
} else if (handCard instanceof Kill && isShowKill) {
throw new IllegalStateException("Player already played Kill Card");
} else if (handCard instanceof Kill) {
isShowKill = true;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.gaas.threeKingdoms.behavior.behavior;

import com.gaas.threeKingdoms.Game;
import com.gaas.threeKingdoms.Round;
import com.gaas.threeKingdoms.behavior.Behavior;
import com.gaas.threeKingdoms.events.*;
import com.gaas.threeKingdoms.handcard.HandCard;
import com.gaas.threeKingdoms.handcard.equipmentcard.armorcard.ArmorCard;
import com.gaas.threeKingdoms.handcard.equipmentcard.armorcard.RepeatingCrossbowArmorCard;
import com.gaas.threeKingdoms.handcard.equipmentcard.mountscard.PlusMountsCard;
import com.gaas.threeKingdoms.player.Player;

import java.util.List;

public class RepeatingCrossbowBehavior extends Behavior {
public RepeatingCrossbowBehavior(Game game, Player behaviorPlayer, List<String> reactionPlayers, Player currentReactionPlayer, String cardId, String playType, HandCard card) {
super(game, behaviorPlayer, reactionPlayers, currentReactionPlayer, cardId, playType, card, false, true);
}

@Override
public List<DomainEvent> askTargetPlayerPlayCard() {
playerPlayCard(behaviorPlayer, behaviorPlayer, cardId);
ArmorCard armorCard = behaviorPlayer.getEquipment().getArmor();
String originEquipmentId = "";
if (armorCard != null) {
originEquipmentId = armorCard.getId();
}
card.effect(behaviorPlayer);

Round currentRound = game.getCurrentRound();
RoundEvent roundEvent = new RoundEvent(currentRound);
List<PlayerEvent> playerEvents = game.getPlayers().stream().map(PlayerEvent::new).toList();
return List.of(new PlayCardEvent(
"出牌",
behaviorPlayer.getId(),
behaviorPlayer.getId(),
cardId,
playType,
game.getGameId(),
playerEvents,
roundEvent,
game.getGamePhase().getPhaseName()),
new PlayEquipmentCardEvent(behaviorPlayer.getId(), cardId, originEquipmentId));
}

@Override
protected List<DomainEvent> doAcceptedTargetPlayerPlayCard(String playerId, String targetPlayerId, String cardId, String playType) {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.gaas.threeKingdoms.behavior.handler;

import com.gaas.threeKingdoms.Game;
import com.gaas.threeKingdoms.behavior.Behavior;
import com.gaas.threeKingdoms.behavior.PlayCardBehaviorHandler;
import com.gaas.threeKingdoms.behavior.behavior.PlusMountsBehavior;
import com.gaas.threeKingdoms.handcard.HandCard;
import com.gaas.threeKingdoms.handcard.equipmentcard.armorcard.RepeatingCrossbowArmorCard;
import com.gaas.threeKingdoms.player.Player;

import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.stream.Collectors;

public class RepeatingCrossbowBehaviorHandler extends PlayCardBehaviorHandler {

public RepeatingCrossbowBehaviorHandler(PlayCardBehaviorHandler next, Game game) {
super(next, game);
}

@Override
protected boolean match(String playerId, String cardId, List<String> targetPlayerId, String playType) {
Player player = getPlayer(playerId);
Optional<HandCard> card = getCard(cardId, player);
return card.filter(handCard -> handCard instanceof RepeatingCrossbowArmorCard).isPresent();
}

@Override
protected Behavior doHandle(String playerId, String cardId, List<String> targetPlayerId, String playType) {
Player player = game.getPlayer(playerId);

List<String> players = game.getPlayers().stream()
.map(Player::getId)
.collect(Collectors.toList());

HandCard card = player.getHand().getCard(cardId).orElseThrow(NoSuchElementException::new);

return new PlusMountsBehavior(game, player, players, player, cardId, playType, card);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.gaas.threeKingdoms.handcard.basiccard.Dodge;
import com.gaas.threeKingdoms.handcard.basiccard.Kill;
import com.gaas.threeKingdoms.handcard.basiccard.Peach;
import com.gaas.threeKingdoms.handcard.equipmentcard.armorcard.RepeatingCrossbowArmorCard;
import com.gaas.threeKingdoms.handcard.equipmentcard.mountscard.RedRabbitHorse;
import com.gaas.threeKingdoms.handcard.equipmentcard.mountscard.ShadowHorse;
import lombok.AllArgsConstructor;
Expand All @@ -15,6 +16,8 @@
import java.util.stream.IntStream;
import java.util.stream.Stream;

import static com.gaas.threeKingdoms.handcard.PlayCard.ECA066;

@Data
@AllArgsConstructor
public class Deck {
Expand All @@ -28,6 +31,7 @@ public Deck() {
cardDeck.add(new Dodge(PlayCard.BHK039));
cardDeck.add(new RedRabbitHorse(PlayCard.EH5044));
cardDeck.add(new ShadowHorse(PlayCard.ES5018));
cardDeck.add(new RepeatingCrossbowArmorCard(ECA066));
});
shuffle();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,20 @@

import com.gaas.threeKingdoms.handcard.equipmentcard.EquipmentCard;
import com.gaas.threeKingdoms.handcard.PlayCard;
import com.gaas.threeKingdoms.player.Player;

/**
* 諸葛連弩
* */
public abstract class ArmorCard extends EquipmentCard {

public ArmorCard(PlayCard playCard) {
super(playCard);
}

@Override
public void effect(Player player) {
player.getEquipment().setArmor(this);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.gaas.threeKingdoms.handcard.equipmentcard.armorcard;

import com.gaas.threeKingdoms.handcard.PlayCard;

public class RepeatingCrossbowArmorCard extends ArmorCard {
public RepeatingCrossbowArmorCard(PlayCard playCard) {
super(playCard);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import com.gaas.threeKingdoms.generalcard.GeneralCard;
import com.gaas.threeKingdoms.handcard.HandCard;
import com.gaas.threeKingdoms.handcard.equipmentcard.armorcard.ArmorCard;
import com.gaas.threeKingdoms.handcard.equipmentcard.mountscard.MinusMountsCard;
import com.gaas.threeKingdoms.handcard.equipmentcard.mountscard.PlusMountsCard;
import com.gaas.threeKingdoms.rolecard.RoleCard;
Expand Down Expand Up @@ -55,6 +56,10 @@ public MinusMountsCard getEquipmentMinusOneMountsCard() {
return equipment.getMinusOne();
}

public ArmorCard getEquipmentArmorCard() {
return equipment.getArmor();
}

public void damage(int i) {
bloodCard.setHp(getHP() - i);
}
Expand Down

0 comments on commit 27e0104

Please sign in to comment.