package io.mazenmc.skypebot.game; import com.samczsun.skype4j.user.User; import io.mazenmc.skypebot.SkypeBot; import io.mazenmc.skypebot.utils.Resource; import io.mazenmc.skypebot.utils.Utils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public abstract class BaseGame implements Game { private GameState state = GameState.WAITING_FOR_PLAYERS; private int minPlayers = Integer.MAX_VALUE; private List<String> activePlayers = new ArrayList<>(); protected Map<String, Integer> scores = new HashMap<>(); @Override public GameState state() { return state; } @Override public void setState(GameState state) { if (state == GameState.ENDED) { end(); } this.state = state; } @Override public int minPlayers() { return minPlayers; } @Override public void setMinPlayers(int minPlayers) { this.minPlayers = minPlayers; } @Override public void addPlayer(User user) { activePlayers.add(user.getUsername()); scores.put(user.getUsername(), 0); } @Override public void removePlayer(String user) { activePlayers.remove(user); scores.remove(user); } public boolean incrementScore(String user) { if (!activePlayers.contains(user)) { return false; } if (!scores.containsKey(user)) { scores.put(user, 1); return true; } scores.put(user, scores.get(user) + 1); return true; } public void setScore(String user, int score) { if (!activePlayers.contains(user)) { return; } this.scores.put(user, score); } public int scoreFor(String user) { if (!activePlayers.contains(user)) { return -1; } if (!scores.containsKey(user)) { return 0; } return scores.get(user); } @Override public List<String> activePlayers() { return activePlayers; } @Override public void send(String user, String message) { try { SkypeBot.getInstance().getSkype().getContact(user).getPrivateConversation().sendMessage(message); } catch (Exception e) { Resource.sendMessage("Failed to send a message to " + user + "..."); } } @Override public User fetchUser(String name) { return Utils.getUser(name); } @Override public void sendToAll(String message) { Resource.sendMessage(name() + ": " + message); } public void end() {} }