У меня есть игра, которая отслеживает статистику пользователей после каждого матча, например, как далеко они прошли, сколько раз они атаковали, как далеко они упали и т. Д., И мои текущие реализации выглядят примерно так (упрощенная версия):
Class Player{
int id;
public Player(){
int id = Math.random()*100000;
PlayerData.players.put(id,new PlayerData());
}
public void jump(){
//Logic to make the user jump
//...
//call the playerManager
PlayerManager.jump(this);
}
public void attack(Player target){
//logic to attack the player
//...
//call the player manager
PlayerManager.attack(this,target);
}
}
Class PlayerData{
public static HashMap<int, PlayerData> players = new HashMap<int,PlayerData>();
int id;
int timesJumped;
int timesAttacked;
}
public void incrementJumped(){
timesJumped++;
}
public void incrementAttacked(){
timesAttacked++;
}
}
Class PlayerManager{
public static void jump(Player player){
players.get(player.getId()).incrementJumped();
}
public void incrementAttacked(Player player, Player target){
players.get(player.getId()).incrementAttacked();
}
}
Итак, у меня есть класс PlayerData, который хранит всю статистику и выводит ее из класса player, потому что он не является частью логики игрока.Затем у меня есть PlayerManager, который будет находиться на сервере и который контролирует взаимодействие между игроками (большая часть логики исключает это, поэтому я мог бы сохранить это простым).Я помещаю вызовы в класс PlayerData в классе Manager, потому что иногда вам приходится делать определенные проверки между игроками, например, если атака действительно попадает, то вы увеличиваете "attackHits".
Основная проблема (на мой взгляд, поправьте меня, если я ошибаюсь) состоит в том, что это не очень расширяемо.Мне нужно будет дотронуться до класса PlayerData, если я хочу отслеживать новую статистику, добавляя методы и поля, а затем мне придется потенциально добавить больше методов в мой PlayerManager, чтобы он не был очень модулированным.
Если есть улучшение, которое вы бы порекомендовали, я был бы очень признателен.Спасибо.