Skip to content

Commit

Permalink
Merge pull request #35 from aoaaceai/master
Browse files Browse the repository at this point in the history
make every skill a standalone class for accessibilty
  • Loading branch information
secminhr committed May 27, 2020
2 parents 4f77723 + c8ec65d commit 9eb6f15
Show file tree
Hide file tree
Showing 64 changed files with 1,715 additions and 305 deletions.
1 change: 1 addition & 0 deletions _config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
theme: jekyll-theme-slate
8 changes: 8 additions & 0 deletions src/main/java/eod/BoardPosition.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package eod;

public enum BoardPosition {
SELF_BASE,
ENEMY_BASE,
SELF_CONFLICT,
ENEMY_CONFLICT
}
12 changes: 6 additions & 6 deletions src/main/java/eod/Game.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
import eod.effect.Effect;
import eod.effect.EffectExecutor;
import eod.event.Event;
import eod.event.EventManager;
import eod.event.relay.EventManager;
import eod.event.RoundEndEvent;
import eod.event.RoundStartEvent;
import eod.event.listener.EventListener;
import eod.event.relay.EventReceiver;
import eod.exceptions.GameLosingException;
import eod.exceptions.NotSupportedException;
import eod.param.AttackParam;
Expand Down Expand Up @@ -196,11 +196,11 @@ public void sendEvent(GameObject sender, Event event) {
eventManager.send(sender, event);
}

