Skip to content

Commit

Permalink
fix:StartGame API : Game -> CitadelsGame, remove GameView (roles and …
Browse files Browse the repository at this point in the history
…building)
  • Loading branch information
timt1028 committed Jan 11, 2024
1 parent 34674e0 commit b3a6281
Show file tree
Hide file tree
Showing 28 changed files with 304 additions and 397 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package tw.waterballsa.gaas.citadels.app.repositories;

import tw.waterballsa.gaas.citadels.domain.Game;
import tw.waterballsa.gaas.citadels.domain.Room;
import tw.waterballsa.gaas.citadels.domain.CitadelsGame;

import java.util.Optional;

public interface GameRepository {

Game createGame(Game game);
CitadelsGame createGame(CitadelsGame citadelsGame);

Optional<Game> findGameById(String gameId);
Optional<CitadelsGame> findGameById(String gameId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import lombok.Data;
import lombok.RequiredArgsConstructor;
import tw.waterballsa.gaas.citadels.app.repositories.GameRepository;
import tw.waterballsa.gaas.citadels.domain.Game;
import tw.waterballsa.gaas.citadels.domain.CitadelsGame;
import tw.waterballsa.gaas.citadels.exceptions.NotFoundException;

import javax.inject.Named;
Expand All @@ -17,12 +17,12 @@ public class GetGameUseCase {
private final GameRepository gameRepository;

public void execute(String gameId, Presenter presenter) {
Game game = findGameById(gameId);
presenter.setGame(game);
CitadelsGame citadelsGame = findGameById(gameId);
presenter.setGame(citadelsGame);
}

private Game findGameById(String gameId) {
Optional<Game> game = gameRepository.findGameById(gameId);
private CitadelsGame findGameById(String gameId) {
Optional<CitadelsGame> game = gameRepository.findGameById(gameId);
return game.orElseThrow(() -> new NotFoundException("CAN NOT FIND GAME, ID=" + gameId));
}

Expand All @@ -33,6 +33,6 @@ public static class Request {
}

public interface Presenter {
void setGame(Game game);
void setGame(CitadelsGame citadelsGame);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,21 @@
import lombok.Data;
import lombok.RequiredArgsConstructor;
import tw.waterballsa.gaas.citadels.app.repositories.GameRepository;
import tw.waterballsa.gaas.citadels.domain.BuildCard;
import tw.waterballsa.gaas.citadels.domain.CharacterCard;
import tw.waterballsa.gaas.citadels.domain.Game;
import tw.waterballsa.gaas.citadels.domain.BuildingCard;
import tw.waterballsa.gaas.citadels.domain.RoleCard;
import tw.waterballsa.gaas.citadels.domain.CitadelsGame;
import tw.waterballsa.gaas.citadels.domain.Player;

import javax.inject.Named;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

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


@Named
@RequiredArgsConstructor
Expand All @@ -27,38 +28,38 @@ public class StartGameUseCase {
private final GameRepository gameRepository;

public void execute(Request request, Presenter presenter) {
Game game = createGame(request);
presenter.setGame(gameRepository.createGame(game));
CitadelsGame citadelsGame = createGame(request);
presenter.setGame(gameRepository.createGame(citadelsGame));
}

private Game createGame(Request request) {
private CitadelsGame createGame(Request request) {
List<Player> players = getPlayers(request.getPlayers());
List<CharacterCard> characterCards = getCharacterCards();
List<BuildCard> buildCards = getBuildCards();
Game game = new Game(request.getRoomId(), request.getRoomName(), players, characterCards, buildCards);
game.start();
return game;
List<RoleCard> roleCards = getRoleCards();
List<BuildingCard> buildingCards = getBuildingCards();
CitadelsGame citadelsGame = new CitadelsGame(players, roleCards, buildingCards);
citadelsGame.start();
return citadelsGame;
}

private List<CharacterCard> getCharacterCards() {
return Arrays.asList(new CharacterCard(1, "刺客"),
new CharacterCard(2, "小偷"),
new CharacterCard(3, "魔術師"),
new CharacterCard(4, "國王"),
new CharacterCard(5, "住持"),
new CharacterCard(6, "商人"),
new CharacterCard(7, "建築師"),
new CharacterCard(8, "領主"));
private List<RoleCard> getRoleCards() {
return Arrays.asList(new RoleCard(1, "刺客"),
new RoleCard(2, "小偷"),
new RoleCard(3, "魔術師"),
new RoleCard(4, "國王"),
new RoleCard(5, "住持"),
new RoleCard(6, "商人"),
new RoleCard(7, "建築師"),
new RoleCard(8, "領主"));
}

private List<Player> getPlayers(List<UserRequest> playerIds) {
return playerIds.stream()
.map(user -> new Player(user.getId(), user.getName(), user.getImageName()))
.collect(Collectors.toList());
.collect(toList());
}

public interface Presenter {
void setGame(Game game);
void setGame(CitadelsGame citadelsGame);
}

@Data
Expand All @@ -69,7 +70,6 @@ public static class Request {
public String roomName;
public String holderId;
public List<UserRequest> players;

}

@Data
Expand All @@ -80,25 +80,25 @@ public static class UserRequest {
public String imageName;
}

private List<BuildCard> getBuildCards() {
List<BuildCard> cards = new ArrayList<>();
private List<BuildingCard> getBuildingCards() {
List<BuildingCard> cards = new ArrayList<>();
Stream.of(
getBuildCards(BuildCard.Color.YELLOW, 12),
getBuildCards(BuildCard.Color.BLUE, 11),
getBuildCards(BuildCard.Color.GREEN, 11),
getBuildCards(BuildCard.Color.RED, 11),
getBuildCards(BuildCard.Color.PURPLE, 30)
getBuildingCards(BuildingCard.Color.YELLOW, 12),
getBuildingCards(BuildingCard.Color.BLUE, 11),
getBuildingCards(BuildingCard.Color.GREEN, 11),
getBuildingCards(BuildingCard.Color.RED, 11),
getBuildingCards(BuildingCard.Color.PURPLE, 30)
)
.flatMap(Collection::stream)
.forEach(cards::add);

return cards;
}

private List<BuildCard> getBuildCards(BuildCard.Color color, int count) {
private List<BuildingCard> getBuildingCards(BuildingCard.Color color, int count) {
return IntStream.range(0, count)
.mapToObj(i -> new BuildCard("card name", 2, color))
.collect(Collectors.toList());
.mapToObj(i -> new BuildingCard("card name", 2, color))
.collect(toList());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

@Getter
@AllArgsConstructor
public class BuildCard {
public class BuildingCard {
private String name;
private int coins;
private Color color;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package tw.waterballsa.gaas.citadels.domain;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static java.util.UUID.randomUUID;

public class CitadelsGame {
private final String id;
private final List<Player> players;
private final List<RoleCard> roleCards;
private final List<BuildingCard> buildingCards;
public static final Integer DEFAULT_COINS = 2;
public static final Integer DEFAULT_CARD_QUANTITY = 2;

public CitadelsGame(List<Player> players, List<RoleCard> roleCards, List<BuildingCard> buildingCards) {
this.id = randomUUID().toString();
this.players = players;
this.roleCards = roleCards;
this.buildingCards = buildingCards;
}

public CitadelsGame(String id, List<Player> players, List<RoleCard> roleCards, List<BuildingCard> buildingCards) {
this.id = id;
this.players = players;
this.roleCards = roleCards;
this.buildingCards = buildingCards;
}

public String getId() {
return id;
}

public List<Player> getPlayers() {
return List.copyOf(players);
}

public List<BuildingCard> getBuildingCards() {
return List.copyOf(buildingCards);
}

public List<RoleCard> getRoleCards() {
return List.copyOf(roleCards);
}

public void randomlyAwardCrownToOnePlayer() {
Collections.shuffle(players);
Player kingPlayer = players.get(0);
kingPlayer.acquireCrown();
}

public void start() {
randomlyAwardCrownToOnePlayer();
distributingCardsAndCoinsToEachPlayer();
}

private void distributingCardsAndCoinsToEachPlayer() {
players.forEach(player -> {
player.plusCards(getTwoCards());
player.plusCoins(2);
});

}

public List<BuildingCard> getTwoCards() {
return Arrays.asList(new BuildingCard("test", 3, BuildingCard.Color.BLUE), new BuildingCard("test", 2, BuildingCard.Color.BLUE));
}

}

This file was deleted.

Loading

0 comments on commit b3a6281

Please sign in to comment.