public void registerListener(EventListener listener) {
eventManager.registerListener(listener);
public void registerReceiver(EventReceiver receiver) {
eventManager.registerReceiver(receiver);
}
public void unregisterListener(EventListener listener) {
eventManager.unregisterListener(listener);
public void unregisterReceiver(EventReceiver receiver) {
eventManager.unregisterReceiver(receiver);
}

@Override
Expand Down
31 changes: 30 additions & 1 deletion src/main/java/eod/Gameboard.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,30 @@ public void removeObject(int x, int y) throws IllegalArgumentException {
board[x][y] = null;
}

public BoardPosition getPosition(Player player, Point p) {
if(player.isPlayerA()) {
if(p.x < firstLine) {
return BoardPosition.SELF_BASE;
} else if(p.x < middle) {
return BoardPosition.SELF_CONFLICT;
} else if(p.x < secondLine) {
return BoardPosition.ENEMY_CONFLICT;
} else {
return BoardPosition.ENEMY_BASE;
}
} else {
if(p.x >= secondLine) {
return BoardPosition.SELF_BASE;
} else if(p.x >= middle) {
return BoardPosition.SELF_CONFLICT;
} else if(p.x >= firstLine) {
return BoardPosition.ENEMY_CONFLICT;
} else {
return BoardPosition.ENEMY_BASE;
}
}
}

public ArrayList<Point> getPlayersConflict(Player player, PointParam param) {
int iMin, iMax;
if(player.isPlayerA()) {
Expand Down Expand Up @@ -244,7 +268,12 @@ public void summonObject(WarObject object, Point point) throws IllegalArgumentEx
}
board[x][y] = object;
object.updatePosition(point);
game.sendEvent(this, new ObjectEnterEvent(object));
}

public void transfer(WarObject from, WarObject to) {
Point p = new Point(from.position.x, from.position.y);
board[p.x][p.y] = to;
to.updatePosition(p);
}

@Override
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/eod/IO/LocalOutput.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@ public void sendWarObjectSummoned(WarObject object, Point position) {
System.out.println(object.getName() + "被召喚到了" + position.toString() + "的位置");
}

@Override
public void sendWarObjectTransferred(WarObject from, WarObject to) {
System.out.println(from.getName() + "變身為" + to.getName());
}

@Override
public void sendWinning(Player player) {
System.out.println(player.getName() + "贏了");
Expand Down
1 change: 1 addition & 0 deletions src/main/java/eod/IO/Output.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public interface Output {
void sendWarObjectDied(WarObject object);
void sendWarObjectActivatedEffect(WarObject object);
void sendWarObjectSummoned(WarObject object, Point position);
void sendWarObjectTransferred(WarObject from, WarObject to);

void sendWinning(Player player);
void sendLosing(Player player);
Expand Down
79 changes: 56 additions & 23 deletions src/main/java/eod/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
import eod.effect.EffectExecutor;
import eod.event.Event;
import eod.event.*;
import eod.event.listener.EventListener;
import eod.event.relay.EventReceiver;
import eod.event.relay.EventSender;
import eod.exceptions.GameLosingException;
import eod.exceptions.NotSupportedException;
import eod.param.AttackParam;
import eod.param.DamageParam;
import eod.param.PointParam;
import eod.snapshots.Snapshotted;
import eod.warObject.CanAttack;
Expand All @@ -28,7 +30,7 @@
import java.util.Objects;

public class Player implements Snapshotted<Player.Snapshot>,
GameObject, EventListener, EffectExecutor {
GameObject, EventReceiver, EventSender, EffectExecutor {

private Deck deck;
private Game game;
Expand All @@ -39,6 +41,7 @@ public class Player implements Snapshotted<Player.Snapshot>,
private String name;
private boolean isPlayerA;
private boolean isActingPlayer = false;
private ArrayList<EventReceiver> receivers;

public Player(Deck deck, String name) {
this(deck, new Hand(), name);
Expand All @@ -48,6 +51,7 @@ public Player(Deck deck, Hand hand, String name) {
this.deck = deck;
this.hand = hand;
this.name = name;
receivers = new ArrayList<>();
}

public String getName() {
Expand All @@ -60,7 +64,7 @@ public void setLeader(Leader leader) {

public void attachToGame(Game game) {
this.game = game;
game.registerListener(this);
game.registerReceiver(this);
}
public void attachIO(Input input, Output output) {
this.input = input;
Expand Down Expand Up @@ -218,8 +222,8 @@ public ArrayList<Damageable> attack(CanAttack attacker,
return attacker.attack(target, param);
}

public void damage(Damageable target, int hp) {
target.damage(hp);
public void damage(Damageable target, DamageParam param) {
target.damage(param);
}

public void heal(Damageable damageable, int hp) {
Expand Down Expand Up @@ -288,6 +292,11 @@ public void summonObject(WarObject object, Point point) {
output.sendWarObjectSummoned(object, point);
}

public void transferObjectTo(WarObject from, WarObject to) {
getBoard().transfer(from, to);
output.sendWarObjectTransferred(from, to);
}

@Override
public void teardown() {
hand.teardown();
Expand All @@ -296,6 +305,10 @@ public void teardown() {
deck = null;
leader.teardown();
leader = null;
for(EventReceiver receiver:receivers) {
receiver.teardown();
}
receivers.clear();
}

@Override
Expand Down Expand Up @@ -343,10 +356,21 @@ public Card selectCard(Card[] cards) {

public void moveObject(WarObject object, Point point) {
game.getBoard().moveObject(object.position, point);
game.sendEvent(this, new ObjectMovingEvent(object, point));
sendUp(this, new ObjectMovingEvent(object, point));
if(inEnemyBase(object.position)) {
sendUp(this, new ObjectEnterEnemyBaseEvent(object));
}
object.updatePosition(point);
}

public boolean inEnemyBase(Point p) {
if(isPlayerA) {
return p.x < Gameboard.firstLine;
} else {
return p.x >= Gameboard.secondLine;
}
}

public void loseObject(WarObject object) {
getBoard().removeObject(object);
if(object instanceof Damageable) {
Expand Down Expand Up @@ -392,15 +416,30 @@ public ArrayList<Point> getFront(Point p, PointParam param) {
return getBoard().getLine(p, dx, 0, param);
}

public void registerListener(EventListener listener) {
game.registerListener(listener);
public BoardPosition getPosition(Point p) {
return getBoard().getPosition(this, p);
}

@Override
public void registerReceiver(EventReceiver receiver) {
receivers.add(receiver);
}



@Override
public void unregisterReceiver(EventReceiver receiver) {
receivers.remove(receiver);
}

public void unregisterListener(EventListener listener) {
game.unregisterListener(listener);
@Override
public void send(GameObject sender, Event event) {
receivers.stream()
.filter(receiver -> receiver.supportedEventTypes().contains(event.getClass()))
.forEach(receiver -> receiver.onEventOccurred(sender, event));
}

public void sendEvent(GameObject sender, Event event) {
public void sendUp(GameObject sender, Event event) {
game.sendEvent(sender, event);
}

Expand All @@ -420,30 +459,24 @@ public ArrayList<Class<? extends Event>> supportedEventTypes() {
public void onEventOccurred(GameObject sender, Event event) {
if(event instanceof RoundStartEvent) {
output.sendRoundStarted(((RoundStartEvent) event).getStartedRound());
return;
}
if(event instanceof RoundEndEvent) {
} else if(event instanceof RoundEndEvent) {
output.sendRoundEnded(((RoundEndEvent) event).getEndedRound());
return;
}
if(event instanceof DirectAttackEvent) {
} else if(event instanceof DirectAttackEvent) {
DirectAttackEvent directAttack = (DirectAttackEvent) event;
Character attacker = directAttack.getAttacker();
for(Damageable victim: directAttack.getTargets()) {
output.sendCharacterAttacked(attacker, (Character) victim);
}
return;
}
if(event instanceof ObjectDeadEvent) {
} else if(event instanceof ObjectDeadEvent) {
ObjectDeadEvent objectDeadEvent = (ObjectDeadEvent) event;
WarObject deadObject = (WarObject) objectDeadEvent.getDeadObject();
output.sendWarObjectDied(deadObject);
return;
}
if(event instanceof ObjectMovingEvent) {
} else if(event instanceof ObjectMovingEvent) {
ObjectMovingEvent movingEvent = (ObjectMovingEvent) event;
output.sendWarObjectMoved(movingEvent.getObject(), movingEvent.getNewPos());
}

send(sender, event);
}

public class Snapshot implements eod.snapshots.Snapshot {
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/eod/card/abstraction/action/AttackCard.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public AttackCard(int cost) {
}
public Player rival;

public abstract Attack attack();
public abstract void attack(EffectExecutor executor);

@Override
public void setPlayer(Player p) {
Expand All @@ -20,6 +20,6 @@ public void setPlayer(Player p) {

@Override
public void applyEffect(EffectExecutor executor) {
executor.tryToExecute(attack());
attack(executor);
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package eod.card.concrete.attack.transparent;

import eod.Party;
import eod.Player;
import eod.card.abstraction.Card;
import eod.card.abstraction.action.AttackCard;
import eod.effect.Attack;
import eod.effect.EffectExecutor;
import eod.effect.RegionalAttack;
import eod.specifier.Accessing;
import eod.warObject.Status;
import eod.warObject.WarObject;
import eod.warObject.character.abstraction.Character;
import eod.warObject.character.abstraction.assaulter.Shooter;

Expand All @@ -20,14 +23,15 @@ public PreciseShot() {
}

@Override
public Attack attack() {
public void attack(EffectExecutor executor) {
Accessing characters = WarObject(player.getBoard()).which(Being(Character.class));
RegionalAttack attack = RequestRegionalAttack(3)
.from(player,
characters.which(OwnedBy(player)).which(Being(Shooter.class)).get()
);
return attack.to(player,
characters.which(OwnedBy(rival)).which(InRangeOf(attack.attacker())).which(WithoutStatus(Status.SNEAK)).get());
executor.tryToExecute(attack.to(player,
characters.which(OwnedBy(rival)).which(InRangeOf(attack.attacker())).which(WithoutStatus(Status.SNEAK)).get())
);
}

@Override
Expand Down
18 changes: 15 additions & 3 deletions src/main/java/eod/card/concrete/attack/transparent/Snipe.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package eod.card.concrete.attack.transparent;

import eod.Party;
import eod.Player;
import eod.card.abstraction.Card;
import eod.card.abstraction.action.AttackCard;
import eod.effect.Attack;
import eod.effect.EffectExecutor;
import eod.effect.RegionalAttack;
import eod.specifier.Accessing;
import eod.warObject.Damageable;
Expand All @@ -28,11 +30,21 @@ public Card copy() {
}

@Override
public Attack attack() {
public void attack(EffectExecutor executor) {
Accessing objects = WarObject(player.getBoard());
WarObject[] ownedSnipers = objects.which(OwnedBy(player)).which(Being(Sniper.class)).get();
RegionalAttack attack = RequestRegionalAttack(8).from(player, ownedSnipers);
return attack.to(player, objects.which(OwnedBy(rival)).which(InRangeOf(attack.attacker())).which(Being(Damageable.class)).which(WithoutStatus(Status.SNEAK)).get());
RegionalAttack attack = RequestRegionalAttack(decideAttack(ownedSnipers)).from(player, ownedSnipers);
executor.tryToExecute(
attack.to(player, objects.which(OwnedBy(rival)).which(InRangeOf(attack.attacker())).which(Being(Damageable.class)).which(WithoutStatus(Status.SNEAK)).get())
);
}

private int decideAttack(WarObject[] snipers) {
if(snipers.length >= 2) {
return 8;
} else {
return 6;
}
}

@Override
Expand Down
Loading

0 comments on commit 9eb6f15

Please sign in to comment.